【问题标题】:Finding the minimum value of int numbers in an array (Java)查找数组中 int 数的最小值(Java)
【发布时间】:2015-02-03 16:37:24
【问题描述】:

我试图找到数组中数字的最小值,但它并不总是能正常工作。这是我写的代码:

        for (int i=0; i < arr.length; i++ ) {
        min = arr[i];
        for (j=0; j < arr.length; j++) {
        if (arr[j] < arr[0]) {
            min = arr[j];
         }
        }
    }   

有人可以纠正我吗?

【问题讨论】:

标签: java arrays min


【解决方案1】:

不需要外循环,它只运行一次,而且你也不要使用i。你为什么拥有它?

对于内部循环,您需要与最小值进行比较。现在您将它与数组中的第一个元素进行比较,这不一定是最小值。

min = arr[0];
for (j=0; j < arr.length; j++) {
    if (arr[j] < min) {  //<---fix is here
        min = arr[j];
    }
}

您也可以从 1 开始循环,因为您不需要将 arr[0] 与自身进行比较(它只是分配给 min

【讨论】:

    【解决方案2】:
    int min = arr[0];
    for(int num : arr) {
        if (num < min){
            min = num;
        }
    }
    

    min 现在包含最小值。

    【讨论】:

    • 为了安全起见,我会添加一个空检查和一个数组长度检查。
    【解决方案3】:

    一种方法是使用 java.util.Arrays 类:

    例子:

    public class ArraySort {
    public static void main(String[] args) {
        int[] array = {12, 4, 6, 1, 56, 21, 77};
        Arrays.sort(array);
        System.out.println(array[0]);
    }
    }
    

    来自 Java 文档,Arrays.sort(int[]) 将指定的数组按数字升序排序。

    所以这里的输出打印 1。

    【讨论】:

    • 您正在执行排序操作 (O(nlogn)),但您可以在线性时间内完成。
    【解决方案4】:

    一个选项是对数组进行排序并获取第一个元素:

    import java.util.Arrays;
    
    ...
    
    int ints[] = {30,5,7,4,10};
    Arrays.sort(ints);
    
    int min = ints[0];
    int max = ints[ints.length - 1];
    

    【讨论】:

      【解决方案5】:

      如果arr 是一个非原始数字数组,我建议

      java.util.Collections.min(java.util.Arrays.asList(arr));

      因为这样会更容易维护。如果您需要同时提取最小值和最大值,则恢复手动编码是有道理的,但如果有可用的库函数,我建议不要使用手动编码循环。

      在任何情况下,您都应该检查arr != null 以及是否存在第零个元素。

      【讨论】:

        【解决方案6】:

        您在每次迭代中检查第一个元素,您基本上需要检查最小值

        if (arr[j] < min) {
          min = arr[j];
        }
        

        【讨论】:

          【解决方案7】:

          这是执行此操作的通用算法。你可以为它写代码。

          将数组中的第一项存储为当前最小值。

          遍历数组,从第二项(索引 1)开始。

          对于数组的每次迭代,检查当前项是否小于 比最小值。如果是,则将其存储为新的最小值。

          一旦循环结束,你就有了最小值!

          【讨论】:

            【解决方案8】:

            试试这个:

            int min = arr[0];
                for(int j=1;j<arr.length;j++)
                {
                        if(min>arr[j])
                        {
                            min= arr[j];
                        }
                }
                System.out.println("min no is "+min);
            

            【讨论】:

              【解决方案9】:
                    int min=0; 
                      for (int i = 0; i < array.length; i++) {
                      if (min > array[i]) {
                      min = array[i];
                      }
              }
              
                  System.out.println(min);
              

              获取 MAX 和 MIN 的简单方法

              获取MIN

              System.out.println(getMinValue(your array)); 
              

              对于 MAX

              System.out.println(getMaxValue(your array));
              

              【讨论】:

                【解决方案10】:

                我正在输入 5 个值并将它们存储在数组中并循环遍历它们以找到最小值,但它始终打印 0。这段代码有什么问题?我对最大值使用了相同的逻辑,没有问题。

                public class FindMinValue {
                
                    public static void main(String[] args) {
                        Scanner scnr = new Scanner(System.in);
                        int i;
                        int NUM_VALUES = 5;
                        int[] userVals = new int [NUM_VALUES];
                        
                        System.out.println("Enter " + NUM_VALUES + " values one at a time.");
                        
                        int minVal = userVals[0]; //min value so far
                        
                        for(i = 0; i < userVals.length; ++i) {
                            userVals[i] = scnr.nextInt();
                            if(userVals[i] < minVal) {
                                minVal = userVals[i];
                            }
                        }
                        System.out.println("Min Value is :" + minVal);
                        
                
                    }
                
                }
                

                【讨论】:

                  猜你喜欢
                  • 2016-11-12
                  • 2018-09-24
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-04-07
                  • 2016-01-14
                  • 1970-01-01
                  相关资源
                  最近更新 更多