我写了一个java程序,它的试运行显示了正确的结果,但在运行该程序时,它没有显示任何输出



这是我的Java程序,它应该打印给定限制之间的氖数。如果一个数字的平方的所有数字之和等于输入的数字,则称该数字为氖。

示例

  1. 9 = 81广场
  2. 8 + 1 = 9之和

有人能解释一下我目前的实现有什么问题吗?

这是我的程序

import java.util.*;
class neon
{
  public static void main(String args[])
  {
    Scanner me = new Scanner(System.in);
    System.out.print("  What's about the lower limit ?   ");
    int l=me.nextInt();
    System.out.println();
    System.out.print("  What's about the upper limit ?   ");
    int h=me.nextInt();
    System.out.println();
    int sum=0;
    for(int i=l;i<=h;i++)
    {
        int ii=i*i;
        for(int j=0;j<3;j++)
        {
            int a=ii%10;
            ii=ii/10;
            sum=sum+a;
            if(sum==i)
            {
                System.out.println(i+"t");
                break;
            }
        }
    }
  }
}

这对我有效,试试看,让我知道:

import java.util.*;
class neon
{
  public static void main(String args[])
  {
    Scanner me = new Scanner(System.in);
    System.out.print("  What's about the lower limit ?   ");
    int l=me.nextInt();
    System.out.println();
    System.out.print("  What's about the upper limit ?   ");
    int h=me.nextInt();
    System.out.println();
    for(int i=l;i<=h;i++)
    {
        int sum=0;
        int ii=i*i;
        while(ii!=0){   
            int a=ii%10;
            ii=ii/10;
            sum+=a;
        }
        if(sum==i)
        {
            System.out.println(i+"t");
            break;
        }
    }
  }
}

您的第二个循环for(int j=0;j<3;j++)的上界为3,因此它不适用于大于31的数字(32*32=1024=>4位)。

此外,您需要删除break,因为您没有测试ii的所有数字。

  • 您必须先在循环内部加sum=0
  • 从第二个循环中取出if循环,并去除中断
  • 建议:取循环内部的平方根长度作为上限

下面你可以找到代码

public class neon
{
  public static void main(String args[])
  {
    Scanner me = new Scanner(System.in);
    System.out.print("  What's about the lower limit ?   ");
    int l=me.nextInt();
    System.out.println();
    System.out.print("  What's about the upper limit ?   ");
    int h=me.nextInt();
    System.out.println();
    int sum;
    for(int i=l;i<=h;i++)
    {
        sum=0;
        Integer ii=i*i;
        for(int j=0;j<=Integer.toString(ii).length();j++)
        {
            int a=ii%10;
            ii=ii/10;
            sum=sum+a;
        }
        if( sum == i )
        {
            System.out.println(i+"t");
        }
    }
  }
}

我不完全确定你的代码,但我只是做了一个小测试,我认为你想把你的

int sum=0;

进入你的for循环,所以它会为你测试范围内的每个数字重置:

for(int i=l;i<=h;i++)
    {
        int sum=0;
        int ii=i*i;
        for(int j=0;j<3;j++)
        {
            //Your code
        }
    }

这至少对我有用,希望能有所帮助。

最新更新