Problem With Scanner Mathod in Java: in.hasNext



>我在下面有以下程序。我希望它仅在输入为字符串时才运行,因此我将hasNext()与 if 语句一起使用。

不幸的是,当我输入数字时,它仍然会返回 true。我希望程序在没有输入字母等级的情况下执行 else 语句。有没有办法解决这个问题?谢谢。

import java.util.Scanner;
public class LetterGrade {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a letter grade: ");
if (in.hasNext()) {
String letterGrade = in.next();
System.out.println(letterGrade);
} else {
System.out.print("Not a valid letter grade");
}
}
}

扫描程序的 .next(( 方法始终返回一个字符串,无论您键入什么。在您的情况下,您键入的数字将被读取并作为字符串对象保存。您必须先阅读输入,然后检查输入是否是有效的字母等级。我会这样做:

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a letter grade: ");
String input = in.next();
if (isLetterGrade(input)) {
System.out.println(input);
} else {
System.out.print("Not a valid letter grade");
}
}
public static boolean isLetterGrade(String input) {
//check if your String is a letter grade
}

您可以使用,

Character.isLetter(char ch)

以确定输入是否为字母。

使用System.in作为InputStream源时,无需使用hasNext(),因为如果没有输入,它将无法继续。

请记住,next()方法将用户输入作为字符串返回。这并不意味着它仅在输入是字符串时才返回某些内容。


Scanner in = new Scanner(System.in);
System.out.print("Enter a letter grade: ");
String letterGrade = in.next();
if (Character.isLetter(letterGrade.toCharArray()[0])) {
System.out.println(letterGrade);
} else {
System.out.print("Not a valid letter grade");
}

最新更新