Search code examples
javasentinel

Java sentinel - reading text file into array


I've written a Java program which reads a series of real numbers from a text file into an array. I would like to use -1.0 as a sentinel so that scanner stops reading from the file when it reaches -1.0.

I'm struggling to insert the sentinel in the correct position, and also unsure if this should be done with an if or while statement. Any help much appreciated:

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class CalculatingWeights {

    public static void main(String[] args) throws FileNotFoundException {

        //Create file and scanner objects
        File inputFile = new File("in.txt");
        Scanner in = new Scanner(inputFile);

        //declare variables
        double [] myArray = new double [100];
        int i = 0;
        double min = myArray[0];
        double max = myArray[0];

        //Read numbers from file, add to array and determine min/max values
        while(in.hasNextDouble()) {
            myArray[i] = in.nextDouble();
            if(myArray[i] < min) {
                min = myArray[i];
            }
            if(myArray[i] > max) {
                max = myArray[i];
            }
            i++;
        }

        //Calculate and print weighting

        for(int index = 0; index < myArray.length; index++) {
            double num = myArray[index];
            double weighting = (num - min) / (max - min);
            System.out.printf("%8.4f %4.2f\n", num, weighting);
        }
    }
}

Solution

  • without changing a lot of your code use this

    double [] myArray = new double [100];
            int count = 0;
            double min = myArray[0];
            double max = myArray[0];
    
            //Read numbers from file, add to array and determine min/max values
            while(in.hasNextDouble()) {
                myArray[count] = in.nextDouble();
                //sentinel
                if(myArray[count]==-1.0)
                    break;
                if(myArray[count] < min) {
                    min = myArray[count];
                }
                if(myArray[count] > max) {
                    max = myArray[count];
                }
                count++;
            }
    
            //Calculate and print weighting
    
            for(int index = 0; index < count; index++) {//<-----NOTE HERE: as the array is filled upto "count"
                double num = myArray[index];
                double weighting = (num - min) / (max - min);
                System.out.printf("%8.4f %4.2f\n", num, weighting);
            }