Java 快乐数字检查器工作不正常 int Cnt(){ 返回计数(10); } 整数计数(整数初始化){ int u=init%10; int t=(初始%100)-u; int u2=u*u; int t2=t*t; int m=u2+t2; 如果(m

Java 快乐数字检查器工作不正常 int Cnt(){ 返回计数(10); } 整数计数(整数初始化){ int u=init%10; int t=(初始%100)-u; int u2=u*u; int t2=t*t; int m=u2+t2; 如果(m,java,if-statement,Java,If Statement,既然这是家庭作业,我就不填答案了……但这是线索 您没有很好地处理3位数字。 t=init%100-u计算到10%100-0=10 一旦m=u2+t2即m=0+100达到100且您的程序无法处理3位数字,希望这有帮助 添加以下内容 int Cnt(){ return Count (10); } int Count (int init){ int u = init % 10; int t = (init % 100) - u; int u2 = u * u;

既然这是家庭作业,我就不填答案了……但这是线索

您没有很好地处理3位数字。

t=init%100-u
计算到
10%100-0=10

一旦
m=u2+t2
m=0+100
达到
100
且您的程序无法处理3位数字,希望这有帮助

添加以下内容

int Cnt(){
    return Count (10);
}

int Count (int init){
    int u = init % 10;
    int t = (init % 100) - u;
    int u2 = u * u;
    int t2 = t * t;
    int m = u2 + t2;
    if(m <= 1)
        System.out.println("Happy!");
    else {
        return Count (m);
    }

根据您链接的Wiki文章,您必须重复将每个数字中的数字相加的过程。例如7:

int h = init/100;
int h2 = h * h;
int m = u2+t2+h2;
我发现您的代码有一些问题。首先,您没有将十位数除以10,这意味着对于数字52,您将得到u=2,t=50,而不是5。我相信您可以轻松解决这部分问题


第二,如果你的数字不满意,你似乎永远不会得出结论。例如,数字4,你将达到16、37、72、53、34、25、29、85、89、145、42、20、4。但是你的程序,因为你无法检查你是否已进入循环,将一直运行,直到你的内存用完为止。

尝试使用中概述的方法您引用了:

7^2 = 49
49  = 4^2 + 9^2 = 16 + 81 = 97
97  = 9^2 + 7^2 = 81 + 49 = 130
130 = 1^2 + 3^2 = 10
10  = 1^2 = 1
private静态布尔值isHappy(整数)
{
列表集=新的ArrayList();
while(number>1&&!set.contains(number))
{
设置。添加(编号);
数字=数字(数字);
}
返回数==1;
}
专用静态整数位数(整数编号)
{
字符串numberString=Integer.toString(数字);
int结果=0;
for(字符:numberString.toCharArray())
{
整数位数=字符。数字(字符,10);
结果+=位数*位数;
}
返回结果;
}
通过计算所有10位数字(0-9)的平方并将结果存储在整数数组中,可以更有效地实现这一点。

import java.io.*;
private static boolean isHappy(int number)
{
   List<Integer> set = new ArrayList<Integer>();

   while (number > 1 && !set.contains(number))
   {
       set.add(number);

       number = sumSquaresOfDigits(number);
   }

   return number == 1;
}

private static int sumSquaresOfDigits(int number)
{
    String numberString = Integer.toString(number);

    int result = 0;

    for (char character : numberString.toCharArray())
    {
        int digit = Character.digit(character, 10);

        result += digit * digit;
    }

    return result;
}
班上快乐 { 虚空快乐(双n) { int c=0; 双s=0; 双d,p,i,_-sa;
对于(i=1;我可以为您编译代码吗?您必须将return语句放在
if
if else
子句之后如果您必须检查像78这样的数字会发生什么?顺序中的下一个数字是49+64=113。当您检查113时,您的代码做什么?在这种情况下,
t
u
的值是什么?(最好使用
tens
units
作为变量名;尽早养成良好习惯。)如果数字不满意,可能重复的用法是无限循环?当你说这些都没有发生时,你会编辑你的问题来说明到底发生了什么吗?
import java.io.*;
class happy_no
{
    void happy(double n)
    {
        int c=0;
        double s=0;
        double d,p,i,_sa;
        for(i=1;i<=n;i++)
        {
            while(n!=0)
            {
                d=n%10;
                p=d*d;
                s=s+p;
                n=n/10;
            }
            if(s==1)
            {
                System.out.println("HAPPY NO.");
                break;
            }
            else
            {
                n=s;
            }
        }
    }
    public static void main()throws IOException
    {
        InputStreamReader read=new InputStreamReader(System.in);
        BufferedReader in=new BufferedReader(read);
        double a;
        System.out.println("ENTER A NO.");
        a=Double.parseDouble(in.readLine());
        happy_no obj=new happy_no();
        obj.happy(a);
    }