2016-11-06 165 views
0

我今晚在編程項目中使用數組。我可以將數組的所有數字相加,但是從那裏我無法從中刪除最大值和最小值。我的嘗試和實際項目描述如下...如何從數組中提取最大值和最小值?

在潛水運動中,七名評委評分介於0到10之間,其中每個評分可能是一個浮點值。最高分和最低分被拋出,剩下的分數被加在一起。然後將總和乘以該潛水的難度。難度的範圍從1.2到3.8分。然後將總數乘以0.6來確定潛水員的分數。

編寫一個計算機程序,輸入難度和七個評委的分數並輸出該潛水的總分。程序應確保所有輸入都在允許的數據範圍內。

package baker; 

import java.util.Scanner; 

public class DiveScoreDriver { 
    public static void main(String[] args) { 

     Scanner keyboard = new Scanner(System.in); 

     double total = 0; 
     double totalFinal = 0; 
     double divingScores[] = new double[7]; 
     double input; 
     double difficultyInput = 0; 
     double minimum = divingScores[0]; 
     double maximum = divingScores[0]; 

     for (int i = 1; i < divingScores.length + 1; i++) 
     { 
      System.out.println("Judge " + i + " please enter your score."); 
      input = keyboard.nextDouble(); 
      System.out.println(); 

      if(input < 0 || input > 10) 
      { 
       System.out.println("Invalid Score"); 
        return; 
      } 
      else 
      { 
       total += input; 
      } 
     } 

     while (difficultyInput < 1.2 || difficultyInput > 3.8) 
     { 
      System.out.println("Difficulty Rating: "); 
      difficultyInput = keyboard.nextDouble(); 
     } 


     for(int i = 0; i < divingScores.length; i++) 
    { 
      if(divingScores[i] < minimum) 
     minimum = divingScores[i]; 
      if(divingScores[i] > maximum) 
     maximum = divingScores[i]; 
     } 

     total = total - maximum - minimum; 
     total = total * difficultyInput; 
    total = total * 0.6; 

     System.out.printf("\nThe overall score for the dive: %.1f\n", total); 

    } 
} 

特別是我與掙扎的部分是在這裏:

for(int i = 0; i < divingScores.length; i++) 
    { 
      if(divingScores[i] < minimum) 
     minimum = divingScores[i]; 
      if(divingScores[i] > maximum) 
     maximum = divingScores[i]; 
     } 

     total = total - maximum - minimum; 
     total = total * difficultyInput; 
     total = total * 0.6; 

代碼運行併產生一個正確的輸出,但它似乎並沒有減去最大值和最小值和問題請求...感謝您的幫助!

+2

看起來對我來說就像你將最大值和最小值初始化爲0一樣(divingScores起初是一個空數組)。您應該嘗試將它們分別設置爲一些較小的值和一些較大的值。 – Xyene

回答

0

您已經忘記將每位評委的分數添加到數組divingicores。

for (int i = 0; i < divingScores.length; i++) 
    { 
     System.out.println("Judge " + (i + 1) + " please enter your score."); 
     input = keyboard.nextDouble(); 
     System.out.println(); 

     if(input < 0 || input > 10) 
     { 
      System.out.println("Invalid Score"); 
       return; 
     } 
     else 
     { 
      total += input; 
      divingScores[i] = input; 
     } 
    } 

你也應該初始化最低爲:

minimum = 0 

如果你不這樣做,每一個上面0的比分將不會被認爲是可以通過改變第一個for循環以下解決這個問題最小。

0

你從來沒有設置您for環內的else分支數組值,它應該是這樣的:

if(input < 0 || input > 10) { 
    System.out.println("Invalid Score"); 
    return; 
} else { 
    divingScores[i] = input; 
    total += input; 
} 

第二循環之前,你可以使用Java 8函數式編程,以獲得最小和最大這樣,這是短:

double minimum = Arrays.stream(divingScores).min().getAsDouble(); 
double maximum = Arrays.stream(divingScores).max().getAsDouble(); 

或者,你應該初始化的最小值和最大值正確,單程至少做到這一點一般Ø數組中的NE元素是:

double minimum = Double.MAX_VALUE; // Use your maximum in your case 
double maximum = Double.MIN_VALUE; // Use your minimum in your case 
0

你可以對數組進行排序,然後添加不同的排序數組的第一個和最後一個元素的數組元素,它會自動刪除最小和最大

Arrays.sort(divingScores); 
double ans=0; 
for(int i=1;i<divingScores.length-1;i++){ 
    System.out.println(divingScores[i]); 
    ans+=divingScores[i]; 
} 
相關問題