【发布时间】:2011-09-17 05:32:01
【问题描述】:
请注意:我不是在“寻找代码”——只是解决这个问题的算法的想法。
这是一项家庭作业。我以为我正处于最后阶段,即将完成,但最后一部分绝对让我难过。我从来没有被这样困住过。它与 Java 中的线程有关。
Driver 类读取文件,第一行表示线程数,第二行是每个线程要读取的文件名的空格分隔列表。每个线程都有编号(0 - N),N 是文件的总数。每个线程读取指定的文件,并输出到名为 t#_out.txt 的文件,其中 # 是线程索引。
完成所有这些后,驱动线程必须:
所有线程执行完毕后,Driver.java程序打开所有线程 输出文件 t#_out.txt,从每个文件中读取一行,然后写入 到输出文件 out.txt 的行。
out.txt 示例:
MyThread[0]: Line[1]: 有些东西不喜欢墙,
MyThread[1]: Line[1]: HOG Butcher for the World,
MyThread[2]: Line[1]: 我想我永远看不到
MyThread[0]: Line[2]: 在它下面发送冻结的地面膨胀,
MyThread[1]: Line[2]: Tool Maker, Stacker of Wheat,
MyThread[2]: Line[2]: 一首像树一样可爱的诗。
MyThread[0]: Line[3]: 把上面的巨石洒在阳光下,
MyThread[1]: Line[3]: 铁路玩家和国家货运经理;
MyThread[2]: Line[3]: 一棵树,嘴巴很饿
我的问题是:我可以设置什么样的循环结构来做到这一点?从 t1_out.txt 读取一行,写入 out.txt,从 t2_out.txt 读取一行,写入 out.txt,从 tN_out.txt 读取一行,写入 out.txt?我如何知道一个文件何时结束?
想法:
使用 while(!done) 循环继续循环,直到完成每个扫描程序。跟踪一个布尔数组,指示扫描器是否已完成读取其文件。扫描仪也将在一个数组中。问题是我如何判断所有内容何时完成,以完成我的无限循环?在每次迭代中查看 booleans[i] 是否完成,如果没有完成 = false?不好。
只需将每个文件行读入其自己的 String[] 数组即可。然后找出一个循环来交替写入 out.txt。问题是当我超出数组索引时会发生什么?这也不在规范中,它说读一行,写一行。
编辑:解决方案是创建一个 allFilesReachedEOF() 方法,该方法的初始布尔值为 true。然后它循环遍历每一个,如果 ANY 有另一行要读取,则将返回条件设置为 false。这是我的 while 循环条件:while (!allFilesReachedEOF())。
我的问题是我试图从循环内控制循环。因此,如果一个文件有另一行,它将继续,但如果任何文件 EOF'd,循环将停止。
感谢您的帮助!
【问题讨论】:
标签: java arrays algorithm java.util.scanner