首页 > 解决方案 > 带有用户输入的幸运号码

问题描述

我在解决以下问题时遇到了麻烦:我想让用户输入一个数字并检查它是否是一个幸运数字。幸运数字是偶数位(从第二位开始)的平方和,是 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();
}
}

标签: javacontrol-structure

解决方案


我相信罪魁祸首是以下循环:

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.Arraysjava.util.stream.Collectors


推荐阅读