2016-11-06 13 views
0

私は今夜のためにプログラミングプロジェクトに配列を使用しています。私は、配列のすべての番号を追加することができますが、そこから最大値と最小値を取り除くことができません。私の試行と実際のプロジェクトの説明は以下の通りです。配列から最大値と最小値を引き出す方法は?

ダイビングのスポーツでは、7人の審査員が0から10までのスコアを与えます。各スコアは浮動小数点値です。最も高いスコアと最も低いスコアが投げられ、残りのスコアは一緒に加算されます。その合計に、その潜水の難易度が乗算されます。難易度は1.2から3.8ポイントの範囲です。合計に0.6を掛けてダイバーの得点を決定します。

難易度を入力して7名の審査員のスコアを入力し、そのダイビングの総合スコアを出力するコンピュータプログラムを作成します。プログラムは、すべての入力が許容されるデータ範囲内にあることを確認する必要があります。

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; 

コードが実行され、正しい出力を生成しますが、最大値と最小値との問題を減算していないよう:

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

    } 
} 

私は苦労していますことを、特に一部はここにあります要求...助けをありがとう!

+2

は私に見えます最大値と最小値の両方を0に初期化しているようです(divingScoresは最初は空の配列です)。それぞれ小さな値と大きい値に設定してみてください。 – Xyene

答えて

0

各審査員のスコアを配列のdivingScoresに追加するのを忘れてしまった。次へループのための最初を変更することで、この問題を解決することができます

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ループ内elseブランチの配列値を設定することはありません

0

、それは次のようになります。第二のループの前に

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

また、あなたは、適切に少なくともOのために、一般的にこれを実行する1つの方法を最小値と最大値を初期化する必要があります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]; 
} 
関連する問題