【问题标题】:Java - Finding minimum numberJava - 寻找最小数量
【发布时间】:2011-12-06 10:49:30
【问题描述】:

以下代码应该读取一些数字并将“

import java.util.ArrayList;
import java.util.Scanner;

public class arrayex1 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        ArrayList<Integer> numbers = new ArrayList<Integer>();

        System.out.println("Enter numbers: ");

        for (int i = 0; i < 10; i++) {

            int num = input.nextInt();

            numbers.add(num);

        }

        for (int i = 0; i < numbers.size(); i++) {


            if (numbers.get(findMin(numbers)) == i) { // If the 'smallest' index value is equal to i.

                System.out.println(numbers.get(i) + " <== Smallest number");

            } else {

                System.out.println(numbers.get(i));

            }

        }

    }

    public static int findMin(ArrayList<Integer> n) {

        int min = 0; // Get value at index position 0 as the current smallest.

        for (int i = 0; i < n.size(); i++) {

            if (n.get(i) < min) {

                min = i;

            }

        } 

        return min;

    }

}

【问题讨论】:

    标签: java if-statement for-loop


    【解决方案1】:
    if (numbers.get(findMin(numbers)) == i) { // If the 'smallest' index value is equal to i.
    

    通过调用numbers.get(),您可以在i 处获取槽的值。

    【讨论】:

      【解决方案2】:

      findMin()中的变量min实际上是n中最小数的索引。 改变这个:

      if (n.get(i) < min)
      

      到:

      if (n.get(i) < n.get(min))
      

      在进入for循环之前存储findMin()的返回值:

      final int min_idx = findMin(numbers);
      for (int i = 0; i < numbers.size(); i++) {
          if (min_idx == i) { // If the 'smallest' index value is equal to i.
              System.out.println(numbers.get(i) + " <== Smallest number");
          } else {
              System.out.println(numbers.get(i));
          }
      }
      

      【讨论】:

        【解决方案3】:

        您可以使用集合排序方法对列表进行排序。 Documentation

        排序后第一个元素将是最小的一个

        【讨论】:

          【解决方案4】:

          这是一个改进的工作示例(尽管没有扫描仪输入以便于测试):

          public static void main(String[] args){
              ArrayList<Integer> numbers = new ArrayList<Integer>();
              numbers.add(5);
              numbers.add(7);
              numbers.add(3);
          
              int minIndex = findMin(numbers);
              for(int i = 0; i < numbers.size(); i++){
                  if(minIndex == i){ // If the 'smallest' index value is equal to i.
                      System.out.println(numbers.get(i) + " <== Smallest number");
                  }else{
                      System.out.println(numbers.get(i));
                  }
              }
          }
          
          public static int findMin(ArrayList<Integer> n){
              int minValue = Integer.MAX_VALUE; // Get value at index position 0 as the current smallest.
              int minIndex = -1;
              for(int i = 0; i < n.size(); i++){
                  if(n.get(i) < minValue){
                      minIndex = i;
                  }
              }
              return minIndex;
          }
          

          对于 findMin 方法是否返回最小值或最小索引存在一些混淆。它现在返回最小索引。 findMin 现在也只调用一次,而不是循环中的每次迭代,这样更简洁(而且速度稍快)。

          【讨论】:

            【解决方案5】:
            if (n.get(i) < min) 
            

            应该是:

            if (n.get(i) < n.get(min))
            

            See it

            【讨论】:

              【解决方案6】:

              只需更改以下代码,它肯定会工作。

              **if (numbers.get(findMin(numbers)) == numbers.get(i))** 
              { // If the 'smallest' index value is equal to i.               
                 System.out.println(numbers.get(i) + " <== Smallest number");              
              }
              
              and 
              
              public static int findMin(ArrayList<Integer> n) 
              {         
                int min = 0; // Get value at index position 0 as the current smallest.          
                for (int i = 0; i < n.size(); i++) 
                {             
                  **if (n.get(i) < n.get(min))**
                  {                  
                    min = i;              
                  }         
                }          
                return min;     
              } 
              

              【讨论】:

                【解决方案7】:

                您看到了意外行为,因为您没有遵守List.get() 的合同。该方法需要一个 index 作为参数并返回 value。您不应将get() 返回的值与索引进行比较。

                此外,在您的 findMin() 方法中,您应该将 min 初始化为 Integer.MAX_VALUE

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2012-11-26
                  • 2013-12-03
                  • 2021-07-16
                  • 1970-01-01
                  • 2014-10-21
                  • 2021-01-03
                  • 2018-03-31
                  • 1970-01-01
                  相关资源
                  最近更新 更多