gpt4 book ai didi

java - 检查一个数字是否是快乐数字 Java

转载 作者:行者123 更新时间:2023-12-01 17:16:38 28 4
gpt4 key购买 nike

我目前正在一个网站上进行一项挑战,检查一个数字是否为 Happy Number或不。该程序将读入一个包含数字列表的文件,每行一个数字,并确定它是否是一个快乐的数字。我在执行检查以查看号码是否满意时遇到了一些麻烦。

快乐的部分相当简单,如果它达到 1,那就是一个快乐的数字。如果数字不高兴,我就会遇到问题,它永远不会达到 1,并且会处于无限循环中,所以我不确定如何成功跟踪该数字

这是代码:

package com.jconnolly.codeeval;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class HappyNumbers {

public static void main(String[] args) {

HappyNumbers hn = new HappyNumbers();
File file = new File(args[0]);
BufferedReader br;
String[] numbers;
try {
// Read in file
br = new BufferedReader(new FileReader(file));
String line;
// Store each line as a string in an array
while((line = br.readLine()) != null) {
numbers = line.split("\n");
for(int i = 0; i < numbers.length; i++) {
if(hn.isHappy(numbers[i])) {
System.out.println(1);
} else {
System.out.println(0);
}
}
}
System.exit(0);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(-1);
}
}

// Separates digits, squares them and adds them together
public boolean isHappy(String str) {

int sum = 0;
// Holds numbers after they are squared and added together
ArrayList<Integer> happy = new ArrayList<Integer>();
// Separates the digits to be squared
while((sum != 1) && !happy.contains(sum)) {

for(int i = 0; i < str.length(); i++) {
Character c = new Character(str.charAt(i));
String character = c.toString();
int digit = Integer.parseInt(character);
sum += (digit * digit);
}
happy.add(sum);
}
happy.clear();
return sum == 1;
}

任何有关更好实现或纠正的建议将不胜感激。它确实给出了结果,但它们是不正确的。谢谢

最佳答案

我能想到的测试“永远不会达到 1”的唯一方法是识别何时重新测试已经测试过的值,这将表明您陷入了一个循环,其中的所有数字循环不高兴。从那里建立一个字典,并用它来更快地识别其他不愉快的数字。我相信这个公式实际上是实用的;对于某些人来说,可能并非如此。

关于java - 检查一个数字是否是快乐数字 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21638116/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com