java - 带有用户输入的幸运号码
问题描述
我在解决以下问题时遇到了麻烦:我想让用户输入一个数字并检查它是否是一个幸运数字。幸运数字是偶数位(从第二位开始)的平方和,是 7 的倍数。
以下是我的代码示例,当我运行程序时它会卡在用户输入处,请告知我如何让它运行:
public class Tester {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Input a number: ");
int number = scanner.nextInt();
int count = 0;
while(number!=0) {
number/=10;
++count;
}
int[] array = new int[count];
int sum = 0;
for (int i=0; i<count; i++) {
array[i] = scanner.nextInt();
}
for (int i=0; i<count; i++) {
if(array[i]%2==0) {
sum+=(array[i]*array[i]);
}
else {
continue;
}
}
if (sum%7==0) {
System.out.println("The number: " +number+ "is a Lucky number");
}
else {
System.out.println("Oops! Not a Lucky number");
}
scanner.close();
}
}
解决方案
我相信罪魁祸首是以下循环:
for (int i=0; i<count; i++) {
array[i] = scanner.nextInt();
}
我认为您的意图是将每个数字放入一个数组中。但是,您会多次从扫描仪(在本例中为用户输入)获得输入count
。
虽然有几种方法可以将位数和每个数字放入数组中。我会给你两种方法。此外,我看不到输入整数的验证(例如负数等),我现在将忽略它们。
方法 1:您的 for 循环已更正
您只需使用公式获得数字的第 i 位。
for (int i=1; i<=count; i++) {
array[i] = (int) (number / Math.pow(10, count-i)) % 10;
}
方法 2:使用流将数字转换为字符串并返回
List<Integer> digits = Arrays.toStream(number.toString().split("")).map(
digitChar -> Integer.parseInt(digitChar)
).collect(Collectors.toList());
注意:
您需要导入类java.util.Arrays
和java.util.stream.Collectors
推荐阅读
- scala - 在 Spark 上训练 Kmeans 算法失败
- python - python中函数参数中的“或”是什么意思?
- .htaccess - 通过 RewriteCond 和 .htaccess 对 RewriteRule 进行分组
- android - 缺少必需的参数“名称”并且没有 android:defaultValue
- php - Doctrine COALESCE、SUM 和 Subtract 导致语法错误:预期的 Doctrine\ORM\Query\Lexer::T_FROM, got '-'
- java - 使用 java 在 apche_beam 中编写 tfrecords
- scala - 如何使用 Kafka、Alpakka Kafka、Play Framework 和 Websocket 处理 POST 请求?
- php - 在大型数据输入期间防止 sqlite3_php 数据库锁定的最佳实践?
- java - 链接选项
- java - 使用带有抽象类的 lombok builder