编写一个代码,从标准输入逐行读取学生成绩列表,直到找不到更多行或遇到空行为止。
但是,无论如何我都无法退出循环。我试着写
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 :(得分: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
答案 1 :(得分: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);
}
}