0

数値の交差合計を取得するプログラムを作成しました。

したがって、たとえば 3457 と入力すると、3 + 4 + 5 + 7 が出力されるはずです。たとえば、68768 を入力すると 6 + 0 + 7 が得られます。ループします。ここに私のコードがあります:そしてすべてに感謝します

import Prog1Tools.IOTools;

public class Aufgabe {
    public static void main(String[] args){
        System.out.print("Please type in a number: ");
        int zahl = IOTools.readInteger();

        int ten_thousand = 0;
        int thousand = 0;
        int hundret = 0;


        for(int i = 0; i < 10; i++){
            if((zahl / 10000) == i){
                ten_thousand = i;
                zahl = zahl - (ten_thousand * 10000);
            }

            for(int f = 0; f < 10; f++){
                if((zahl / 1000) == f){
                    thousand = f;
                    zahl = zahl - (thousand * 1000);
                }

                for(int z = 0; z < 10; z++){
                    if((zahl / 100) == z){
                        hundret = z;
                    }
                }


            }
        }
            System.out.println( ten_thousand + " + " + thousand + " + " + hundret);
    }
}
4

4 に答える 4

3

これは、あなたの望むことですか?

String s = Integer.toString(zahl);
for (int i = 0; i < s.length() - 1; i++) {
    System.out.println(s.charAt(i) + " + ");
}
System.out.println(s.charAt(s.length()-1);
于 2013-10-22T14:24:50.837 に答える
1

提示したコードの問題は、内側のループがネストされていることです。代わりに、次のループを開始する前に、各ループの繰り返しを終了する必要があります。

現時点で 68768 で何が起こっているかというと、外側の for ループが i=6 になり、10 の項が 6 に設定され、内側のループが「千」項と「百」項の計算に進み、それらを次のように設定します。あなたは期待しています (そして zahl を 768 のままにします - 数百の段階で zahl を減らさないことに注意してください)

しかし、今度は i=7 で外側のループがループし続けます。zahl=768 の場合、zahl/1000 = 0 であるため、「千」の項は 0 に設定されます。zahl=768 の場合、百の項は常に 7 にリセットされます。

97999 が機能するのは、'i' ループの最後の反復で 1000 項が設定されているため、リセットされることはありません。

解決策は、内側のループを入れ子にしないことです。これにより、パフォーマンスも大幅に向上します。

于 2013-10-22T14:54:01.597 に答える