>我在下面有以下程序。我希望它仅在输入为字符串时才运行,因此我将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");
}