2016-11-05 1 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

各完全な数字の後に空文字列に 'factors'をリセットする必要があります。 – Steve

+0

どうすれば係数をリセットできますか?これは空の文字列と同じ意味ですか?私は初心者ですので、まだわかりません – cossii

+0

'while(i> 0)'の代わりに 'int j = 1;'を追加し、 'while(j <= i)'に条件を変更します。また、 'i = i - 1;'を 'j = j + 1;'に変更します。これで注文が修正されます。 – Gendarme

答えて

-2

あなたのループを表示したい、FRを言います1000から0まで。要因

EDIT

ソリューション提案のループのためにあなたの

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

whileとforはjavaのキーワードではありませんか?何を言っている?????? – Massimo

+0

実際に問題は、プログラムが間違った出力と間違った順序を表示しているということです。/hha – 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

このコードは正常に動作します。それは{

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

1ループここ

コード

を働いている間に は factors = "";でこれを追加するには、コードに思います..あなたが期待通りに出力として パブリッククラスPerfectNumbersを与えます
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); 
    } 
} 
関連する問題