使用java查找快乐数字:嵌套while循环无限期循环

使用java查找快乐数字:嵌套while循环无限期循环,java,while-loop,nested-loops,Java,While Loop,Nested Loops,我的作业要求通过嵌套的while循环输入命令行,以确定某个数字是否为快乐数字。到目前为止,我有: int i = 0; int sum = 0; int dig2, dig1, dig3, dig4, dig1next, dig2next, dig3next; int digit1sum, digit2sum, digit3sum; happyNumber = number; while (i < 500){ while (happyNumber > 0){

我的作业要求通过嵌套的while循环输入命令行,以确定某个数字是否为快乐数字。到目前为止,我有:

int i = 0;
int sum = 0;

int dig2, dig1, dig3, dig4, dig1next, dig2next, dig3next;
int digit1sum, digit2sum, digit3sum;

happyNumber = number;  

while (i < 500){   
    while (happyNumber > 0){       
        while (sum!=1){ 
            dig3 = happyNumber / 100; 
            dig2 = happyNumber % 10; 
            dig1 = happyNumber / 10; 

            dig2next = dig2 % 10;
            dig1next = dig1 % 10;
            dig3next = dig3 % 10;

            digit1sum = dig1next * dig1next; 
            digit2sum = dig2next * dig2next; 
            digit3sum = dig3next * dig3next;

            sum = digit1sum + digit2sum + digit3sum;
            happyNumber = sum;         
        }
        System.out.println("It is a happy number.");
        System.exit(0);
    }
    i++;
    System.out.println(i);
    System.exit(0);
}    
inti=0;
整数和=0;
int dig2,dig1,dig3,dig4,dig1next,dig2next,dig3next;
int digit1sum、digit2sum、digit3sum;
happyNumber=数字;
而(i<500){
而(happyNumber>0){
而(sum!=1){
dig3=快乐数/100;
dig2=快乐数字%10;
dig1=快乐数字/10;
dig2next=dig2%10;
dig1next=dig1%10;
dig3next=dig3%10;
digit1sum=dig1next*dig1next;
digit2sum=dig2next*dig2next;
digit3sum=dig3next*dig3next;
sum=digit1sum+digit2sum+digit3sum;
happyNumber=总和;
}
System.out.println(“这是一个快乐的数字”);
系统出口(0);
}
i++;
系统输出打印LN(i);
系统出口(0);
}    

在快速浏览您的代码后,我设置了I:

while (sum!=1)
....
sum = digit1sum + digit2sum + digit3sum;
    happyNumber = sum; 

这个while测试可能总是正确的->无限循环->堆栈溢出

如果有一个数无休止地循环,你将永远无法摆脱最里面的while循环(它决不会被500限制停止,你的逻辑在这里是错误的)

第二,要考虑的是:

    digit1sum = dig1next*dig1next; 
    digit2sum = dig2next*dig2next; 
    digit3sum = dig3next*dig3next;
这些(digitxsum)总是积极的

    sum = digit1sum + digit2sum + digit3sum;
因此,总和总是正的

    happyNumber = sum;
    while (happyNumber > 0) 
快乐数字永远是积极的

    happyNumber = sum;
    while (happyNumber > 0) 

这是干什么用的?

我建议您快速描述一下“快乐数字”的定义,因为至少我不会在一个显然无法产生正确输出的基础上对其进行反向工程;)我还建议您更干净地格式化代码,并添加诊断。如果最里面的循环终止了,你就退出了应用程序——因此,外部循环真的不重要。如果sum永远不会得到1呢?我想是这样的。把它做成一个简短但完整的程序来演示这个问题也会有帮助。。。我们不知道数字的价值。天哪,他们应该真正把重点放在学校的编程上,而不是把它变成一道模糊的数学题(很不幸,我也不知道)。我不确定,这是我的教授想要的代码。我同意,这似乎是多余的。你到底告诉在哪里使用?你可以改变哪些部分?