2013-11-01 73 views
0

雖然我已經修復了我之前所做的split()問題(感謝最後一個幫助過我的人),但我還有一個問題。這在這裏列出的代碼中顯然很明顯,但是我不知道它是什麼。問題是它只打印文件的最後一行到輸出,在這個階段,我希望它打印出所有的行。我需要解決什麼問題?謝謝!!不打印正確的輸出 - 數組和字符串 - Java

import java.util.Scanner; 
import java.io.File; 
import java.io.IOException; 
import java.lang.String; 
public class Hurricanes2 
{ 

public static void main(String [] args) throws IOException 
{ 
int counter = 0; 
String [] token = new String[1000]; 
String [] tokenElements = new String[128]; 
String [] hurrcaneYear = new String[64]; 
String [] hurrcaneName = new String[64]; 
int [] hurricaneCategory = new int[64]; 
double [] hurrcanePressure = new double[64]; 
double tempKnots; 
double knotsToMph; 
double [] hurricaneWindSpeeds = new double[64]; 
double categoryAverage; 
double pressureAverage; 
double speedAverage; 
String headerData = "       Hurricanes 1980 - 2006\n\n Year  Hurricane  Category  Pressure(MB)  Wind Speed (MPH)\n========================================================================"; 
Scanner in = new Scanner(System.in); 
Scanner inFile = new Scanner(new File("hurcData2.txt")); 
System.out.print(headerData); 

/**---Use for-each (line:token) 
* Parse for year - > year array 
* parse for name - > name array 
* parse for knots - > tempKnots 
* knotsToMph = tempKnots * 1.15078 
* hurricaneWindSpeed[counter] = knotsToMph 
* enter if-else to calculate category (hurricaneCategory [] = 1,2,3,4, or 5): 
*  74-95 cat1 
*  96-110 cat2 
*  111 - 129 cat3 
*  130-156 cat4 
*  157 or higher cat 5 
* 
* 
*/ 
while(inFile.hasNextLine()) 
{ 
    token[counter] = inFile.nextLine(); 
    tokenElements = token[counter].split(" "); 
    counter++; 
} 
int counter2 = 0; 
for(String line:tokenElements) 
{ 
System.out.println(tokenElements[counter2]); 
counter2++; 
} 
} 

回答

2

動了 「循環」 中的「while循環

while(inFile.hasNextLine()){ 
     token[counter] = inFile.nextLine(); 
     tokenElements = token[counter].split(" "); 
     counter++; 

     for(String part:tokenElements){ 
      System.out.println(part); 
     } 
    } 
+0

拋出一個越界異常d的: – OrangeCalx01

+0

@ OrangeCalx01 - 是上面的代碼工作不適合你? –

+0

現在呢,謝謝! – OrangeCalx01

0

在這種循環:

while(inFile.hasNextLine()) 
{ 
    token[counter] = inFile.nextLine(); 
    tokenElements = token[counter].split(" "); 
    counter++; 
} 

您與讀取的最後一行的元素替換tokenElements。然後,如果跟在你後面的「for循環」似乎認爲tokenElements包含每一行,則不應該這樣,你應該將最後一行添加到列表中,然後打印該列表。

所以在一開始定義:

List<String[]> lines = new ArrayList<>(); 

然後您修改 「而循環」 的方式:

while(inFile.hasNextLine()) 
{ 
    token[counter] = inFile.nextLine(); 
    lines.add(token[counter].split(" ")); 
    counter++; 
} 

然後你就可以打印所有行:

for (String[] tokenElements : lines) { 
    for (String token : tokenElements) { 
      System.out.print(token + " "); 
    } 
    System.out.println(); 
} 

一般來說,你應該使用自動增長的列表,而不是具有神奇值的數組,如String[128]和所有這一切。

+0

在你的文件開頭(在類聲明之前)寫入'import java.util.List;'和'import java.util.ArrayList;'。在Eclipse中,您可以簡單地執行「Ctrl-Shift-O」。你也應該看看關於收藏的一些教程,這是非常有用的。 –

+0

事實上,你不知道如何導入List和ArrayList讓我覺得你還在學習語言。我重申,你應該閱讀一些教程,讓你瞭解基礎知識。在http://docs.oracle.com/javase/tutorial/index.html上查找示例 –

+0

如果我沒有提供「魔法值」,IDE會給我提示錯誤「變量可能未初始化」 – OrangeCalx01

0

當您使用的foreach你不必使用計數器:

for(String line : tokenElements) { 
    System.out.println(line);   
} 

話雖這麼說,你重寫了最新while循環tokenElements,因此只有最後一行被打印出來,因爲您的tokenElements只包含一行文字。

實際上,你可以跳過「分裂」部分,並跳過第二計數器;-):

while (inFile.hasNextLine()) { 
    System.out.println(inFile.nextLine()); 
} 
+0

我需要分割它,以便我可以讓我的元素在行到每個數組。一行看起來像這樣:年份(標籤)名稱(標籤)速度(標籤)壓力。 – OrangeCalx01