当文本行数不足时,如何防止我的代码打印为null到命令行



当文件中的文本用完时,我的代码需要停止打印。现在它打印出零,直到它达到100。我的作业希望它在没有其他内容可打印时停止接收。

import java.io.*;
import java.util.Scanner;
public class TextFileReader {

String[] stringArray = new String [100];

TextFileReader() {

}

TextFileReader(String fileName) {

try {

FileInputStream fis = new FileInputStream(fileName);
Scanner scan = new Scanner(fis);

for(int i = 0; i < stringArray.length || scan.hasNextLine(); i++) {
if(scan.hasNextLine()){
stringArray[i] = scan.nextLine();
}   
}
}

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

public String contents(String fileName) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < stringArray.length; i++) {
sb.append(stringArray[i]);
}
return sb.toString();
}

public void display(String fileName) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(i + ": " + stringArray[i]);
}
}
}
}

问题不在于你读错了,而在于你显示错了。初始化stringArray = new String [100];意味着它一开始将有100个null。在你读完之后,如果你读了不到100行,当你调用display(String fileName)时,你仍然会有null

解决方案是在达到空索引时停止显示

public void display(String fileName) {
for(int i = 0; i < stringArray.length; i++) {
if(stringArray[i] == null) break;
System.out.println(i + ": " + stringArray[i]);
}
}
}

它运行100次迭代,因为数组的大小为100试着在while循环中插入这段代码,在那里你可以阅读以下行:

if (stringArray[i]==null) break

我还建议将读取的行保存到列表中,因为这一行不需要限制为大小

这个解决方案更好,因为你读取的迭代次数比你需要的要多,你的数组中的迭代次数与你的文件中的行数不匹配

最新更新