对于这部分的质询:
有人告诉我要打印第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