2017-07-14 173 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