【问题标题】:Find the Max/Min of values within a for loop在 for 循环中查找值的最大值/最小值
【发布时间】:2015-10-12 12:40:56
【问题描述】:

我已经搜索过这个特定问题的答案,但没有找到任何东西。我需要找到输入数字的最大值和最小值,但我需要的值在 for 循环内,我不知道如何在它之外使用它们。

System.out.print("How many numbers do you want to input?");

    int totalNumbers = console.nextInt();

    int minMax = 0;
    for(int i = 1; i <= totalNumbers; i++){
        System.out.print("Number " + i + ": ");
        int inputNumbers = console.nextInt();
    }
    System.out.println();

    int smallest = Math.min(minMax);
    System.out.println("Smallest = " + smallest);
    int largest = Math.max(minMax); 
    System.out.println("Largest = " + largest);

我不需要更改代码,只要能让我走上正轨。谢谢!

【问题讨论】:

  • 考虑将输入数字收集到临时数据结构中,如数组或集合,您可以稍后在收集循环之外对其进行分析。

标签: java for-loop


【解决方案1】:

你能注意到以下循环的问题吗?

for(int i = 1; i <= totalNumbers; i++){
        System.out.print("Number " + i + ": ");
        int inputNumbers = console.nextInt();
    }

您正在运行循环 totalNumbers 次,每次您创建一个名为 inputNumbers 的新 int 并存储从控制台接收到的值。另外,您在哪里更改 minMax 的值? Math.min(or max) 也不需要单个参数,甚至不会编译。

现在你有几个选择:

  1. 要么将所有数字存储在一个数组中,然后使用某种实用方法遍历该数组以获取最小和最大元素。
  2. 设置一些最小值和最大值并运行循环以获取所有项目,并在循环中跟踪最小值和最大值。

我没有写任何解决方案,因为我希望您自己尝试一下。

【讨论】:

    【解决方案2】:

    根据 oracle 文档,Math.min() 和 Math.max() 方法只能比较两个值。将值导入数组,然后对数组执行操作,应该可以让您轻松找到最小值和最大值,以及任何其他数据操作。

    int[] numbers = new int[totalNumbers];
    
    for (int i = 0; i < totalNumbers; i++) {
        numbers[i] = console.nextInt();
    }
    
    //Other Operations
    

    【讨论】:

      【解决方案3】:

      除非我误读了您想要的内容,否则您不能只在 for 循环外部维护一个变量并检查它们吗?

      int minMax = 0;
      int smallest = 0;
      int largest = 0;
      
      for(int i = 1; i <= totalNumbers; i++){
          System.out.print("Number " + i + ": ");
          int inputNumbers = console.nextInt();
          if(inputNumbers > largest){
              largest = inputNumbers;
          } else if (inputNumbers < smallest){
              smallest = inputNumbers;
         }
      }
      System.out.println();
      
      System.out.println("Smallest = " + smallest);
      System.out.println("Largest = " + largest);
      

      这是检查输入值并确定它们是当前已知的最小还是最大的最直接和合乎逻辑的方法(编辑:除非您要求使用Math.minMax)

      【讨论】:

      • 这种方法很干净,但是您的初始值有问题。 (-1)
      • @DaoWen 我在某种程度上同意。我需要根据某种常量值仔细检查这些值,或者将 smallest 初始化为最大 int 大小,并将 largest 初始化为最小 int 大小。你的想法?
      【解决方案4】:

      伪代码:

      smallest := +∞
      largest  := -∞
      
      for each number read, n:
          if n > largest:
              largest := n
          if n < smallest:
              smallest := n
      
      print the results
      

      提示:

      Java ints 不能表示 ±∞。请改用Integer.MIN_VALUE 和Integer.MAX_VALUE。

      【讨论】:

      • 没有Integer 可以小于Integer.MIN_VALUE 并且没有Integer 可以大于Integer.MAX_VALUE,在这种情况下,我们将始终得到smallest 和largest 作为结果。没有?
      • @akhil_mittal - 如果你对初始值不小心,那么最后你可能会得到垃圾。例如,如果用户输入了所有正数,但 smallest 被初始化为 0,那么该代码将返回 0 作为 smallest,即使用户从未输入 0。通过使用smallest 的最大值和largest 的最小值,您可以保证最终结果将来自用户输入(只要用户输入至少一个数字)。
      • 如果用户输入的值为10,50,40,30,60,则输出将不是10 and 60。不是吗?
      • @akhil_mittal - 我不知道你在问什么...最小的是 10,最大的是 60。Here's a demo of my pseudocode in JavaScript.
      • 哦,是的。我只是感到困惑:)
      【解决方案5】:

      你可以通过将 if else 条件放在 for 循环中来做到这一点......就像

      1. 在外部循环中取 2 个变量,一个用于最大值,另一个用于最小值存储。
      2. 内部循环首次将输入编号分配给最小值和最大值。
      3. 之后将下一个编号与此编号并重新分配值。
      4. 在循环结束时,您会找到最小值和最大值。

      【讨论】:

        猜你喜欢
        • 2018-09-21
        • 2019-09-18
        • 1970-01-01
        • 2022-09-29
        • 2020-03-04
        • 2019-05-15
        • 2013-10-05
        • 2018-08-17
        • 2016-06-07
        相关资源
        最近更新 更多