2017-03-04 5 views
0

Ich habe ein Java-Programm geschrieben, das eine Reihe von reellen Zahlen aus einer Textdatei in ein Array liest. Ich möchte -1.0 als Sentinel verwenden, damit der Scanner das Lesen von der Datei beendet, wenn es -1.0 erreicht.Java Sentinel - Textdatei in Array lesen

Ich habe Schwierigkeiten, den Sentinel an der richtigen Stelle einzufügen, und auch nicht sicher, ob dies mit einer if- oder while-Anweisung geschehen soll. Jede Hilfe sehr geschätzt:

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); 
     } 
    } 
} 

Antwort

0

ohne viel Code verwenden Änderung dieser

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); 
     }