使用java查找Happy Numbers:嵌套while循环无限循环

时间:2014-10-17 14:11:38

标签: 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 (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);
}    

我设置i&lt; 500所以当i ++达到500时,循环应该停止。我几乎尝试将i ++放在代码的每个部分都可能,它永远不会奏效。我在这做错了什么?

另外:我不允许在此作业中使用for循环或do-while循环。我只能使用嵌套的while循环

快乐号码:从任何正整数开始,将数字替换为其数字的平方和,然后重复此过程直到数字等于1(它将保留的位置),或者在一个不包含1的循环中无休止地循环(循环将持续多长时间:500)。

2 个答案:

答案 0 :(得分:2)

快速浏览一下代码后:

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

此测试可能始终为真 - &gt;无限循环 - &gt;堆栈溢出

答案 1 :(得分:0)

如果一个数字无休止地循环,你永远不会离开你最里面的while循环(它绝不会被500限制所阻止,你的逻辑在这里是错误的。)

其次,需要考虑的事情:

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

这些(digitxsum)将始终为正。

    sum = digit1sum + digit2sum + digit3sum;
因此,总和将始终为正

    happyNumber = sum;

happynumber总是积极的

    while (happyNumber > 0) 

这是为了什么?