java - 在给定(输入)范围内给出快乐数字的数量
问题描述
作为一个练习,我需要编写一个代码,在给定范围内给出快乐数字*的数量。作为一项测试,我需要将代码插入一个检查 10 种不同结果的程序中,对于每个好的结果,您将获得 4 分。我想要完整的 40 分,我的老师说我只需要在我的代码中更改一点点。到目前为止,我有这个:
*一个快乐的数字是一个数字,当替换为每个数字的平方和时最终达到1。例如,13 是一个快乐的数字,因为 1^2 + 3^2 = 10 和 1^2 + 0^2 = 1
重要的是要知道:当你最终得到一个 4 时,这绝对不是一个快乐的数字。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String st1 = scan.nextLine().trim();
String st2 = scan.nextLine().trim();
int min = Integer.parseInt(st1);
int max = Integer.parseInt(st2);
Set<Integer> happyNumbers = getHappyNumbers(min, max);
System.out.println(happyNumbers.size());
}
public static Set<Integer> getHappyNumbers(int min, int max) {
Set<Integer> out = new HashSet<>();
for (int i = min; i < max; i++) {
if (isHappy(i)) {
out.add(i);
}
}
return out;
}
private static boolean isHappy(int i) {
int sum = 0;
while (i != 0) {
sum += Math.pow((i % 10), 2);
i /= 10;
}
if (sum == 4) return false;
else if(sum == 1) return true;
else if (sum !=1) {return isHappy(sum);}
else return true;
}
}
我的老师还说错误在以下部分:
if (sum == 4) return false;
else if(sum == 1) return true;
else if (sum !=1) {return isHappy(sum);}
else return true;
请帮忙 :)
解决方案
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class HappyNumbersMain {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Lower limit (>0): ");
String st1 = scan.nextLine().trim();
System.out.print("Upper limit: ");
String st2 = scan.nextLine().trim();
int min = Integer.parseInt(st1);
int max = Integer.parseInt(st2);
Set<Integer> happyNumbers = getHappyNumbers(min, max);
System.out.println("Happy numbers between " + min + " and " + max + ":" + happyNumbers);
}
public static Set<Integer> getHappyNumbers(int min, int max) {
Set<Integer> out = new TreeSet<>();
for (int i = min; i <= max; i++) {
if (isHappy(i)) {
out.add(i);
}
}
return out;
}
private static boolean isHappy(int i) {
// Stopping conditions
if (i == 4) {
return false;
} else if (i == 1) {
return true;
}
int sum = 0;
while (i > 0) {
sum += Math.pow((i % 10), 2);
i /= 10;
}
return isHappy(sum);
}
}
以上按预期工作,一些注意事项:
- 在执行递归函数时,将停止条件作为它检查的第一件事
- 向用户添加一些反馈有助于理解如何使用您的程序
- TreeSet 会对值进行排序,HashSet 不会,更好地用于显示目的
- 您应该始终验证用户输入(我没有这样做,但您应该这样做)
推荐阅读
- javascript - 将单词作为一个整体包含在内的搜索机制
- windows - 在 Windows 中将文件扩展名添加到没有它们的文件
- css - 文字不环绕图像
- python - 生成女王空间权重矩阵的错误
- java - 连接关闭后清除结果集。SQLite
- python - pandas 结合数据框优化
- javascript - 为什么垂直轴的标签只有在单击按钮后才会显示?
- javascript - 做出反应。将输入数据从父级设置为输入
- android - 在没有 LifecycleOwner 的自定义视图中设置 LiveData 观察者
- phpmailer - 我需要服务器上的 SMTP 或 POP3 来运行 PHPMailer 吗?