# Judges.java

``` 1: // Judges.java - a non-GUI Java program to compute the scores of the
2: // Figure Skating event at the Olympics.  There are five judges, and the
3: // final score should be the average of the middle three scores.  (Scores
4: // are integers between 0 and 10.)
5: //
6: // The more obvious solution (obvious to some anyway :-) is to read all the
7: // scores into variables, or an array (or other collection), then find and
8: // remove the smallest, then find and remove the largest, and finally
9: // calculate the average of the three remaining scores, by summing them and
10: // dividing by three.  But, as is often the case with programs, a less obvious
11: // solution can be shorter and more efficient.  In this case we will read each
12: // score, and as we go we will track the highest and lowest score as well as
13: // the sum of all the scores.  After the last score has been read, we can just
14: // subtract the largest and smallest score from the total, and then divide
15: // by three.
16: //
17: // Special care is needed to initialize the highest and lowest scores found!
18: //
20:
21: import java.util.Scanner;
22:
23: class Judges
24: {
25:    public static void main ( String [] args )
26:    {
27:       final int MIN_LEGAL_SCORE = 0, MAX_LEGAL_SCORE = 10;
28:       final int NUM_SCORES = 5;
29:
30:       int lowScore = MAX_LEGAL_SCORE + 1;
31:       int highScore = MIN_LEGAL_SCORE - 1;
32:       int totalScore = 0;
33:
34:       // Set up input parser:
35:       Scanner in = new Scanner( System.in );
36:
37:       System.out.println( "Enter the " + NUM_SCORES + " Judges' scores:\n" );
38:       for ( int i = 1; i <= NUM_SCORES; ++i )
39:       {
40:             System.out.printf( "Enter score %2d: ", i );
41:             int score = in.nextInt();
42:             if ( score < MIN_LEGAL_SCORE || score > MAX_LEGAL_SCORE )
43:             {   System.err.println( "\n\t***Error: Illegal score value, " +
45:                 --i;  // Reset attempt4
46:
47:                 continue;
48:             }
49:
50:             if ( score < lowScore  )  lowScore  = score;
51:             if ( score > highScore )  highScore = score;
52:             totalScore += score;
53:       }
54:
55:       // Subtract the low and high scores from the running total:
56:       totalScore -= (lowScore + highScore);
57:
58:       // Display score, rounded to one decimal place:
59:       System.out.printf( "\n\nAnd the Judges' score is:  %.1f\n",
60:          (totalScore / 3.0) );
61:    }
62: }
```