【问题标题】:returning the smallest value of an array返回数组的最小值
【发布时间】:2017-07-23 20:39:39
【问题描述】:

我有一个方法应该返回数组的最小值。该数组在方法的参数中,因此您在创建类的对象时输入您自己选择的值。这是我目前想出的方法:

public class minsteNummer {

public minsteNummer() {
}

public int minsteNummer(Integer[] nummer) {
    int minste = 0; 

    for(int i = 0; i< nummer.length; i++){
        if(nummer[i] <= nummer.length) {
            minste = i;
            System.out.println("Minste nummer er " + minste);
        } else if(nummer.length == 0) {
            return 0;
        }
    }
    return 0;
} 
}

它没有按照我想要的方式执行,我无法弄清楚它打印的确切内容,但它绝对不是数组的小数。我尝试过使用while循环,但这也不起作用。

有谁知道代码中的错误在哪里,以及如何改进它?我也希望它只返回而不是打印小数,但是当我尝试输入“return minste;”时在 if 语句中,它表示“意外的返回值”。

提前致谢。

【问题讨论】:

    标签: java arrays if-statement for-loop bluej


    【解决方案1】:
    public int minsteNummer(Integer[] nummer) {
      int minste = Integer.MAX_VALUE; 
    
      for(int i = 0; i< nummer.length; i++){
        if(nummer[i] < minste ) {
            minste = nummer[i] ;
      }
      if(minste != Integer.MAX_VALUE)
           return minste;
      else
           return 0;
    } 
    

    【讨论】:

      【解决方案2】:

      您的代码中有几个地方需要注意:

      • 由于方法范围是public,您应该始终检查无效输入

      • 不应分配:int minste = 0;,因为给定数组中可能存在负数

      • 分配最小数量时,应始终将其与回路当前数量进行比较

        if (minste &gt; nummer[i]) minste = nummer[i];

      • 最后总是返回你的最小号码return minste;

      大家一起:

      public static int minsteNummer(Integer[] nummer) {
        if (nummer==null || nummer.length == 0)  {
          throw new IllegalArgumentException("Bad or empty array");
        }
        int minste = nummer[0]; 
      
        for (int i = 1; i< nummer.length; i++){
          if (minste > nummer[i]) minste = nummer[i];
        }
        System.out.println("Minste nummer er " + minste);
        return minste;
      }
      

      值得一提的是,您可以将 Java 内置功能用于此类基本任务,即按升序对数组进行排序并获取第一个元素:

      public static int minsteNummer(Integer[] nummer) {
        if (nummer==null || nummer.length == 0)  {
          throw new IllegalArgumentException("Bad or empty array");
        }
        Arrays.sort(nummer);
        return nummer[0];
      }  
      

      【讨论】:

      • 我将补充一点,排序解决方案虽然更干净,但效率较低。无论是归并排序还是快速排序(参见Why java Arrays use two different sort algorithms for different types?),遍历数组一次绝对是更高效的方法。
      • @JustinHellreich 完全同意,排序数组的效率不如只通过一次。但这只是一个例子来询问对Java的更多兴趣Collections主题
      【解决方案3】:

      使用流

      Integer[] arrayB = null;
      OptionalInt min = Arrays.stream(arrayB).mapToInt(Integer::intValue).min();
      

      【讨论】:

        猜你喜欢
        • 2014-09-14
        • 2019-07-12
        • 2012-09-17
        • 2021-05-29
        • 2021-04-10
        • 2022-01-18
        • 1970-01-01
        • 2018-07-16
        • 1970-01-01
        相关资源
        最近更新 更多