我有2个应用程序1在1-49之间生成6个随机数(我使用LinkedHashSet因为数字不能重复):
LinkedHashSet hs = new LinkedHashSet();
do{
int valor = 1 + (int)(Math.random() * ((49 - 1)));
String num = "" + valor;
hs.add(num);
}while(hs.size()< 6);
String[] x = (String[]) hs.toArray(new String[hs.size()]);
for(int i = 0; i<6;i++){
System.out.println(x[i]);
}
这个本身工作正常,问题出在第二个,它被命令对第一个应用程序给出的值进行排序,所以我使用了一个ArrayList:
System.out.println("Proceso lector");
List<Integer> lista = new ArrayList();
while(bf.readLine() != null){
lista.add(Integer.valueOf(bf.readLine()));
}
Collections.sort(lista);
for(int i=0; i<lista.size();i++){
System.out.println(lista.get(i));
}
我生成了jar并使用了下一个命令: java -jar prog1.jar | java -jar prog2.jar 预期的结果将是订购的6个数字,但我整个时间只得到3,尽管第一个程序生成了6 ...
答案 0 :(得分:2)
在这个循环中,你读了一行,扔掉它,然后读另一行,它被添加到列表中:
while(bf.readLine() != null){
lista.add(Integer.valueOf(bf.readLine()));
}
这与您期望6行时看到3行是一致的。
这可以通过多种方式重写,例如:
while (true) {
String line = bf.readLine();
if (line == null) {
break;
}
lista.add(Integer.valueOf(line));
}
请注意,bf.readLine()
每次迭代只调用一次。