Java:查找数组中的最高值

出于某种原因,当我试图打印一个(11.3)时,这个代码打印三个数值为数组中的最高值。 有人可以向我解释为什么这样做吗?

谢谢。

import java.util.Scanner; public class Slide24 { public static void main (String [] args) { Scanner in = new Scanner(System.in); double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 3.5, 3, 1.1, 6.5, 5.1, -1.2, -5.1, 2, 5.2, 2.1}; double total = 0, avgMax = 0; for (int counter = 0; counter < decMax.length; counter++) { total += decMax[counter]; } avgMax = total / decMax.length; System.out.printf("%s %2.2f\n", "The average maximum temperature for December was: ", avgMax); //finds the highest value double max = decMax[0]; for (int counter = 1; counter < decMax.length; counter++) { if (decMax[counter] > max) { max = decMax[counter]; System.out.println("The highest maximum for the December is: " + max); } } } } 

每次find一个高于当前最大值的数字(在您的情况下会发生三次)。在for循环之外移动打印,您应该是好的。

 for (int counter = 1; counter < decMax.length; counter++) { if (decMax[counter] > max) { max = decMax[counter]; } } System.out.println("The highest maximum for the December is: " + max); 

要从数组中find最高(最大)或最小(最小)值,这可能会给你正确的方向。 以下是从原始数组中获取最高值的示例代码。

方法1:

 public int maxValue(int array[]){ List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < array.length; i++) { list.add(array[i]); } return Collections.max(list); 

}

要获得最低的价值,你可以使用

  Collections.min(名单) 

方法2:

 public int maxValue(int array[]){ int max = Arrays.stream(array).max().getAsInt(); return max; } 

现在下面的行应该工作。

  System.out.println(“12月份的最高值为:”+ maxValue(decMax)); 

扫描完所有文件后,您需要打印出最大值:

 for (int counter = 1; counter < decMax.length; counter++) { if (decMax[counter] > max) { max = decMax[counter]; // not here: System.out.println("The highest maximum for the December is: " + max); } } System.out.println("The highest maximum for the December is: " + max); 

如果您正在寻找最快最简单的方法来执行与数组有关的各种操作,那么使用Collections类是非常有用的(文档可从https://docs.oracle.com/javase/7/docs/api/ java / util / Collections.html ),动作范围从查找最大值,最小值,sorting,反向顺序等

一个简单的方法来使用Collections从数组中find最大值:

 Double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 3.5, 3.0, 1.1, 6.5, 5.1, -1.2, -5.1, 2.0, 5.2, 2.1}; List<Double> a = new ArrayList<Double>(Arrays.asList(decMax)); System.out.println("The highest maximum for the December is: " + Collections.max(a)); 

如果你有兴趣find最小值,类似于find最大值:

 System.out.println(Collections.min(a)); 

最简单的一行来sorting列表:

 Collections.sort(a); 

或者使用Arrays类对数组进行sorting:

 Arrays.sort(decMax); 

然而,Arrays类没有直接引用最大值的方法,对它进行sorting并引用最后一个索引是最大值,但记住用上述2种方法sorting的复杂度为O(n log n) 。

和其他人所build议的一样,只是提到了更干净的做法:

 int max = decMax[0]; for(int i=1;i<decMax.length;i++) max = Math.max(decMax[i],max); System.out.println("The Maximum value is : " + max); 

你在for()循环中有你的print()语句,它应该在它之后才打印一次。 目前的方式,每次最大的变化,它打印max

具有数组最大值的较短解决scheme:

 double max = Arrays.stream(decMax).max(Double::compareTo).get(); 

您可以使用接受数组的函数并在其中find最大值。 我使它通用,所以它也可以接受其他数据types

 public static <T extends Comparable<T>> T findMax(T[] array){ T max = array[0]; for(T data: array){ if(data.compareTo(max)>0) max =data; } return max; } 

你可以这样写。

 import java.util.Scanner; class BigNoArray{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("Enter how many array element"); int n=sc.nextInt(); int[] ar= new int[n]; System.out.println("enter "+n+" values"); for(int i=0;i<ar.length;i++){ ar[i]=sc.nextInt(); } int fbig=ar[0]; int sbig=ar[1]; int tbig=ar[3]; for(int i=1;i<ar.length;i++){ if(fbig<ar[i]){ sbig=fbig; fbig=ar[i]; } else if(sbig<ar[i]&&ar[i]!=fbig){ sbig=ar[i]; } else if(tbig<ar[i]&&ar[i]!=fbig){ tbig=ar[i]; } } System.out.println("first big number is "+fbig); System.out.println("second big number is "+sbig); System.out.println("third big number is "+tbig); } }