我的作业要求通过嵌套的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)。
答案 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)
这是为了什么?