2015-10-23 3 views
-1

Напишите код, который читает список ученических оценок из стандартного ввода по очереди, пока не будет больше строк для чтения или пустая строка встречается.Как сломать цикл while, когда видите пустую строку в Java?

Однако я все равно не могу выйти из цикла. Я попытался написать Scanner input = new Scanner(input.hasNext()); и еще перерыв, но он не работает

public class NumInput { 
    public static void main(String [] args) { 
    float min = Float.MAX_VALUE; 
    float max = Float.MIN_VALUE; 
    float total=0; 
    int count=0; 
    Scanner input = new Scanner(System.in); 
    while (input.hasNext()) { 

     float val = input.nextFloat(); 


     if (val < min) { 
      min = val; 
     } 
     if (val > max) { 
     max = val; 
     } 
     count++; 
     total += val ; 
    } 
    float average = (float) total/count; 
    System.out.println("min: " + min); 
    System.out.println("max: " + max); 
    System.out.println("The Average value is: " + average); 
    } 
} 
+0

Что именно происходит, когда вы выполняете это? –

+0

Работы [здесь] (http://ideone.com/eNuYJd) – sam

+0

Возможно, эта ссылка может помочь: http://stackoverflow.com/questions/16206813/how-to-terminate-scanner-when-input-is-complete –

ответ

2

Вместо while(input.hasNext());, попробуйте while(input.hasNextFloat());, если он всегда будет float типа.

Кроме того, while(input.hasNextFloat()); будет продолжать считывание ввода пользователя до тех пор, пока не будет введено значение не float (или значение не int). Таким образом, вы можете ввести 1 и 2 и, наконец, q, а потому, что q не является float/int, он выйдет из цикла.

Более конкретный способ решения этого было бы сделать следующее:

while(input.hasNextLine()) { 
    String command = input.nextLine(); 
    if(command.equals("")) { 
     System.out.println("breaking out of the loop"); 
     break; 
    } 
    // rest of the code but make sure to use Float.parseFloat() on the `command`; 
} 

Эта документация имеет хорошие примеры, а также объяснение hasNextFloat(), hasNextLine() и parseFloat(): http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

+0

Что мне следует написать command = Float.parseFloat(); в paranthesis – heyaa

+0

Вы хотите поместить 'command' в параметр' parseFloat() ', и он будет разбирать' command' (тип 'String') в' float' и возвращать это значение. Таким образом, вы бы написали что-то вроде 'float f = Float.parseFloat (command);' –

+0

Когда я это делаю, 'Исключение в потоке" main "java.lang.NumberFormatException: empty String \t at sun.misc.FloatingDecimal.readJavaFormatString (Неизвестный источник) \t на sun.misc.FloatingDecimal.parseFloat (Unknown Source) \t в java.lang.Float.parseFloat (Unknown Source) \t в NumInput.main (NumInput.java:18) 'Я получаю результат после 3 Входы – heyaa

0

Чтобы проверить пустой Вы можете использовать nextLine вместо nextFloat, а затем сравнить с "", вот рабочий код

import java.util.Scanner; 

public class NumInput { 
    public static void main(String [] args) { 
    float min = Float.MAX_VALUE; 
    float max = Float.MIN_VALUE; 
    float total=0; 
    int count=0; 
    Scanner input = new Scanner(System.in); 
    String str; 
    while (input.hasNextLine()) { 

     str = input.nextLine(); 
     if(str.equals("")) //Check if it is empty line then break 
      break; 
     float val = Float.parseFloat(str); //Convert string to float 


     if (val < min) { 
      min = val; 
     } 
     if (val > max) { 
     max = val; 
     } 
     count++; 
     total += val ; 
    } 
    float average = (float) total/count; 
    System.out.println("min: " + min); 
    System.out.println("max: " + max); 
    System.out.println("The Average value is: " + average); 
    } 
} 
Смежные вопросы