在一个数组中打印所有小于"x"的数字

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);
    }
}

你可以更改for循环的起始和结束限制:D - gtgaxiola
2
你真的想要 i>=num.length 吗? - Mike Christensen
如果这是一份作业,你应该打上“homework”的标签 :) - helios
1
x=num[0] 的目的是什么? - kosa
说实话,我不知道怎么做。我只知道需要使用for循环来找到最小的数字。你可以随意编辑 :) - Lisa
当项目的索引不重要时,请使用for-each循环。您可能还想查找print(而不是println)方法,这可能会给您一些想法。 - Clockwork-Muse
4个回答

6

你在 for 循环中没有打印任何东西,即使你打印了,for 循环本身也看起来有些奇怪。你是想要 i < num.length 吗?为什么要将 x 重新赋值为 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);

5
你可以这样做:
System.out.println("Numbers below " + x);
for (int i = 0; i < num.length; i++) {
    if (num[i] < x) {
        System.out.println(num[i]);
    }
}

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

    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]

3
问题出在这行代码上:System.out.println("Numbers below" + x);,它必须在if块内的for循环中,并作如下更改:System.out.println(num[i]);,因为你想要打印通过num[i]访问的数组元素,而不是你选择的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);
        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);

    }

}

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是输入的值,您不希望更改它。您需要它来了解数组中的每个项目是否小于它。

不要这样做,如果你正在循环遍历数组中的所有项。使用for-each循环。如果需要索引(在这种情况下没有必要,因为有几个原因),请使用此形式。 - Clockwork-Muse
1
你说得对。最好的方法是 for(int value: num)。但是为了学习目的(而不进行大量更改),使用索引 for 循环也可以。 - helios

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接