【问题标题】:Trouble printing odd lines打印奇数行时遇到问题
【发布时间】:2014-11-07 05:56:23
【问题描述】:

我有以下方法,它接受字符串输入,将它们添加到列表中,然后首先打印偶数行,然后是奇数行。问题是它只打印偶数行而不继续打印奇数行。解决方案似乎很简单,但我看不出我的 if/else 语句有什么问题会导致这个问题。

public static void printLines(BufferedReader r, PrintWriter w) throws IOException {
    //first prints even lines then odd lines
    ArrayList<String> list = new ArrayList<String>();

    int x = 0;
    for (String line = r.readLine(); line != null; line = r.readLine()) {
        list.add(line);
        x++;
    }
    for (int i = 1; i < list.size(); i++){
        if (i%2 == 0 && x < 1){
            w.println(list.get(i));
            x++;
        }
        else if (i%2 == 1 && x >= 1)
        {
            w.println(list.get(i));

        }
    }
}

【问题讨论】:

  • 只是一个建议:删除 x 变量并改用 list.size()

标签: java list arraylist bufferedreader


【解决方案1】:

不要在循环中处理算术,而是让循环迭代处理它:

for (int i = 1; i < list.size(); i+=2)
    w.println(list.get(i));
for (int i = 0; i < list.size(); i+=2)
    w.println(list.get(i));

我建议您删除 x 变量并改用 list.size()

【讨论】:

    【解决方案2】:

    使用@Bohemian 方法。但是如果你想使用你的代码,只需在你的 for 中添加一个 else:

        for (int i = 1; i < list.size(); i++) {
            if (i % 2 == 0 && x < 1) {
                w.println(list.get(i));
                x++;
            } else if (i % 2 == 1 && x >= 1) {
                w.println(list.get(i));
            } else{
                i = 0;
                x = 0;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多