3

我正在尝试打印出扫描数字下方的数字 (x)。我不知道如何,到目前为止,我所拥有的只是如何仅打印数组的最低数量。不知道如何将 x 包含到我的最后一个循环中。所以如果我输入 x = 13,我希望它打印出 11、7、5、3、2。

import java.util.Scanner;

class Test {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);


        //1

        int[] num= {2, 3, 5, 7, 11, 13, 17, 19};

        for(int i=0; i<num.length; i++) {

        System.out.println("Num: " + num[i]);
        }

        // 2
        System.out.print("\n Type a number: ");

        int x = scan.nextInt();

        x = num[0];
        for (int i=1; i>=num.length; i++) {
        if(num[i] < x) {
            x = num[i];
        }
        }
        System.out.println("Numbers below" + x);
    }
}
4

4 回答 4

6

你没有在 for 循环中打印任何东西,即使你是,for 循环本身看起来也有点奇怪。你的意思是i < num.lengthx你为什么要重新分配num[0]?试试这个:

for (int i = 0 ; i < num.length ; i++)
    if (num[i] < x)
        System.out.println(num[i]);

(确保删除该x = num[0]行。)

请注意,您还可以使用 for-each 循环:

for (int a : num)
    if (a < x)
        System.out.println(a);
于 2012-09-17T15:20:40.413 回答
5

你可以这样做:

System.out.println("Numbers below " + x);
for (int i = 0; i < num.length; i++) {
    if (num[i] < x) {
        System.out.println(num[i]);
    }
}

这是一个List带有 foreach 循环的版本:

    List<Integer> list = new ArrayList<Integer>();
    for (int n: num) {
       if (n < x) {
          list.add(n);
       }
    }
    System.out.println("Numbers below " + x + ": " + list);

输出:

Numbers below 13: [2, 3, 5, 7, 11]
于 2012-09-17T15:20:05.677 回答
3

问题在于这一行System.out.println("Numbers below" + x);,这必须在 if 块内的 for 循环中,但有一些更改,System.out.println(num[i]);因为您想打印由 num[i] 访问的数组元素,而不是您的选择x

假设您想按照您提到的顺序打印数组中的元素.... So if i type x = 13, i want it to print out 11, 7, 5, 3, 2.,下面的代码将执行此操作。

import java.util.Scanner;

class Test {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int[] num = { 2, 3, 5, 7, 11, 13, 17, 19 };

        for (int i = 0; i < num.length; i++) {

            System.out.println(num[i]);
        }

        System.out.print("Type a number: ");

        int x = scan.nextInt();
        // Removing the below statement as it makes no sense.
        // x = num[0];

        // Looping in this sense after supposing you need to print the number in
        // reverse order as per the question.

        System.out.println("Numbers below");

        //looping in the reverse order to meet the requirement
        for (int i = num.length-1; i >= 0; i--) {
            if (x > num[i]) {
                System.out.println(num[i]);
            }
        }
        // Moving this line in for loop within if block, but instead of x, we print num[i]
        //System.out.println("Numbers below" + x);

    }

}
于 2012-09-17T15:53:15.043 回答
1

你的代码看起来不错。除非您必须遍历数组的所有项目(在输入数字之后)。

您的代码正在评估i>=num.length ,但它必须是i<num.length因为它与前一个循环相同(迭代所有项目)。

起始值也应该是 0,因为数组中的第一个位置是 0。

所以,你应该这样做:

for (int i=0; i<num.length; i++) {
    if (num[i] < x) { // if this value is lower than the entered value (x)
       System.out.println(num[i]); // then I print it
}

请注意,您不必重新分配 x。x 是您不想更改的输入值。您需要它知道数组的每个项目是否低于它。

于 2012-09-17T15:20:30.827 回答