gpt4 book ai didi

java - 如何从控制台的一个输入读取字符串和整数?

转载 作者:行者123 更新时间:2023-12-02 13:21:38 28 4
gpt4 key购买 nike

说明如下:编写一个程序,提示用户输入学生的名字,后跟空格和整数测试成绩,然后用户按 Enter 键,您将再次提示他们输入姓名和测试成绩;共有 10 名学生和 10 个年级。 (例如:黎明100);您必须检查用户输入的成绩是否 >= 0 且 <= 100。如果不是,您必须向用户提示错误消息,并且用户必须重新输入成绩。

我不知道如何在不收到 java.util.InputMismatchException 错误消息的情况下执行此操作。

  Scanner input = new Scanner(System.in);
String[] students = new String[10];
int[] grades = new int[10];
for(int i = 0; i < students.length; )
{
System.out.println("Enter a student name and grade(between 0 and 100): ");

if(input.nextInt() > 0 && input.nextInt() <= 100)
{
students[i] = input.next();
grades[i] = input.nextInt();
i++;
}
else
{
System.out.println("*Error* Grade value must be between 0 and 100. Please Try again");
}
}

最佳答案

让我们仔细看看......

if(input.nextInt() > 0 && input.nextInt() <= 100)

您检查 nextInt 的输入,两次,因此您实际上不再比较相同的值,而且您还要求 String和一个int值,但您尚未检查 String首先...

假设我输入了类似 500 -1 的内容,那么你就是if语句将成功通过,因为 500> 0-1<= 100

如果奇迹般地成功了,你正在阅读另一本 String另一个int从流中...

students[i] = input.next();
grades[i] = input.nextInt();

因此,要使其正常工作,输入必须类似于 1 2 John 50 ...这将是完全奇怪的并且完全无效你想要做的事情。

相反,一次询问一条信息并处理它,例如......

Scanner input = new Scanner(System.in);
System.out.print("User name: ");
String name = input.nextLine();
System.out.print("Grade: ");
String gradeValue = input.nextLine();
Scanner parser = new Scanner(gradeValue);
if (parser.hasNextInt()) {
int grade = parser.nextInt();
if (grade >= 0 && grade <= 100) {
// Good grade
} else {
System.out.println("!! " + grade + " is not a valid grade");
}
} else {
System.out.println("!! " + gradeValue + " is not a valid integer value");
}

不要继续阅读Scanner当您不期望某个值时,提取您需要的值并对其进行处理。这里我使用了nextLine获得成绩和第二个Scanner解析它,它更安全,并且避免了新行留在缓冲区中的奇怪情况。它还可以让您更好地控制处理错误;)

关于java - 如何从控制台的一个输入读取字符串和整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43553860/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com