0

我写了一个程序来获得一个数字的交叉和:

因此,例如,当我输入 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);
    }
}
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

你应该做这样的事情

input  =  56789;

int sum = 0;

int remainder = input % 10  // = 9;
sum += remainder  // now sum is sum + remainder
input /= 10;  // this makes the input 5678

...
// repeat the process

要循环它,请使用while循环而不是for循环。这是何时使用while循环的一个很好的例子。如果这是针对一个类,它将显示您对何时使用while循环的理解:当迭代次数未知但基于条件时。

int sum = 0;
while (input/10 != 0) {
    int remainder = input % 10;
    sum += remainder;
    input /= 10;
}
// this is all you really need
于 2013-10-22T14:25:20.037 回答
1

您提供的代码的问题是您嵌套了内部循环。相反,您应该在开始下一个循环之前完成对每个循环的迭代。

目前 68768 发生的情况是,当外部 for 循环达到 i=6 时,ten_thousand 项设置为 6,内部循环继续计算“千”和“百”项 - 并将它们设置为您期望(并让 zahl 等于 768 - 请注意,您不会在数百个阶段减少 zahl)

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

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

补救措施是不要嵌套内部循环——它的性能也会好很多!

于 2013-10-22T14:54:01.597 回答
0

你的样本有点复杂。要提取万、千和数百,您可以简单地执行以下操作:

private void testFunction(int zahl) {
    int tenThousand = (zahl / 10000) % 10;
    int thousand = (zahl / 1000) % 10;
    int hundred = (zahl / 100) % 10;
    System.out.println(tenThousand + "+" + thousand + "+" + hundred);
}

正如许多开发人员报告的那样,您应该将其转换为字符串并逐个字符处理。

于 2013-10-22T14:35:10.890 回答