用于检查数字是否满意的Java程序会产生不可能的输出

时间:2015-08-01 05:33:14

标签: java numbers runtime-error

我设计了一个程序来输入一个数字并检查它是否满意。

import java.util.*;

public class isHappy
{
public static void main(String[] args)
{
    Scanner sc = new Scanner(System.in);

    System.out.println("Enter number: ");
    int n = sc.nextInt();

    int l = String.valueOf(n).length();
    int temp=n;

    int midVar=0, addVar=0, i=0;

    while (temp!=4)
    {
        midVar=0;

        for (i=l; i>0; i--)
        {
            addVar = temp/Math.pow(10, i);
            midVar+=Math.sqrt(addVar);
        }

        temp = midVar;

        if (temp==1)
          break;
    }

    if (temp==1)
    {
        System.out.println("Happy number");
    }
    else
    {
        System.out.println("Unhappy number");
    }
}
}

我承认我使用的代码并不完全干净,但应该可以使用。它当然不应该产生输出2.是的,就是这样:用户输入数字后,程序只在下一行显示2。让我引导您完成执行过程。

Enter number:                                       //program output
68                                                  //user input
2                                                   //program output

我必须补充一点,我确实在编译期间遇到了“可能的精度损失”错误,但我不相信它实际上可能是莫名其妙的输出中的一个因素。另外,我提出这个问题的主要目的不是为了获得如何修复我的代码的答案,而是解释为什么我得到上述奇怪的输出。

1 个答案:

答案 0 :(得分:0)

根据wikipedia的快乐号码是:

happy number是由以下过程定义的数字:

从任何正整数开始,将数字替换为其数字的平方和,并重复该过程,直到该数字等于1(它将保持不变),或者它在一个不包括的循环中无休止地循环1.

这个过程以1结尾的数字是幸福的数字,而那些不以1结尾的数字是不愉快的数字(或悲伤的数字)。

示例:

例如,19很高兴,因为相关的序列是:

1 ^ 2 + 9 ^ 2 = 82

8 ^ 2 + 2 ^ 2 = 68

6 ^ 2 + 8 ^ 2 = 100

1 ^ 2 + 0 ^ 2 + 0 ^ 2 = 1。

代码:获得快乐号码的一些修改。

 public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    System.out.println("Enter number: ");
    int n = sc.nextInt();

    int l = String.valueOf(n).length();
    int temp = n;

    int midVar = 0, addVar = 0, i = 0;

    while (temp != 4) {
        midVar = 0;

        while (temp != 0) {
            addVar = temp % 10;
            temp = temp / 10;
            midVar += Math.pow(addVar, 2);
        }
        temp = midVar;
        System.out.println(midVar);


        if (temp == 1) {
            break;
        }
    }

    if (temp == 1) {
        System.out.println("Happy number");
    } else {
        System.out.println("Unhappy number");
    }
}