这段代码怎么了?为什么要打印" 1"?

时间:2017-07-14 17:55:55

标签: java

这是一个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;
 }
}

1 个答案:

答案 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