      1  import java.util.ArrayList;

      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.

      7  */

      8  public class Scores

      9  {

     10     public static void main(String[] args)

     11     {

     12        ArrayList<Double> scores = readInputs();

     13        if (scores.size() == 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 ArrayList containing the numbers

     27     */

     28     public static ArrayList<Double> readInputs()

     29     {

     30        ArrayList<Double> inputs = new ArrayList<Double>();

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

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

     33        while (in.hasNextDouble())

     34        {

     35           inputs.add(in.nextDouble());

     36        }

     37        return inputs;

     38     }

     39

     40     /**

     41        Computes the sum of the values in an array list

     42        @param data an array list

     43        @return the sum of the values in data

     44     */

     45     public static double sum(ArrayList<Double> data)

     46     {

     47        double total = 0;

     48        for (double element : data)

     49        {

     50           total = total + element;

     51        }

     52        return total;

     53     }

     54

     55     /**

     56        Gets the minimum value from an ArrayList.

     57        @param data an ArrayList of size >= 1

     58        @return the smallest element of data

     59     */

     60     public static double minimum(ArrayList<Double> data)

     61     {

     62        double smallest = data.get(0);

     63        for (int i = 1; i < data.size(); i++)

     64        {

     65           if (data.get(i) < smallest)

     66           {

     67              smallest = data.get(i);

     68           }

     69        }

     70        return smallest;

     71     }

     72  }

     73