Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不转换为字符串的情况下完成/修复加法持久性算法?_Java_String_Algorithm_Math_While Loop - Fatal编程技术网

Java 如何在不转换为字符串的情况下完成/修复加法持久性算法?

Java 如何在不转换为字符串的情况下完成/修复加法持久性算法?,java,string,algorithm,math,while-loop,Java,String,Algorithm,Math,While Loop,正在尝试编写加法持久性算法。 AP是指当你有一个号码,你不断地添加它的数字,直到你剩下一个单数。例如,9991=9+9+9+1=28,2+8=10,1+0=1。因此,9991的加性持久性为3。加了3次才把这个数字减为一位数 我已经对问题进行了编码,但它不断增加计数器。看起来对我来说是正确的,但不能让它工作lol Scanner reader = new Scanner(System.in); int ui; int b; int sum = 0; int

正在尝试编写加法持久性算法。 AP是指当你有一个号码,你不断地添加它的数字,直到你剩下一个单数。例如,9991=9+9+9+1=28,2+8=10,1+0=1。因此,9991的加性持久性为3。加了3次才把这个数字减为一位数

我已经对问题进行了编码,但它不断增加计数器。看起来对我来说是正确的,但不能让它工作lol

    Scanner reader = new Scanner(System.in);
    int ui;
    int b;
    int sum = 0;
    int count = 0;

    System.out.print("Enter a number: ");
    ui = reader.nextInt();

    do {
        do {
            b = ui % 10;
            ui = ui / 10;
            sum += b;

        } while (ui != 0);

        ui = sum;
        count++;

        //System.out.print(b);
        //System.out.print(sum);
        //System.out.print(ui);

    } while (ui > 10);

    System.out.print(count+1);
}
您需要在每次运行时重置总和,否则您将为其分配ui,直到溢出为止,它将超过10。以下是正确的版本:

do {
    sum = 0;
    do {
        b = ui % 10;
        ui = ui / 10;
        sum += b;

    } while (ui > 9);
    sum += ui;

    ui = sum;
    count++;

} while (ui > 9);

System.out.print(count);

你是通过IDE中的调试器运行程序的吗?我真的不知道如何使用调试器。它显示我的IP有一些错误?但是谢谢你让我注意到调试器。我现在就学会用它了:我试过1654号,结果是3,而不是2。你能解释一下原因吗?这个程序似乎与我尝试过的各种其他数字一起工作。另外,它不适用于1*10^n和9993。对,您需要打印count,而不是count+1如果我这样做,那么9992就不起作用了。9992 > 9+9+9+2 = 29 > 2+9=11 > 1+1=2. 它需要3个步骤,但是程序输出2.Ach,我们忘记了另一件事:在内部循环之后的sum+=ui,你现在能试试吗?