2013-09-21 45 views
1

我在Java中我找出如何在一個數組或對象項目進行排序這樣的數據結構玩耍。我想要一些單詞以特定的順序,我可以使用Bufferedreader HashMap,ArrayList。我想要做的是在任何點讀出第一行42後,如果某些行是空的(即,長度爲0的字符串),則輸出所發生之前的一個42行的行。如何也可以改變這種程序來讀取在時間整個輸入一個行,然後輸出偶數行(從第一行,第0行),然後奇數lines..I張貼,我有這樣的代碼遠。數據結構來分類

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

    ArrayList<String> s= new ArrayList<String>(); 

    String line; 
    int n = 0; 
    while ((line = r.readLine()) != null) { 
     s.add(line); 
     n++; 
    } 
    Collections.sort(s); 

    Iterator<String> i = s.iterator(); 
    while (i.hasNext()) { 
     w.println(i.next()); 
    } 
} 


public static void main(String[] args) { 
    try { 
     BufferedReader r; 
     PrintWriter w; 
     if (args.length == 0) { 
      r = new BufferedReader(new InputStreamReader(System.in)); 
      w = new PrintWriter(System.out); 
     } else if (args.length == 1) { 
      r = new BufferedReader(new FileReader(args[0])); 
      w = new PrintWriter(System.out);     
     } else { 
      r = new BufferedReader(new FileReader(args[0])); 
      w = new PrintWriter(new FileWriter(args[1])); 
     } 
     long start = System.nanoTime(); 
     doIt(r, w); 
     w.flush(); 
     long stop = System.nanoTime(); 
     System.out.println("Execution time: " + 10e-9 * (stop-start)); 
    } catch (IOException e) { 
     System.err.println(e); 
     System.exit(-1); 
    } 
} 

回答

0

我不知道我正確理解你的問題,但我希望這可以幫助:

打印一個空行之前發生42線的線條,你可以只保留一個計數器,一旦你會發現與零長度,輸出具有索引counter - 42行線(我有可能通過這裏有一個錯誤的關閉)

 int n = 0; 
     while ((line = r.readLine()) != null) { 
      if (n > 42 && s.length == 0) 
       System.out.println(s[n-42]);    
      s.add(line); 
      n++; 
     } 

和打印偶數行第一那麼奇怪的,你可以嘗試閱讀一次兩行,將第一行保存爲A rrayList,第二行變成另一個。

底,一個將具有奇數行和一個將具有偶數行。

和最後一個或多個音符,而不是使用這樣的:

Iterator<String> i = s.iterator(); 
    while (i.hasNext()) { 
     w.println(i.next()); 
    } 

你可以簡單地使用:

for(String line : s) 
    System.out.println(line)