2016-11-06 4 views
0

Ich benutze heute Abend Arrays für ein Programmierprojekt. Ich kann alle Zahlen des Arrays addieren, aber von dort kann ich die maximalen und minimalen Werte nicht entfernen. Mein Versuch und die eigentliche Projektbeschreibung sind unter ...Wie kann man die maximalen und minimalen Werte von einem Array ziehen?

Im Sport des Tauchens vergeben sieben Richter eine Kerbe zwischen 0 und 10, wo jede Kerbe ein Gleitkommawert sein kann. Die höchsten und niedrigsten Punktzahlen werden verworfen und die restlichen Punktzahlen werden addiert. Die Summe wird dann mit dem Schwierigkeitsgrad für diesen Tauchgang multipliziert. Der Schwierigkeitsgrad liegt zwischen 1,2 und 3,8 Punkten. Die Summe wird dann mit 0,6 multipliziert, um die Punktzahl des Tauchers zu bestimmen.

Schreiben Sie ein Computerprogramm, das einen Schwierigkeitsgrad und sieben Punktzahlen der Punktrichter eingibt und die Gesamtpunktzahl für diesen Tauchgang ausgibt. Das Programm sollte sicherstellen, dass alle Eingaben innerhalb der zulässigen Datenbereiche liegen.

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

    } 
} 

Der Anteil insbesondere, dass mit denen ich zu kämpfen ist hier:

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; 

der Code ausgeführt wird und erzeugt eine korrekte Ausgabe, aber es scheint nicht die maximalen und minimalen Werte und das Problem zu subtrahieren Anfragen ... Danke für die Hilfe!

+2

Sieht mir So wie du sowohl das Maximum als auch das Minimum auf 0 initialisierst (divingScores ist zunächst ein leeres Array). Sie sollten versuchen, sie auf einen kleinen Wert bzw. einen großen Wert zu setzen. – Xyene

Antwort

0

Sie haben vergessen, die Punktzahl jedes Schiedsrichters dem Array divingScores hinzuzufügen. Sie können dieses Problem beheben, indem die erste for-Schleife auf die folgende Veränderung:

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

Sie sollten auch mindestens initialisieren:

minimum = 0 

Wenn Sie nicht, jeder über 0 erzielen wird nicht für die in Betracht gezogen werden Minimum.

0

Sie nie die Array-Werte in dem else Zweig in Ihrer for Schleife gesetzt, es sollte wie folgt aussehen:

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

Vor der zweiten Schleife, können Sie Java 8 funktionale Programmierung verwenden, um die minimalen und maximalen zu erhalten wie diese, die kürzer ist:

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

Alternativ, können Sie die Minimal- und Maximalwerte richtig ein Weg initialisieren sollte dies zumindest im allgemeinen tun o ne Element im Array ist:

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

Sie das Array sortieren und dann fügen Sie die Array-Elemente außer erste und das letzte Element der sortierten Array, das die Mindest automatisch entfernen wird und maximal

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