所以我有一个输入txt文件,其中我必须取前50行并反转它的顺序,以便文件将从第50行开始,然后是第49行,直到第1行,然后继续第100行,然后第99届,依旧......
但我最多只能存储50个元素。我不能存储更多。 我到目前为止编写的代码只抓取前50行并将其反转,但我不知道如何继续使用。
这是我到目前为止所做的:
ArrayList<String> al = new ArrayList<String>();
int running = 0;
while(running == 0) {
for (String line = r.readLine(); line != null; line = r.readLine()) {
if(al.size() <50 ) {
al.add(line);
}
}
Collections.reverse(al);
for (String text : al) {
w.println(text);
}
if(al.size() < 50) {
break;
}
al.clear();
}
idk为什么我的while循环不会继续运行,我只能在输出文件中反转前50行。
答案 0 :(得分:0)
此:
for (String line = r.readLine(); line != null; line = r.readLine()) {
if(al.size() <50 ) {
al.add(line);
}
}
读取文件中的所有行,将前五十行存储在al
中,并丢弃其余行。在您处理al
的结果之后,您的程序就没有更多内容了:它会读取整个文件。
有一篇关于如何调试小程序的博文,我强烈建议:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/
在您的具体情况下,我建议您将程序分解为函数。其中一个函数将是“读取 n 行,并将它们返回到数组列表中”。这种结构使得更容易推理程序的每个部分。
答案 1 :(得分:0)
您的初始循环:
for (String line = r.readLine(); line != null; line = r.readLine()) {
if(al.size() <50 ) {
al.add(line);
}
}
在将al
填充到文件末尾之后继续读取行 - 它只是不将它们放在列表中。
你很可能需要这样的东西:
for (String line = r.readLine(); line != null; line = r.readLine()) {
if (al.size() == 50)
outputReverseLines();
al.add(line);
}
outputReverseLines();
其中outputReverseLines
是一种反转,打印和清除列表的方法。