ArrayList中的一行不打印出来

时间:2014-09-17 03:46:08

标签: java linked-list

我的代码必须读取50行输入并以相反的顺序输出它们,然后输出其他50行,所以输出从第50行开始,到第1行,然后从第100行开始到第50行我让它工作。但唯一的,51线不打印,我不能得到什么问题。

public static void doIt(BufferedReader r, PrintWriter w) throws IOException {
    String newString;
    LinkedList<String> list = new LinkedList<String>();
    int i = 0;
    while ((newString = r.readLine()) != null) {
        if (i < 50) {
            i++;
            list.addFirst(newString);
        } else {
            for (String s : list)
                w.println(s);
            list.clear();
            i = 0;
        }
    }

    for (String s : list)
        w.println(s);

}

2 个答案:

答案 0 :(得分:1)

更改您的代码如下:

 i++; 
list.addFirst(newString); 

list.addFirst(newString); 
 i++; 

因为您将 newString 添加到列表的方式将跳过一次计数

<强>更新

抱歉,但我必须修复我的答案,而不是删除它。我检查了两次,根据正确的答案添加这一行: - )

list.addFirst(newString);

答案 1 :(得分:0)

当你= = 50时,你正在丢弃你读的行,这是一个使其有效的修正。

public static void doIt(BufferedReader r, PrintWriter w) throws IOException {

String newString;
LinkedList<String> list = new LinkedList<String>();
int i = 0;
while ((newString = r.readLine()) != null) {
    if (i < 50) {
        i++;
        list.addFirst(newString);
    } else {
        for (String s : list)
            w.println(s);
        list.clear();
        list.addFirst(newString); // <---- add this line and you should be fine
        i = 0;
    }
}

for (String s : list)
    w.println(s);

}