2017-07-14 116 views
-4

这是一个Java代码,用于从用户输入的最小数字到用户输入的最大数字打印阿姆斯特朗数。这段代码有什么问题?为什么它打印“1”?

我没有收到任何错误。问题是我的程序打印输出值为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

欢迎来到SO。你的格式不太正确。如果您知道如何使用eclipse(或gulp,jdb),那么以调试模式运行它。否则,只要它发生变化,就打印循环变量。目视检查代码以找到左值。 – jeff6times7

回答

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