      1  import java.util.Arrays;

      2  import java.util.Scanner;

      3

      4  /**

      5     This program computes a final score for a series of quiz scores: the sum after dropping

      6     the lowest score. The program uses arrays.

      7  */

      8  public class Scores

      9  {

     10     public static void main(String[] args)

     11     {

     12        double[] scores = readInputs();

     13        if (scores.length == 0)

     14        {

     15           System.out.println("At least one score is required.");

     16        }

     17        else

     18        {

     19           double total = sum(scores) - minimum(scores);

     20           System.out.println("Final score: " + total);

     21        }

     22     }

     23

     24     /**

     25        Reads a sequence of floating-point numbers.

     26        @return an array containing the numbers

     27     */

     28     public static double[] readInputs()

     29     {

     30        // Read the input values into an array

     31

     32        final int INITIAL_SIZE = 10;

     33        double[] inputs = new double[INITIAL_SIZE];

     34        System.out.println("Please enter values, Q to quit:");

     35        Scanner in = new Scanner(System.in);

     36        int currentSize = 0;

     37        while (in.hasNextDouble())

     38        {

     39           // Grow the array if it has been completely filled

     40

     41           if (currentSize >= inputs.length)

     42           {

     43              inputs = Arrays.copyOf(inputs, 2 * inputs.length);

     44           }

     45           inputs[currentSize] = in.nextDouble();

     46           currentSize++;

     47        }

     48

     49        return Arrays.copyOf(inputs, currentSize);

     50     }

     51

     52     /**

     53        Computes the sum of the values in an array

     54        @param data an array

     55        @return the sum of the values in data

     56     */

     57     public static double sum(double[] data)

     58     {

     59        double total = 0;

     60        for (double element : data)

     61        {

     62           total = total + element;

     63        }

     64        return total;

     65     }

     66

     67     /**

     68        Gets the minimum value from an array.

     69        @param data an array of size >= 1

     70        @return the smallest element of data

     71     */

     72     public static double minimum(double[] data)

     73     {

     74        double smallest = data[0];

     75        for (int i = 1; i < data.length; i++)

     76        {

     77           if (data[i] < smallest)

     78           {

     79              smallest = data[i];

     80           }

     81        }

     82        return smallest;

     83     }

     84  }

     85