2016-11-05 57 views
0

Hellooo我試圖顯示用戶輸入的1到和整數及其因子之間的所有完美數字。我得到的代碼工作正常,這只是我的輸出不完全匹配我想要的輸出...使用java編程的完美數字

這裏是我的代碼:

import java.util.Scanner;  

public class PerfectNumbers {  
    public static boolean isPerfect(int a) {    
     int n = a; 
     int sum = 0; 
     boolean perfect; 

     while (n-- >1) {     
      if(a%n==0) 
       sum = sum + n; 
      } 
      if (sum == a) { 
       perfect = true; 
      } else { 
       perfect = false; 
      } 
      return perfect; 
     } 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
     int i = input.nextInt(); 
     String factors = "";   
     System.out.printf("Looking for perfect numbers from 1 to %d%n", i); 

     while (i > 0) { 
      if (PerfectNumbers.isPerfect(i) == true) { 
       int w = i-1; 
       while (w-- > 1) { 
        if(i % w == 0) 
         factors = factors + " " + Integer.toString(w); 
       } 
       System.out.println(i + " is a perfect number it's factors are:" + factors); 
      } 
      i = i - 1; 
     } 
    } 
} 

這是我的輸出返回 This is what my output returns

但我希望它顯示這個代替

But I want it to display this instead

+0

您必須在每個完美數字後重置'因數'爲空字符串 – Steve

+0

我將如何「重置」因數?這是否意味着將它等同於一個空字符串?我是初學者,所以我還不確定 – cossii

+0

而不是'while(i> 0)',添加'int j = 1;'並將條件改爲'while(j <= i)'。還要把'i = i - 1;'改成'j = j + 1;'。這將解決排序問題。 – Gendarme

回答

-2

您環路以相反的順序,說FR om 1000爲零。更改

while (i>0) 

隨着

for (int j=1;j<i+1;j++) 

同樣的事情在因素

編輯

解決方案建議的循環,只有變化是在方法主要

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 

    System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
    int inp = input.nextInt(); 


    System.out.printf("Looking for perfect numbers from 1 to %d%n", inp); 

    for(int j=1;j<inp+1;j++) { 

     if (PerfectNumbers.isPerfect(j) == true) { 


     String factors = ""; 
     for (int w=1; w<j;w++) { 

     if(j % w == 0) 
      factors = factors + " " + Integer.toString(w); 

     } 
     System.out.println(j + " is a perfect number it's factors are:" + factors); 
    } 

    } 
} 
+0

'while和'For'不是Java中的關鍵字。問題在於程序顯示*錯誤*輸出(248不是因子6),而不是輸出順序錯誤。 – Gendarme

+0

雖然和在java中不是關鍵字?你在說什麼?????? – Massimo

+0

其實問題是程序顯示錯誤的輸出和錯誤的順序:/ haha​​ – cossii

-1

它應該b e是這樣寫的嗎?

import java.util.Scanner; 

public class PerfectNumbers { 

    public static boolean isPerfect(int a) { 

     int n = a; 
     int sum = 0; 
     boolean perfect; 

     while (n-- > 1) { 

      if (a % n == 0) 
       sum = sum + n; 

     } 
     if (sum == a) { 

      perfect = true; 

     } else { 

      perfect = false; 

     } 

     return perfect; 

    } 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
     int i = input.nextInt(); 
     String factors = ""; 

     System.out.printf("Looking for perfect numbers from 1 to %d%n", i); 

     for (int j = 1; j < i + 1; j++) { 

      if (PerfectNumbers.isPerfect(i) == true) { 

       int w = i - 1; 

       for (j = 1; j < i + 1; j++) { 

        if (i % w == 0) 
         factors = factors + " " + Integer.toString(w); 

       } 
       System.out.println(i + " is a perfect number it's factors are:" + factors); 
      } 
      i = i - 1; 
     } 
    } 
} 
-1

此代碼正常工作。它給作爲輸出如你預期.. 公共類PerfectNumbers {

public static boolean isPerfect(int a) { 

    int n = a; 
    int sum = 0; 
    boolean perfect; 

    while (n-- >1) { 

     if(a%n==0) 
      sum = sum + n; 

    } 
    if (sum == a) 
    { 

     perfect = true; 

    } 
    else 
    { 

     perfect = false; 

    } 

     return perfect; 

    } 

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

    Scanner input = new Scanner(System.in); 

    System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
    int i = input.nextInt(); 


    System.out.println("Looking for perfect numbers from 1 to "+i); 
    int inc = 1; 
    while (inc < i) { 

     if (PerfectNumbers.isPerfect(inc) == true) { 
      String factors = ""; 
      int w = inc-1; 
      int j = 1; 
      while (j < w) { 

       if(inc % j == 0) 
        factors = factors + " " + Integer.toString(j); 

       j++; 
      } 
      System.out.println(inc + " is a perfect number it's factors are:" + factors); 

     } 
     inc = inc + 1; 
    } 
    input.close(); 
} 

}

+1

爲了避免內存泄漏,一旦完成,請關閉資源。 –

+0

爲什麼它沒有用 –

+0

Aaah我看到我出錯了!非常感謝你:) – cossii

0

做一個想在你的代碼 在factors = "";在while循環

這裏是工作的代碼

添加此
public class PerfectNumbers { 

    public static boolean isPerfect(int a) { 
     int n = a; 
     int sum = 0; 
     boolean perfect = false; 

     while (n-- >1) { 
      if(a%n==0) { 
       sum = sum + n; 
      } 
      if (sum == a) { 
       perfect = true; 
      } else { 
       perfect = false; 
      } 
     } 
     return perfect; 
    } 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
     int i = input.nextInt(); 
     String factors = ""; 
     System.out.printf("Looking for perfect numbers from 1 to %d%n", i); 
     while (i > 0) { 
      if (PerfectNumbers.isPerfect(i) == true) { 
       int w = i-1; 
       while (w-- > 1) { 
        if(i % w == 0) 
        factors = factors + " " + Integer.toString(w);     
       } 
       System.out.println(i + " is a perfect number it's factors are:" + factors); 
       factors = ""; 
      } 
      i = i - 1; 
     } 
    } 
} 
0

作爲一個感興趣的問題,這裏是基於Java 8流的解決方案:

public class PerfectNumbers { 
    public static void main(String[] args) { 
     IntStream.range(1, 500) 
       .filter(n -> factors(n).sum() == n) 
       .forEach(n -> System.out.println(n + " is a prefect numbers its factors are " 
        + factors(n).mapToObj(Integer::toString).collect(Collectors.joining(" ")))); 
    } 

    private static IntStream factors(int n) { 
     return IntStream.range(1, n).filter(d -> n % d == 0); 
    } 
}