虽然我已经解决了之前遇到的split()问题(感谢最后帮助我的人!)我还有另外一个问题。这在这里列出的代码中显而易见,但我不知道它是什么。问题是它只将文件的最后一行打印到输出,在此阶段,我希望它打印出所有行。我需要修理什么?谢谢!
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++;
}
}
答案 0 :(得分:2)
在“while循环”中移动“for循环”。
while(inFile.hasNextLine()){
token[counter] = inFile.nextLine();
tokenElements = token[counter].split(" ");
counter++;
for(String part:tokenElements){
System.out.println(part);
}
}
答案 1 :(得分:0)
在那个循环中:
while(inFile.hasNextLine())
{
token[counter] = inFile.nextLine();
tokenElements = token[counter].split(" ");
counter++;
}
您正在使用最后一行读取的元素替换tokenElements
。然后,如果您之后的“for循环”似乎认为tokenElements
包含每一行。不是这种情况。您应该将最后一行添加到列表中,然后打印该列表。
所以在开始时你要定义:
List<String[]> lines = new ArrayList<>();
然后以这种方式修改“while循环”:
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]
那样具有神奇值的数组,以及所有这些。
答案 2 :(得分:0)
使用foreach时,您不必使用计数器:
for(String line : tokenElements) {
System.out.println(line);
}
话虽如此,你用最新的东西覆盖你的while循环中的tokenElements,因此只打印出最后一行,因为你的tokenElements只包含一行的单词。
您实际上可以跳过“拆分”部分,并跳过第二个计数器;-):
while (inFile.hasNextLine()) {
System.out.println(inFile.nextLine());
}