在 x 之前打印 4 个数字(可被 3 和 6 整除)并将它们存储在数组中

Print 4 numbers (that are divisible by 3 and 6) before x and store them in an array

我想在 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]);
        }
    }
}
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

有两个问题。首先,当您的除法检查条件为真时,您添加了额外的不必要循环;其次,您开始从 1x 的循环,而您的预期输出是检查从 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

如果一个数能被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]