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

标签 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

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

最佳答案

快乐数字根据wikipedia是:

快乐数字是通过以下过程定义的数字:

从任何正整数开始,用其数字的平方和替换该数字,然后重复该过程,直到该数字等于 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");
    }
}

关于检查数字是否满意的 Java 程序会产生不可能的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31758620/

相关文章:

java - ReSTLet 将 JSON 转换为 LinkedHashMap 而不是 List<MyObject>?

java - 升级apachestorm(1.0.0到1.2.3)

javascript - 将零移动到数组的末尾并保留非零元素而不改变顺序

甲骨文11g : Can I create a number column that stores only 1 byte?

python - 使用幂函数计算效率图大小

java - 在同一个类中声明一个类的对象时,内存无限

C# 数字格式处理数字分组

c++ - 从 bash 运行程序时的非法指令

c - 程序崩溃并返回代码 255

java - Android:从库运行用户指定的代码