2017-03-03 100 views
-2

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

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; 
} 
} 

它不执行我希望它的方式,我无法弄清楚它打印什么exacly,但它是definetly不的的smalles数阵列。我已经尝试了一段时间循环,但这也不起作用。

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

在此先感谢。

回答

0
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; 
} 
+0

请编辑您的答案和修正格式。 – clearlight

2

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

  • 同方法范围public你应该经常检查无效的输入

  • 应该不分配:int minste = 0;作为有可能在给定数组中为负数

  • 当分配最小数量时,应始终对数它重新给回路电流数

    if (minste > 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]; 
} 
+0

我只是补充说,排序解决方案虽然清洁,但效率较低。无论是合并排序还是快速排序(请参阅[为什么Java数组使用两种不同类型的排序算法?](http://stackoverflow.com/questions/3707190/why-java-arrays-use-two-different-sort -algorithms-for-different-types)),遍历数组一次肯定是更有效的方法。 –

+0

@JustinHellreich完全同意,排序数组的效率较低,只需一遍就可以完成。但这仅仅是一个例子,可以查询对Java'Collections'主题的更多兴趣 – MaxZoom

1

使用流

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