2

1 から 100 までの完全な整数を表示するプログラムを作成するという課題がありました。実際の課題は次のとおりです。

100 までのすべての完全整数を表示する PerfectIntegers アプリケーションを作成します。完全整数とは、それ自体を除くすべての要素の合計に等しい数です。たとえば、1 + 2 + 3 = 6 であるため、6 は完全数です。アプリケーションにはブール値メソッド isPerfect() を含める必要があります。

私はこれを試してみました:

import java.util.ArrayList;
public class PerfectIntegers {
public static boolean isPerfect(int a){
    ArrayList<Integer> factors = new ArrayList<Integer>();
    int sum=0;
    boolean is;
    for (int i=1; i<=100; i++){
        double r=a/i;
        if (r%1==0){
            factors.add(i);
        }
    }for (int i=0;i<factors.size();i++){
        sum+=factors.get(i);
    }if (sum==a){
        is=true;
    }else{
        is=false;
    }return is;
}
public static void getInts(){
    for (int i=2; i<=100; i++){
        boolean is=isPerfect(i);
        if (is!=false){
            System.out.print(i+" ");
        }
    }
}
public static void main(String[] args) {
    getInts();
}

}

Eclipse はエラーを表示しませんでしたが、実行しようとするとプログラムが終了し、何も表示されません。

double r100% の確率で適切に分割されていないため、問題は で発生する可能性があります。

4

2 に答える 2

4

因数分解コードが間違っています。次のように修正できます。

for (int i = 1 ; i < a; i++) {
    if (a % i == 0) {
        factors.add(i);
    }
}

古いコードが機能しなかった理由の 1 つは、%オペレーターの動作を誤解していたことです。左辺を右辺で除算した剰余を計算します。これr % 1 == 0true、すべての数を1除算するためです。r % 2 == 0偶数などを検出する方法です。

もう 1 つの理由は、約数を求めて 100 まで行ったことです。これには、がすでにリストにあるaため、自動的に合計が数字の上に表示される が含まれます。1

これが機能するようになったら、因子のリストを削除してコードを簡素化できます。必要なのはすべての因数の合計だけなので、因数分解ループでそれを計算し、それに続くループを削除することもできます。

sum = 0;
for (int i = 1 ; i < a; i++) {
    if (a % i == 0) {
        sum += i;
    }
}
于 2014-02-06T22:54:54.407 に答える
0

dasblinkenlightはすでに正しい答えを提供しています。getInts()これは (潜在的に等級付けされた) 割り当てのように見えるので、メソッドのリファクタリングも検討する可能性があることを付け加えさせてください。

boolean is=isPerfect(i);
if (is!=false){
    System.out.print(i+" ");
}

実際に等しい

if (isPerfect(i)){
    System.out.print(i+" ");
}

isPerfect() は、if ステートメントの条件内で使用できるブール値を既に返しているためです。最初のバリエーションのように、最初に戻り値を変数に格納する方が読みやすいかもしれないと主張することができます (この具体的なケースには強く同意しませんが)。しかし、それでもチェックする必要はありません

if (is!=false) { //...

しかし、使用する必要があります

if (is) { // ...

代わりは。

于 2014-02-06T23:09:52.860 に答える