我编写了一个程序来获取数字的和:

因此,例如,当我输入3457时,它应该输出3 + 4 + 5 +7。但是以某种方式,我的逻辑无法正常工作。例如,当我输入68768时,我得到6 + 0 +7。但是当我输入97999时,我得到正确的输出9 + 7 +9。我知道我可以用不同的方法轻松地完成此任务,但是我尝试使用循环。这是我的代码:谢谢大家

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);
    }
}

最佳答案

您提供的代码存在的问题是您嵌套了内部循环。相反,您应该先遍历每个循环,然后再开始下一个循环。

68768当前发生的情况是,当外部for循环变为i = 6时,ten_thousand项设置为6,而内部循环进行“ thousand”和“数百”项的计算-并将其设置为您期望的值(并且让zahl等于768-请注意,您不会在数百个阶段降低zahl)

但是随后,外循环继续循环,这次是i = 7。如果zahl = 768,则zahl / 1000 = 0',因此“千”项设置为0。在zahl = 768时,百项始终重置为7。

97999之所以有效,是因为在“ i”循环的最终迭代中设置了千项,因此永远不会重置。

补救措施是不要嵌套内部循环-而且它的性能也会更好!

10-04 13:19