我正在执行此程序,当我在代码中看到打印时,我在输出结束时不断出现“null”错误。它确实读取文件,但最后,它添加了很多null。任何指导将不胜感激! 这就是我到目前为止所做的尝试。
public static void main(String[] args) throws Exception
{
Stack nifo=new Stack();
FileReader file = new FileReader("infix.dat");
try (BufferedReader br = new BufferedReader(file)) {
String [] words = new String[50];
String text="";
int ctrl = 0;
String Line =br.readLine();
while (Line!= null)
{
words[ctrl]= Line;
Line = br.readLine();
ctrl = ctrl + 1;
}//end of while loop
for (int i = 0; i < words.length; i++)
{
System.out.println(words[i]);
}
file.close();
} catch (IOException e) {
e.printStackTrace();
}//end of catch
}//end of main class
我的输出如下。如您所见,在我读完文件后,最后会打印出null。
5 * 6 + 4
3 - 2 +
( 3 * 4 - (2 + 5)) * 4 / 2
10 + 6 * 11 -(3 * 2 + 14) / 2
2 * (12 + (3 + 5 ) * 2
null
null
null
null
more nulls after that.
谢谢!
答案 0 :(得分:1)
您声明一个固定大小的数组:
String[] words = new String[50];
然后在其中存储一些值,然后打印每个元素:
for (int i = 0; i < words.length; i++) {
System.out.println(words[i]);
}
您未使用的所有元素均为null。因此,如果您的文件有6行,它将打印这6行,然后是44个空值,因为您没有在阵列的其他44个插槽中放置任何内容。我建议你使用不同的数据结构,如列表。这将允许您仅存储所需的值的数量。
试试这个:
public static void main(String[] args) throws Exception
{
Stack nifo=new Stack();
FileReader file = new FileReader("infix.dat");
try (BufferedReader br = new BufferedReader(file)) {
List<String> words = new LinkedList<>(); //replaced your array with a list
String text="";
String Line =br.readLine();
while (Line!= null)
{
words.add(Line);
Line = br.readLine();
}//end of while loop
for (String word : words)
{
System.out.println(word);
}
file.close();
} catch (IOException e) {
e.printStackTrace();
}//end of catch
}//end of main class
答案 1 :(得分:0)
由于您不确定数组大小以及是否要坚持使用数组,因此以下内容可能会解决您的问题
for (int i = 0; i < words.length && words[i] != null; i++)
{
System.out.println(words[i]);
}
file.close();
确保您的循环不处理words数组中任何索引的空值。因为当您声明修复大小的数组
时,数组中从未填充的索引被初始化为null