2012-10-21 87 views
2

因此,我的任務是在一系列數字(用戶輸入)中查找所有「幻數」。幻數是一個數字,其因素(除本身之外)總和爲該數字。所以6將是一個神奇的數字,因爲它除了它本身之外的其他因素是1,2和3,總和爲6.我已經盯着這段代碼一段時間了,並且無法弄清楚爲什麼它不會打印出來神奇的數字。任何幫助,將不勝感激。java中的「Magic Number」練習

public class MagicNumber { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    System.out.print("What is the top of the range?"); 
    int range = IO.readInt(); 
    if (range <= 0) { 
     IO.reportBadInput(); 
    } 
    int sumOfFactors = 0; 
    for (int i = 1 ; i <= range ; i++) { 
     for (int m = 1 ; m < i; m++) { 
      if (i % m == 0) { 
       sumOfFactors = sumOfFactors + m; 
      } 
      if (sumOfFactors == i) { 
       System.out.println(i); 
        } 
      } 
     } 
    } 
} 
+7

它不要直視,*** ***調試它。要麼通過調試器運行它,要麼通過println語句慷慨地發現它的行爲表現。 –

+0

出於好奇,這個屬性通常被稱爲[完美數字](http://en.wikipedia.org/wiki/Perfect_number)?例如,28的主要因素是2(重數2)和7,但是28的正確因數是1,2,4,7和14(其總和爲28)。 28是「神奇數字」嗎? –

+0

我可以看到的一件事是,您不會將sumOfFactors重置爲零。 –

回答

2

您正在測試是否sumOfFactors == i,而你還在總結的因素。您需要將其移動到m循環之外。然後在每次通過i循環啓動m循環之前,您需要將sumOfFactors設置爲0,而不是在循環開始時一次。

+0

美麗,它現在有效。謝謝。 – biohax2015

+0

@PavelVaysberg,然後接受這個答案哥們:) – Dipin

0

試試這個:

public class MagicNumber { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     System.out.print("What is the top of the range?"); 
     int range = IO.readInt(); 
     if (range <= 0) { 
      IO.reportBadInput(); 
     } 

     for (int i = 1 ; i <= range ; i++) { 
    int sumOfFactors = 0; 
      for (int m = 1 ; m < i; m++) { 
       if (i % m == 0) { 
        sumOfFactors = sumOfFactors + m; 
       } 
    } 
       if (sumOfFactors == i) { 
        System.out.println(i); 
         } 

      } 
     } 
    } 
+0

我不這麼認爲,因爲我希望它打印出該範圍內的每個幻數。因此,對於一個和一個範圍之間的每個數字,我想檢查它是否是一個幻數,然後將其打印出來。 – biohax2015

+0

OP正在嘗試打印「<=範圍」的幻數(一些'm's)。 –

0

II覺得你需要先for內環路初始化int sumOfFactors = 0;和移動第二if,出來的第二for循環,因爲你需要全要素的總和與對如下的當前數量

for (int i = 1 ; i <= range ; i++) { 
    int sumOfFactors = 0; //<--Moved inside 
    for (int m = 1 ; m < i; m++) { 
     if (i % m == 0) { 
      sumOfFactors = sumOfFactors + m; 
     } 
    } 
    if (sumOfFactors == i) { // <-- moveed out of second loop 
     System.out.println(i); 
    } 
} 
0

只是指這個魔術數字程序http://getprogramcode.com/2013/11/java-program-to-check-for-a-magic-number/,想到寫這個。

public class HelloWorld{ 

    public static void main(String []args){ 
     static int number=5432; 
     while(number>9){ 
      int tot = calculateSum(number); 
      System.out.println(tot); 
     } 
    } 

    private static int calculateSum(int num){ 
     int sum = 0; 
     while (num > 0) { 
      int a = num % 10; 
      sum = sum+ a; 
      num = num/10; 
     } 
     number = sum; 
     return sum; 
    } 
} 
0
public class Magic { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     int b =778393; 
     int e=0,c; 

     while (b>=10) { 
      while (b>0) { 
       c=b%10; 
       b=b/10; 
       e=e+c; 
      } 
      b=e; 
      e=0; 
      System.out.println(b); 
     } 
     if (b==1) { 
      System.out.println("It is a magic no."+b); 
     } else { 
      System.out.println("Not"+b); 
     } 
    } 
}