将数字拆分为多个数字

时间:2013-10-22 14:19:19

标签: java

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

所以当我输入3457例如它应输出3 + 4 + 5 + 7.但不知怎的,我的logik不会工作。当我输入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 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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

答案 2 :(得分:1)

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

目前68768发生的事情是当外部for循环到达i = 6时,ten_thousand项被设置为6并且内部循环继续计算'千'和'百'项 - 并且设置那些你想要的(并留下zahl等于768 - 注意你不会在数百个阶段减少zahl)

但是外循环继续循环,这次是i = 7。使用zahl = 768,zahl / 1000 = 0',因此'千'项被设置为0.百分词总是被重置为7,其中zahl = 768。

97999有效,因为在'i'循环的最后一次迭代中设置了千位,所以永远不会重置。

补救措施是不嵌套内循环 - 它也会表现得更好!

答案 3 :(得分: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);
}

有多少开发人员报告你应该将它转换为字符串并按字符处理。