2012-03-24 11 views
1

Ich erstelle ein Programm für eine Klasse, die eine CSV-Datei einliest und verschiedene mathematische Gleichungen für die in der Datei angegebenen Daten erstellt. Die CSV-Datei ist in der ein:Während Schleifenproblem für einen Dateileser?

  • longitude1, latitude1 timestamp1
  • longitude2, latitude2, timestamp2
  • longitude3, latitude3, timeStamp3

(und für ungefähr auf weiter 100 verschiedene Koordinaten).

Im Moment konzentriere ich mich auf die Längenwerte --- Ich habe Schwierigkeiten, meine while-Schleife zu bekommen, um die Operationen auszuführen, die ich auch brauche. Ich muss in der Lage sein, das Programm dazu zu bringen, longitude2 von longitude1 zu subtrahieren (wo sich lon1 und lon2 ändern, während wir durch die Schleife gehen ... und schließlich jede Koordinate durchlaufen).

Das Problem, das ich habe, ist, dass die Schleife keine "Überlappung" (aus Mangel an besseren Begriff) erstellt. Es führt die Mathematik an den ersten zwei Koordinaten durch und springt dann zu den nächsten zwei ... und überspringt so jede andere Operation.

[dh: die Schleife durchführen: LON2 - LON1 und lon4-lon3 aber das Überspringen lon3-LON2]

Ich habe das Gefühl, dass mein Problem zu Beginn meiner while-Schleife liegt, aber ich ehrlich don‘ Ich weiß, wie ich es beheben kann. Ich würde etwas Hilfe lieben. Unten ist der Code, den ich derzeit haben:

import java.io.*; 
import java.util.*; 
public class SearchAndR { 
    public static void main(String[] args) throws FileNotFoundException { 
     // creates a Scanner called "keyboard" to read in the file name 
     Scanner keyboard = new Scanner(System.in); 
     // prompts user for file name 
     System.out.println("Enter the name of the file you intend to read in"); 
     // Stores file name as a string so that we may read it in 
     String file = keyboard.nextLine(); 
     // creates a new Scanner called fr(short for filereader) so we can read 
     // in the file 
     // then we create a File object using the constructor new with the class 
     // "File" 
     // this takes in our string "file" as a parameter to read it in 
     // reading in our file object to the scanner 
     Scanner fr = new Scanner(new File(file)); 
     // Creating format for hike1.csv file 
     System.out.println("--- Hike Analysis ---"); 
     System.out.println("File: " + file); 
     // Calling HW4 Class to use in the rest of the program 
     HW4Util util = new HW4Util(); 
     // Establishing counting variable for distance for the while loop 
     double totaldistance = 0; 
     while (fr.hasNextLine()) { 
      String line = fr.nextLine(); 
      String[] stamp1 = line.split(","); 
      String line2 = fr.nextLine(); 
      String[] stamp2 = line2.split(","); 
      double lon1 = Double.parseDouble(stamp1[0]); 
      double lat1 = Double.parseDouble(stamp1[1]); 
      String time1 = (stamp1[2]); 
      double lon2 = Double.parseDouble(stamp2[0]); 
      double lat2 = Double.parseDouble(stamp2[1]); 
      String time2 = (stamp2[2]); 
      // This is just to check to see if the overlap is occurring! 
      // This should not be included in the project. 
      System.out.println("this is longitude" +lon1); 
      System.out.println("this is longitude" +lon2); 
      // returns the distance between two coordinates as a fraction of a 
      // mile 
      double dist = util.distance(lat1, lon1, lat2, lon2); 
      totaldistance = totaldistance + dist; 
      totaldistance = (double) (Math.round(totaldistance * 10000))/10000; 
     } 
     System.out.println("Total distance traveled: " + totaldistance + " miles"); 
    } // end method main 
} // end class filereader 

Antwort

3

Sein, weil Sie lesen 2 Zeilen in einer Schleife laufen. Ich würde vorschlagen, etwas wie das tun:

Warum funktioniert es nicht so, wie Sie es beabsichtigten? Stellen Sie sich einen Zeiger vor, der gerade am Anfang Ihrer Datei steht. Mit fr.nextLine() liest man Zeile, die gerade angezeigt wird und der Zeiger geht nach unten. In einem Lauf Ihrer Schleife lesen Sie 2 aufeinanderfolgende Zeilen, tun Sie Ihre Mathematik und im nächsten Lauf wieder lesen 2 weitere Zeilen