Tuesday, 23 April 2013

Counting numbers

The assignment here is to read a text file containing a list of numbers. We need to report how many numbers were in the file, the sum of all the numbers, the average of all numbers, and the minimum and maximum number.
First step is to read the file and for this we can use the Scanner class to perform this task. We’ll use this great post “Using Scanner to read words from text file” as a starting point.
As we read each number we need to keep track of how many numbers we have read and a running total of the numbers read. Also need to check if each number is a new minimum or maximum.
Once we have read all the numbers from the file we can calculate the average value (we now know the total of all numbers read and how many numbers there were).
Finally we can output the results to the console. And we’re done.
Have a read through the code and try it out for yourself. As always, let us know if you have any questions.

package com.learnjava.math;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Numbers {
   public static void main(String[] args) {
       
      try {
         File file = new File("numbers.txt");
         Scanner input = new Scanner(file);
          
         // Count how many numbers
          
         int count = 0;   // Count of numbers read
          
         // Sum of all numbers
          
         int total = 0;
          
         // Smallest number
         int min = Integer.MAX_VALUE;
          
         // Largest number
          
         int max = Integer.MIN_VALUE;
          
         // Loop until no more numbers to be read from file
          
         while (input.hasNext()) {
             
            // Read next number from file
             
            int next = input.nextInt();
             
            // Increnment count
             
            count++;
             
            // Add number to total
             
            total += next;
             
            // Update minium
             
            min = Math.min(min,  next);
             
            // Update maximum
             
            max = Math.max(max, next);
         }
          
         input.close();
          
         // All numbers have been read
         // Can now calculate the average
         // NB. This uses integer arithmetic so result will be rounded
          
         int average = total / count;
          
         // Finally display results to console
          
         System.out.println(count+" numbers");
         System.out.println("Sum of numbers "+total);
         System.out.println("Smallest number "+min);
         System.out.println("Largest number "+max);
         System.out.println("Average of all numbers "+average);
          
      } catch (FileNotFoundException ex) {
          
         // We'll end up here if the file numbers.txt cannot be found
          
         System.out.println("Could not find the output file");
      }
   }
}

No comments:

Post a Comment