2016-11-21 5 views
1

こんにちは、これは私の初めての質問です。私はガイドラインを読んで答えを探しましたが見つからなかったので、私の質問はガイドライン内にあることを願っています。とにかく私は最初のN個の完全な数字を出力しなければならない簡単なJavaの練習に立ち往生しています(数論では、完全な数はその適切な正の約数の和に等しい正の整数です。 (また、その一定量の合計として知られている)の数自体を除く正の約数が。)だから私はやったこのPefect Number Java

import java.util.Scanner; 

public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 

    int cont = 0; 
    int num = 1; 
    int soma = 0; 
    System.out.println("Quantos números perfeitos?"); 
    int n = in.nextInt(); 

    while (cont < n) { 
     for (int i = 1; i <= num/2; i++) { 
      if (num % i == 0) { 
       soma = soma + i; 
      } 
     } 

     if (num == soma) { 
      System.out.println(num + " é perfeito."); 
      cont++; 
     } 
     num++; 

    } 
} 

それは無限ループで立ち往生し、私はその理由を把握することはできません。とにかく誰かが私を助けることができれば私は本当にそれを感謝し、私の質問に答えるか、それは単なる愚かな質問だと申し訳ありませんが、私が言ったように、私が最初に尋ねることです。ありがとうございました。

+1

はStackOverflowのへようこそ。統合開発環境をお持ちの場合は、特にsoma = soma + iとif(num == soma)のようないくつかの行にブレークポイントを設定することをお勧めします。 (もしあなたがIDEを持っていなければ、System.out.printlnにいくつかの重要な変数を書いてください。) – rajah9

+0

おそらく、 'cont ++'は完璧な数だけインクリメントされるからです。最初の完璧でない数字がループに詰まってしまいます。 whileループ条件は 'while(num AntonH

+0

これは答えではなく一般的なアドバイスですが、これは明らかに明らかですが、forループが 'soma == num'という数字を生成することはないようです。したがって、 'cont ++'は決して実行されないので、 'cont SpencerD

答えて

6

コードはうまく見えます。忘れているのは、whileループで毎回somaの値をリセットすることだけです。あなたの現在のコードでは、somaは、のすべてのの適切なファクタの合計です。これはあなたが望む通りではありません。ここで

はあなたが必要となるコードです:

Scanner in = new Scanner(System.in); 

int cont = 0; 
int num = 1; 
int soma; 
System.out.println("Quantos números perfeitos?"); 
int n = in.nextInt(); 

while (cont < n) { 
    soma = 0; //Don't forget this line 

    for (int i = 1; i <= num/2; i++) { 
     if (num % i == 0) { 
      soma = soma + i; 
     } 
    } 

    if (num == soma) { 
     System.out.println(num + " é perfeito."); 
     cont++; 
    } 

    num++; 
} 
+2

なぜこれがダウン投票されたのだろうかと思います。それは正解です。 – Andreas

+0

無限ループを修正するために実際に実行しましたか?私はあなたが他のバグがあると思います(num!= somaの場合はどうなりますか) – John3136

+2

はい、私はそれをテストしたところ、うまくいくようです。 n = 3のための出力: '6e perfeito。 28 perfeito。 496éperfeito. – 416E64726577