В настоящее время я делаю вызов на веб-сайте, чтобы проверить, является ли число Happy Number или нет. Программа должна читать в файле со списком чисел, по одному на каждой строке и определять, является ли это счастливым числом. У меня возникли проблемы с реализацией проверки, чтобы убедиться, что номер счастлив или нет.Проверка, является ли число счастливым числом или нет Java
Счастливая часть довольно прямолинейная, если она добирается до 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;
}
Любые советы по лучшей реализации или исправлению будут очень благодарны. Это дает результаты, но они неверны. Спасибо
Этот вопрос не соответствует теме, потому что он принадлежит http://codereview.stackexchange.com/ –
Это можно сделать, используя рекурсию? – asaini007
@ asaini007 Обнаружение цикла больше 2 будет сложным с рекурсией. – Rainbolt