【问题标题】:Using java to find Happy Numbers: Nested while loop loops indefinitely使用java查找Happy Numbers:嵌套while循环无限循环
【发布时间】:2014-10-17 14:11:38
【问题描述】:

我的作业要求通过嵌套的 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

另外:我不允许在此分配中使用 for 循环或 do-while 循环。我只需要使用嵌套的while循环

快乐数:从任何正整数开始,用数字的平方和替换该数字,并重复该过程直到该数字等于 1(它将保持不变),或者它在不包含 1 的循环中无限循环(循环多长时间:500)。

【问题讨论】:

  • 我建议您快速描述“快乐数字”的定义,因为至少我不会在显然没有产生正确输出的基础上对其进行逆向工程;)
  • 我还建议您更清晰地格式化您的代码,并添加诊断。如果您的最内层循环曾经终止,您将退出应用程序 - 所以外层循环真的无关紧要。
  • 如果 sum 永远不会为 1 怎么办?我认为是这样..
  • 制作一个简短但完整的程序来演示问题也会有所帮助......我们不知道number的价值。
  • 天哪,他们应该真正专注于学校的编程,而不是把它变成一个他妈的数学问题(不幸的是我出局了)。

标签: java while-loop nested-loops


【解决方案1】:

快速浏览您的代码后:

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

这个while测试很可能永远为真 -> 无限循环 -> 堆栈溢出

【讨论】:

    【解决方案2】:

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

    其次,要考虑的事情:

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

    这些 (digitxsum) 将始终为正数。

        sum = digit1sum + digit2sum + digit3sum;
    

    因此总和总是正数

        happyNumber = sum;
    

    happynumber 永远是积极的

        while (happyNumber > 0) 
    

    这是干什么用的?

    【讨论】:

    • 我不确定,这是我的教授在代码中想要的东西。这似乎是多余的,我同意。
    • 你告诉在哪里使用什么?您可以更改哪些部分?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多