【问题标题】:Print all numbers below "x" in an array打印数组中“x”以下的所有数字
【发布时间】:2012-09-09 20:18:39
【问题描述】:

我正在尝试打印出扫描数字 (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
  • 你真的想要i&gt;=num.length吗?
  • 如果是作业,你应该标记homework :)
  • x=num[0]的目的是什么?
  • 说实话,我不知道该怎么做。我只知道我需要一个 for 循环来找到最小的数字。编辑所有你想要的:)

标签: java arrays for-loop


【解决方案1】:

你没有在 for 循环中打印任何东西,即使你打印了,for 循环本身看起来也有点奇怪。你的意思是i &lt; num.length?你为什么要重新分配xnum[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);

【讨论】:

    【解决方案2】:

    你可以这样做:

    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

      假设您想按照您提到的顺序打印数组中的元素....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);
      
          }
      
      }
      

      【讨论】:

        【解决方案4】:

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

        您的代码正在评估i&gt;=num.length 但它必须是i&lt;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 循环。如果您需要索引,请使用此表单(在这种情况下不需要,原因有几个)。
        • 你是对的。最好的方法是for(int value: num)。但是出于学习的原因(并且没有改变很多)索引是可以的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        相关资源
        最近更新 更多