我有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个数字,但是尽管第一个程序生成6个数字,但我始终只能得到3个数字...

最佳答案

在此循环中,您读了一行,将其扔掉,然后读另一行,该行已添加到列表中:

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()

10-07 19:41
查看更多