这是一个Java代码,用于从用户输入最小数字到用户输入最大数字打印数据。
我没有错误。问题是我程序打印的值为1的输出。
我该如何解决这个问题?
package armstrong;
import java.util.Scanner;
public class armstrong {
public static void main(String[] args) {
Scanner obj=new Scanner(System.in);
System.out.println("enter min number");
int min=obj.nextInt();
System.out.println("enter max number");
int max=obj.nextInt();
int a;
for (int j = min; j <=max; j++)
{
int temp = j ;
int l=digit(j);
System.out.println(l);
int sum=0;
if(j>0)
{
a=j%10;
sum=(int) (sum+Math.pow(a,l));
j=j/10;
}
if(sum == temp)
System.out.println(temp);
//else
//System.out.println(n+ " is not an armstrong number");
}
}
//java.lang.Math.pow(double a, double b)
public static int digit(int x){
int z=0;
if(x<0)
{
x=x * -1;
}
else if(x==0)
{
x=1;
}
while(x>0)
{
x=x/10;
z++;
}
return z;
}
}
答案 0 :(得分:1)
这是因为你在循环中改变你的for循环索引变量j。 j = j/10
行会自动使j返回0,并且在循环内部时它永远不会增加,从而导致for循环停滞。
您应该改变您创建的temp
变量
这应该可以使你的for循环无限:
for (int j = min; j <=max; j++)
{
int temp = j ;
int l=digit(j);
System.out.println(l);
int sum=0;
if(j>0)
{
a=temp%10;
sum=(int) (sum+Math.pow(a,l));
temp=temp/10;
}
if(sum == j)
System.out.println(j);
//else
//System.out.println(n+ " is not an armstrong number");
}
但是,您仍然需要对算法进行大量工作。
看看这个:http://www.programmingsimplified.com/java/source-code/java-program-armstrong-number