2014-12-02 131 views
1

我有一個爲班級寫作業並被卡住了,無法弄清楚如何使它正確設置,就像它應該。感謝您的任何幫助,我感謝您。這是分配:在java中使用作業的方法完美的數字

的整數被說成是一個完美的數字,如果它的因素,包括 1(而不是數字本身),一筆數目。對於 的例子,6是一個完美的數字,因爲6 = 1 + 2 + 3。寫法完美 ,確定數字是否是一個完美的數字。在 中使用此方法確定並顯示介於2和1000之間的所有完美數字 。將每個完美數字的因子顯示爲 確認數字確實是完美的。

輸出:

6 is perfect. 
Factors:1 2 3 
28 is perfect. 
Factors: 1 2 4 7 14 
496 is perfect. 
Factors: 1 2 4 8 16 31 62 124 248 

,這裏是我被困的代碼:

public class Homework4 { 

    public static void main(String[] args) { 

     for(int num=2;num<=1000;num++) 
     { 
      if(perfect(num)) 
      { 
       System.out.println(num + " is perfect."); 
       System.out.printf("Factors: ",perfect(num)); 

      } 

     } 
    } 
     public static Boolean perfect(int num) 
     { 
      int sum = 0; 

      for(int i=1;i<num;i++) 
      { 
       if (num % i == 0) 
       { 
        sum+=i; 
       } 
      } 
      if(num==sum) 
      { 
      for(int i=1;i<num;i++) 
      { 
       if (num % i == 0) 
       { 
        System.out.print(i+" "); 
       } 
      } 


      } 
      return sum==num; 
     } 

} 

運行:

1 2 3 6 is perfect. 
1 2 3 Factors: 1 2 4 7 14 28 is perfect. 
1 2 4 7 14 Factors: 1 2 4 8 16 31 62 124 248 496 is perfect. 
1 2 4 8 16 31 62 124 248 Factors: BUILD SUCCESSFUL (total time: 0 seconds) 
+0

除了未在預期的地方顯示的「因素」我猜 – realUser404 2014-12-02 23:46:16

+0

如果是這樣的問題,是因爲你在if之前稱之爲perfect(num),所以它在完美數字之前輸出因子,然後我懷疑是否使用printf(a,b) – realUser404 2014-12-02 23:50:45

+0

這是問題所在。那麼,我將如何修復程序的順序,使它像我顯示的輸出一樣? – Cesco 2014-12-03 00:23:01

回答

1

有你能解決這個問題有兩種方式。

  • 你可以打破你perfect方法爲兩種不同的方法 - 一個檢查數量是否是完美的,一個,它打印的因素。在檢查時調用第一個,如果它返回true,則調用第二個。

或者

  • 您可以移動,打印... is perfect到方法本身的線。然後從main刪除整個if塊。
+0

當我從main刪除if塊時,會導致錯誤。 – Cesco 2014-12-03 00:16:37

+0

如果你會告訴我們錯誤是什麼,有人可能會幫助你。當然,你仍然需要在'for'循環內調用'perfect(num)',但我認爲這應該不用說了。 – 2014-12-03 00:17:40

+0

如果你的意思是刪除if(perfect(num)),則id導致錯誤,因爲它不檢查num是否爲真。對不起,如果我不回覆這個好回覆。 – Cesco 2014-12-03 00:20:34

0

什麼是這樣的:

public class Homework4 { 

public static void main(String[] args) { 

    for(int num=2;num<=1000;num++) 
    { 
     if(perfect(num)) 
     { 
      System.out.println(num + " is perfect."); 
      System.out.printf("Factors: "); 


      for(int i=1;i<num;i++) 
      { 
       if (num % i == 0) 
       { 
        System.out.print(i+" "); 
       } 
      } 
     } 
    } 
} 
public static Boolean perfect(int num) 
{ 
    int sum = 0; 

    for(int i=1;i<num;i++) 
    { 
     if (num % i == 0) 
     { 
      sum+=i; 
     } 
    } 
    return sum==num; 
} 
} 
+0

對不起,我沒有檢查是否工作,但順序似乎是這樣的更好。「完美」的方法不需要輸出任何東西,它的目標只是檢查數字是否完美 – realUser404 2014-12-02 23:57:39

+0

運行: 6是完美的。 因素:1 2 3 28是完美的。 因素:1 2 4 7 14 496是完美的。 因素:1 2 4 8 16 31 62 124 248建立成功(總時間:0秒) 是我與你的。仍然沒有得到正確的輸出,但似乎更接近謝謝迄今爲止的幫助! – Cesco 2014-12-03 00:15:54

+0

你只需要添加行返回否? – realUser404 2014-12-03 03:47:28

-1

試試這個

public class Homework4 { 

public static void main(String[] args) { 

    for(int num=2;num<=1000;num++) 
    { 
     if(perfect(num)) 
     { 
      System.out.println(num + " is perfect."); 
      System.out.printf("Factors: "); 


      for(int i=1;i<num;i++) 
      { 
       if (num % i == 0) 
       { 
        System.out.print(i+" "); 
       } 
      } 
      System.out.print("\n"); // add this line to your code 

     } 
    } 
} 
public static Boolean perfect(int num) 
{ 
    int sum = 0; 

    for(int i=1;i<num;i++) 
    { 
     if (num % i == 0) 
     { 
      sum+=i; 
     } 
    } 
    return sum==num; 
} 
} 
相關問題