我有以下方法,它接受字符串输入行,将它们添加到列表然后打算首先打印偶数行,然后打印奇数行。问题是它只打印偶数行而不会继续打印奇数行。解决方案似乎很简单,但我看不出会导致此问题的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));
}
}
}
答案 0 :(得分:3)
不要在循环中处理算术,而是让循环迭代处理它:
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()代替
答案 1 :(得分:1)
使用@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;
}
}