2012-03-24 52 views
1

我正在爲讀取CSV文件的類創建程序,並對文件中給出的數據執行各種數學公式。 CSV文件是在設置:雖然文件讀取器的循環麻煩?

  • longitude1,latitude1,timeStamp1
  • longitude2,latitude2,timeStamp2
  • longitude3,latitude3,timeStamp3

(並繼續對約100個不同的座標)。

現在我專注於經度值---我很難讓我的while循環執行我也需要的操作。我需要能夠讓程序從經度1減去經度2(其中lon1和lon2在我們經過循環時最終要經過每個座標)。

我遇到的問題是循環沒有創建'重疊'(缺少更好的術語)。它在前兩個座標上執行數學運算,然後跳到下兩個數據...從而跳過其他所有操作。

[即:在循環中執行:lon2 - lon1和lon4-lon3但跳過lon3-lon2]

我有我的問題在於我,而循環的開始預感,但我真的穿上」不知道如何解決它。我會喜歡一些幫助。 以下是我目前的代碼:

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 

回答

3

這是因爲您正在一次循環運行中讀取2行。我會建議做這樣的事情:

​​

爲什麼它沒有按照你的意圖工作?那麼,想象一下當前處於文件開始的指針。 使用fr.nextLine(),您正在讀取當前指向的行並且指針停止。 在你的循環的一次運行中,你讀2連續的行,做你的數學,並在接下來的運行再讀2多行