2014-09-13 96 views
3

我有以下方法,需要一串字符串輸入,將它們添加到列表中,然後打算先打印偶數行,然後是奇數行。問題在於它只打印偶數行,不打印奇數行。該解決方案看起來很簡單,但我看不出會導致此問題的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

只是一個建議:刪除x變量並使用list.size()而不是 – Bohemian 2014-09-13 00:36:51

回答

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

使用@波希米亞方法。但是如果你想使用你的代碼,只需添加一個你的代碼:

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; 
     } 
    }