2015-10-23 22 views
-1

编写一个代码,从标准输入逐行读取学生成绩列表,直到没有更多行要读取或遇到空行。如何在Java中看到空行时断开while循环?

但是,我无法退出循环。我试着写 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

Works [here](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值)。所以你可以输入12,最后是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

我该写什么命令= Float.parseFloat();在版本 – heyaa

+0

中您想将'command'放入'parseFloat()'参数中,并将'command'(一个'String'类型)解析为'float'并返回该值。所以你应该输入类似'float f = Float.parseFloat(command);' –

+0

当我这样做时,'线程中的异常'主要“java.lang.NumberFormatException:空字符串 \t at sun.misc.FloatingDecimal.readJavaFormatString未知源) \t在sun.misc.FloatingDecimal.parseFloat(来源不明) \t在java.lang.Float.parseFloat(来源不明) \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); 
    } 
}