2015-11-18 4 views
1

У меня 2 приложения 1 генерирует 6 случайных чисел между 1-49 (я использую LinkedHashSet, потому что цифры не могут повторяться):Неожиданный результат с помощью труб в Java

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]); 
} 

Это один сам по себе работает нормально, проблема заключается во втором, его suppoused на заказ значений, указанных в первом приложении, поэтому я использую в 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)); 
} 

я сгенерировал как банку и использовали следующую команду: Java -jar prog1.jar | Java -jar prog2.jar Ожидаемый результат будет на 6 номеров, заказанных, но я только получить 3 все время, хотя первая программа генерирует 6 ...

ответ

2

В этом цикле вы читаете строку, выбросить , а затем прочитать еще одну строку, которая добавляется к списку:

while(bf.readLine() != null){ 
    lista.add(Integer.valueOf(bf.readLine())); 
} 

Это согласуется с наблюдением 3 линии, когда вы ожидаете 6.

Это может быть переписано множество способов, например:

while (true) { 
    String line = bf.readLine(); 
    if (line == null) { 
     break; 
    } 
    lista.add(Integer.valueOf(line)); 
} 

Обратите внимание, что bf.readLine() вызывается только один раз на итерацию.

+0

Спасибо, я не понимал, что одна строка игнорируется каждый раз. – Aleeeeeeeeeeeeex

Смежные вопросы