對於這部分的質詢:
有人告訴我要打印第20項以相反的順序在陣列中,然後再打印以相反的順序接下來的20個項目,依此類推,直到我到達數組的末尾。
一個簡單的解決辦法是:
- 迭代陣列中
- 存儲在一個臨時索引
- 迭代靠背20米的地方打印陣列
- 重複過程這個位置20米的地方從儲存的溫度指數
另外,請記住,如果最後一次打印可能少於20個元素。
int size = 20; // size of reversed chunks
for(int i = 0; i < array.length; i += size) {
int j = (i + (size - 1) < array.length) ? (i + size - 1) : array.length - 1;
for(; j >= i; j--) {
System.out.print(array[j] + " ");
}
}
但是,在你的代碼中沒有數組,所以我不確定你的意思是什麼。您正在讀取文件中的值,然後使用LinkedList
反向打印它們。用於反向打印(以及大多數「反轉」操作)的更好,更自然的數據結構將是Stack
,儘管實施了針對LinkedList
的Java實現,使得其允許Stack
(LIFO)行爲。它通常只用作Queue
(FIFO)結構。我的答案也會使用LinkedList
以使其與您的方法一致,但在未來的這種情況下考慮Stack
。
所以,既然您是從文件中讀取數字,一行行,這裏是你可以做什麼:
你可以閱讀,並在LinkedList
的頂端插入數字,直到你到達max
值或文件的末尾
你已經從頂部移除它們有一部分工作
打印所有號碼這將使它們以相反的順序
您打印他們,但沒有將其刪除或致電s.clear()
結算清單一旦你到達文件的末尾,你可以用值還是在結束了LinkedList
,因爲您在達到max
項目之前已到達文件結尾,並且循環完成但沒有打印任何內容。也打印這些值。
另一件事,似乎你沒有寫入文件,所以你不需要函數的PrintWriter
參數。
下面是代碼:
public static void doIt(BufferedReader r) throws IOException {
LinkedList<String> s = new LinkedList<String>();
int counter = 0;
int max = 50;
for (String line = r.readLine(); line != null; line = r.readLine()) {
if (counter < max) {
s.addFirst(line);
counter++;
}
if (counter == max) {
while(!s.isEmpty()) { // remove and print in reverse order
System.out.println(s.removeFirst());
}
counter = 0; // reset counter
}
}
// print the remaining elements, if they exist
while(!s.isEmpty()) { // remove and print in reverse order
System.out.println(s.removeFirst());
}
}
謝謝你這麼簡單s.clear(); 我能夠修復它,並完成它。 – johnnyboyyy 2014-09-21 23:41:19