2014-12-17 2 views
0

Я пытаюсь написать метод чтения, который принимает ввод с клавиатуры. но ввод представляет собой большой текст, который необходимо анализировать по одной строке за раз.sc.hasNextLine() никогда не кончается, застревает в цикле

risks = new ArrayList<String>(); 

    try{ 
     Scanner sc = new Scanner(in); 
     //number of updates 
     numberOfUpdates = Integer.parseInt(sc.next()); 
     //constant cost per bundle 
     constantCost = Integer.parseInt(sc.next()); 
     String line = null; 
     while(sc.hasNext()){ 
      line = sc.nextLine(); 
      risks.add(line); 
     } 
     sc.close(); 

    }   
    catch(NullPointerException e){ 
     e.printStackTrace(); 
    } 
    return 0; 
} 

код никогда не заканчивается, если я не использовать CTRL + Z, то она останавливается и читает оставшуюся часть кода, если я не он остается в бесконечном цикле, как я могу закрыть это автоматически. Я думал, что line = sc.nextLine(); сделает это, но это вообще не помогло.

+0

где вы получаете информацию от? файл? – MihaiC

+0

вход на сервере, я думаю, и есть программирование, запускающее их в моем коде, чтобы проверить результат, который я должен передать для всех из них. –

ответ

0

Добавить условие для остановки, скажем, пользовательский ввод «сделали»

while(true){ 
    line = sc.nextLine(); 
    if(line.equals("done") 
    break; 
    risks.add(line); 
} 
+0

Вы правы, я поспешно написал код. изменил его, хотя я не люблю использовать перерыв. альтернатива - назначить строку, а затем сравнить ее с «сделанным» внутри while; ответ другой пользователь имеет этот пример, не опубликует то же самое :) – MihaiC

+0

это не может быть сделано, потому что код проверяется автоматически, и он не будет нажимать что-либо вроде продолжения или сделать для остановки, это должен быть другой способ –

1

Если мы можем предположить, что in является System.in, ваше время, петля никогда не будет прекращать, поскольку System.in никогда не заканчивается, так сказать. Возьмите этот быстрый пример:

Scanner scanner = new Scanner(System.in); 

while (scanner.hasNext()) { //Never terminates 
    System.out.println(scanner.nextLine()); 
} 

Этот цикл while никогда не будет завершен. Вместо этого попробуйте использовать ключевое слово, чтобы закончить цикл, например "continue":

Scanner scanner = new Scanner(System.in); 
String s; 

while(!(s = scanner.nextLine()).equals("continue")) { 
    System.out.println(s); 
} 

Это будет прекращено, как только пользователь вводит в «продолжить» и назначить nextLine() к s, которые могут быть разработаны с внутри цикла.

Так что в вашем случае:

String s; 

while(!(s = scanner.nextLine()).equals("continue")){ 
    risks.add(s); 
} 
+0

это не может быть потому что код проверяется автоматически, и он не будет нажимать что-либо вроде продолжения или прекращения, это должен быть другой способ. –

+0

Итак, вы ищете, запускаете программу, вставляете текст и затем автоматически продолжаете? Я не совсем понимаю, чего вы хотите. – Marv

+0

нет его части моего задания, я пишу алгоритм, он должен принимать входы в виде текста, это делается автоматически, чтобы проверить, правильно ли мои результаты кода с разными входами, эта часть не имеет ничего общего с моим алгоритм цикл никогда не заканчивается, поэтому, если я не нажму ctz + z, он не остановится, вы получите его? –

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