【问题标题】:Print 4 numbers (that are divisible by 3 and 6) before x and store them in an array在 x 之前打印 4 个数字(可被 3 和 6 整除)并将它们存储在数组中
【发布时间】:2021-05-27 11:33:38
【问题描述】:

我想在 x 之前打印 4 个数字(可以被 3 和 6 整除)并将其存储在一个数组中。例如,如果我输入29,代码将打印6 12 18 24

到目前为止,我的代码甚至都不起作用:

int array[] = new int[4];
Scanner sc = new Scanner(System.in);
System.out.print("Enter a number: ");
int x = sc.nextInt();
for (int counter = 1; counter <= x; counter++) {
    if (counter % 3 == 0 && counter % 6 == 0) {
        for (int i = 0; i < array.length; i++) {
            array[i] = counter;
            System.out.println(array[i]);
        }
    }
}

【问题讨论】:

  • 你没有解释为什么它不起作用。无法编译?它失败了吗?输出是什么?
  • 输出显示不正确,它只打印 6 6 6 6 12 12 12 12 18 18 18 18 24 24 24 24
  • 由于数组循环,它打印了 4 次,每次找到一个可整除的数字它打印 4 次,检查我发布的答案。

标签: java arrays for-loop if-statement numbers


【解决方案1】:
int array[] = new int[4];
int index = 0;
Scanner sc = new Scanner(System.in);
System.out.print("Enter a number: ");
int x = sc.nextInt();
for (int counter = x; counter >= 0; counter--) {
    if (counter % 3 == 0 && counter % 6 == 0 && index < 4) {
        array[index] = counter;
        System.out.println(array[index]);
        index++;
    }
}

每次找到可被 3 或 6 整除的数字时,您的数组循环都会覆盖该值

Enter a number: 29
6
12
18
24

【讨论】:

    【解决方案2】:

    有 2 个问题。首先,当您的条件为真以进行除法检查时,您添加了额外的不必要循环,其次您从1 开始循环到x,而您的预期输出是检查从x1 的可除性。这是修复:

    int array[] = new int[4];
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter a number: ");
    int x = sc.nextInt(), i = 0;
    System.out.println(x);
    for (int counter = x - 1; counter > 0; counter--) {
        if (counter % 3 == 0 && counter % 6 == 0) {
            array[i] = counter;
            System.out.println(array[i]);
            i++;
            if (i == 4) {
                break;
            }
        }
    }
    

    检查:https://ideone.com/5HYhsT

    【讨论】:

    • 谢谢!我还有一个问题,如果我想在 x 之后打印 4 个数字,应该改变什么?
    • 从 x 开始计数器到无穷大并检查,即 for(int counter=x+1; ; counter++)
    • 请注意,for 循环中没有停止条件,这意味着它是一个无限循环。当 i 为 4 即找到 4 个元素时,它将停止
    【解决方案3】:

    如果一个数能被 6 整除,那么它也能被 3 整除(因为 6 能被 3 整除)。第二个条件可以省略:

    int number = 29;
    int[] arr = IntStream
            // iteration backwards from 'number' to 0
            .iterate(number, i -> i > 0, i -> i - 1)
            // elements that are divisible
            // by 6 without remainder
            .filter(i -> i % 6 == 0)
            // first 4 elements
            .limit(4)
            .toArray();
    
    // output
    System.out.println(Arrays.toString(arr));
    // [24, 18, 12, 6]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-05
      • 2020-04-13
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 2012-09-29
      • 2019-04-14
      • 1970-01-01
      相关资源
      最近更新 更多