2009-11-27 171 views
17

出於某種原因,當我試圖打印一個(11.3)時,此代碼正在打印數組中最高值的三個值。有人可以向我解釋爲什麼這樣做嗎?Java:查找數組中的最大值

謝謝。

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

     }   
    } 
} 
+1

Collections.max(ArrayList的).toInt() – 2017-12-05 13:33:50

回答

27

每次找到一個高於當前最大值的數字(在您的情況下會發生三次)。將該打印移到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); 
6

您需要後打印出來的最大你掃描所有的人:

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); 
1

你有你的打印()for()循環語句,它應該是後所以它只打印一次。它目前的方式是,每當最大更改打印max

17

要從數組中找出最高值(最大值)或最小值(最小值),這可以爲您提供正確的方向。以下是從原始數組中獲取最高值的示例代碼。

方法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(list)

方法2:

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

下面的配置應該工作。

System.out.println("The highest maximum for the December is: " + maxValue(decMax));
+0

對於Java 8,方法2是非常方便的。 – 2017-01-02 07:50:45

+0

哪一個性能好? – 2017-02-03 09:21:47

+0

這些也是正確的,很好的解決方案,但不是最有效的。接受的答案是**最有效的**方法來查找數組中的最高元素。 – 2017-02-03 11:12:35

4

如果您正在尋找執行的問候陣列的各種動作最快,最簡單的方法,使用Collections類的是非常有用的(可從https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html文檔),行動從發現的最大,最小範圍,排序,相反的順序等

的簡單方式找到與使用類別陣列的最大值:

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

如果有興趣在尋找最小值,類似於發現米aximum:

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

最簡單的線對列表進行排序:但是Arrays類不

Arrays.sort(decMax); 

Collections.sort(a); 

或可選擇地使用Arrays類的排序數組有一個直接引用最大值的方法,對它進行排序並引用最後一個索引是最大值,但記住用上述2種方法排序的複雜度爲O(n log n)。

5

同其他人的建議,只提做的更清潔的方式:

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); 
0

較短的解決方案,具有陣列的最大值:

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

您可以使用一個函數,接受一個數組並在其中找到最大值。我做到了通用的,所以它也可以接受其他數據類型

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

你可以這樣寫。

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); 
    } 
} 
0
void FindMax() 
{ 
    int lessonNum; 

    System.out.print("Enter your lesson numbers : "); 
    lessonNum = input.nextInt(); 
    int[] numbers = new int[lessonNum]; 
    for (int i = 0; i < numbers.length; i++) 
    { 
     System.out.print("Please enter " + (i + 1) + " number : "); 
     numbers[i] = input.nextInt(); 
    } 
    double max = numbers[0]; 
    for (int i = 1; i < numbers.length; i++) 
    { 
     if (numbers[i] > max) 
     { 
      max = numbers[i]; 
     } 
    } 
    System.out.println("Maximum number is : " + max); 
} 
0

你只是用比較的元素的其餘零個元素,因此會打印出值最大的最後的值,它會包含在你的情況下,同樣的問題發生。爲了比較每一個元素,我們必須像交換價值:

double max = decMax[0]; 
    for (int counter = 1; counter < decMax.length; counter++){ 
     if(max<decMax[i]){ 
      max=decMax[i]; //swapping 
      decMax[i]=decMax[0]; 
     } 
    } 
    System.out.println("The max value is "+ max); 

希望這將幫助你