0

問題が発生しました。ユーザーが入力した最大数を取り、0になるまで整数を追加するクラスを作成しようとしていますが、実行すると、クラッシュするまで数値がどんどん大きくなります。これを無限ループに陥れているように見えるのは何ですか?

public class Summation {

    public static void main(String[] args) {
        EasyReader console = new EasyReader();
        System.out.print("Debug? (Y/N): ");
        char debug = console.readChar();    
        if ((debug!='Y')&&(debug!='N')){
            System.out.println("Please enter Y or N");
            main(null); 
        }
        else{

            System.out.print("Enter max range:");
            int max = console.readInt();
            int s = sum(max,debug);     
            System.out.print(s);
        }
    }
    public static int sum(int m, char d){
        int sm = 1;
        boolean isRunning = true;
        while ((isRunning == true)&&(d=='Y')){
            if ((--m)==0) {
                isRunning = false;
                }
            else{
                sm = m+(--m);
                System.out.println("sm is"+sm);
                }
        while ((isRunning == true)&&(d=='N')){
            if ((--m)==0) {
                isRunning = false;
                }
            else{
                sm = m+(--m);
                }           
            }
        }return sm;
    }
}
4

3 に答える 3

0

あなたがしていることはすべて間違っています:)。

まず - フォーマット。あなたはそれを知らないかもしれませんが、2 番目の while は最初の while サイクルの INSIDE です。netbeans を使用している場合は、ALT+SHIFT+F です。

--m の使用はあなたの例には適していません。最初に「m」の値を減らしてから比較するためです。だからあなたが尋ねるときでさえ

(--m)==0

値を減らします。そして、あなたはそれを再び使用しているので

sm = m+(--m)

「0」の値をスキップして負の数にすることもできます。

ただし、「whileループで指定された数値から0に逆の順序で数値を追加する」だけが必要な場合は、フィボナッチではなく、このコードを使用できます(より適切に実行できますが、これはコードを使用しています):

public class Summation {

    public static void main(String[] args) {
        System.out.println(sum(10, 'Y'));
    }

    public static int sum(int m, char d) {
        int sm = 0;
        boolean isRunning = true;
        while ((isRunning == true) && (d == 'Y')) {
            sm += m;
            if (m == 0) {
                isRunning = false;
            } else {
                m--;
                System.out.println("sm is" + sm);
            }
            while ((isRunning == true) && (d == 'N')) {
                if ((--m) == 0) {
                    isRunning = false;
                } else {
                    sm = m + (--m);
                }
            }
        }
        return sm;
    }
}

サイクルに到達できなかった秒に注意してください-「d == Y」の場合にのみ通過し、「d == N」の場合にのみ開始します

于 2013-10-09T20:07:24.733 に答える