2015-07-02 37 views
0

我正在嘗試編寫一個程序,該程序使用兩個類從零售交易的文本文件中查找總金額。第一類必須讀取文件,第二類必須執行計算。我遇到的問題是,在第一個類中,ArrayList只能獲得文件中最後一項的價格。這裏是輸入(這是一個文本文件):從文本文件中的數據創建ArrayList

$ 69.99 3鞋業

$ 79.99 1褲子

$ 17.99 1帶

,這裏是我的第一類:

class ReadInputFile { 
static ArrayList<Double> priceArray = new ArrayList<>(); 
static ArrayList<Double> quantityArray = new ArrayList<>(); 

static String priceSubstring = new String(); 
static String quantitySubstring = new String(); 

public void gatherData() { 

String s = "C:\\filepath"; 
try { 


     FileReader inputFile = new FileReader(s); 

     BufferedReader bufferReader = new BufferedReader(inputFile); 

     String line; 

     String substring = " "; 

     while ((line = bufferReader.readLine()) != null) 


     substring = line.substring(1, line.lastIndexOf(" ") + 1); 



    priceSubstring = substring.substring(0,substring.indexOf(" ")); 

     quantitySubstring = substring.substring(substring.indexOf(" ") + 1 , substring.lastIndexOf(" ")); 


     double price = Double.parseDouble(priceSubstring); 
     double quantity = Double.parseDouble(quantitySubstring); 

     priceArray.add(price); 
     quantityArray.add(quantity); 

     System.out.println(priceArray); 


} catch (IOException e) { 
    e.printStackTrace(); 
} 
} 

priceArray的輸出和值是[17.99],但期望的輸出是[69.99,79.99,17.99]。

不知道問題出在哪裏,但在此先感謝您的幫助!

回答

1

基本上你所擁有的是:

while ((line = bufferReader.readLine()) != null) { 
    substring = line.substring(1, line.lastIndexOf(" ") + 1); 
} 

priceSubstring = substring.substring(0,substring.indexOf(" ")); 

quantitySubstring = substring.substring(substring.indexOf(" ") + 1 , substring.lastIndexOf(" ")); 


double price = Double.parseDouble(priceSubstring); 
double quantity = Double.parseDouble(quantitySubstring); 

priceArray.add(price); 
quantityArray.add(quantity); 

System.out.println(priceArray); 

因此,所有你正在做的是創造你剛纔讀行的substring,然後讀出下一行,所以基本上,只有最後的substring將得到由剩餘的代碼處理。

包裹要被環路

例如每次迭代執行中{...}代碼...

while ((line = bufferReader.readLine()) != null) { 
    substring = line.substring(1, line.lastIndexOf(" ") + 1); 
    priceSubstring = substring.substring(0,substring.indexOf(" ")); 

    quantitySubstring = substring.substring(substring.indexOf(" ") + 1 , substring.lastIndexOf(" ")); 

    double price = Double.parseDouble(priceSubstring); 
    double quantity = Double.parseDouble(quantitySubstring); 

    priceArray.add(price); 
    quantityArray.add(quantity); 

    System.out.println(priceArray); 
} 

這將{...}塊內執行的所有代碼的每一行的文件

+0

謝謝!我有一種感覺,那是簡單的,但是我堅持了一段時間。這工作完美,將接受10分鐘的時間。 –

+0

我很高興它可以幫助。即使我有一個要執行的代碼,我總是將它包裝在一個'{...}'塊中,聽起來可能很愚蠢,但是,我發現它更容易閱讀,而且兩個不會出錯,比如這個 ;) – MadProgrammer

相關問題