在下面的代码中,每次我运行程序时,程序都会停止并给我一条消息给InputMismatchException。当然,这是我程序的一部分。
package listbasics;
import java.util.*;
class AdjustStudents {
private final ArrayList<Student> stu = new ArrayList<>(); // a Student ArrayList
public void addStudent(String name, double gpa) throws InputMismatchException {
Student stu1 = new Student(name, gpa);
stu.add(stu1);
}
}
// ---------两个单独的类--------------
package listbasics;
import java.util.*;
public class ArrayListBasics {
private static Scanner input = new Scanner(System.in);
private static AdjustStudents ad = new AdjustStudents();
public static void main(String[] args) {
addNewStudent();
}
public static void addNewStudent() {
System.out.println("----- Adding A New Student -----");
System.out.println(" Please enter student Name :");
String name = input.nextLine();
System.out.println(" Please enter student GPA :");
try {
double gpa = input.nextDouble();
input.nextLine();
ad.addStudent(name, gpa);
} catch (InputMismatchException ex) {
System.out.println("Please Enter Valid Value !?");
}
}
}
您的代码有问题,您希望获得双精度,但用户正在输入String,因此您可以处理以下情况。
Scanner
有许多hasNextXXX方法可用于验证输入。这是一个简短的说明:
对于Int
,您可以像-input.hasNextInt()
对于Double
,您可以像-input.hasNextDouble()
对于您的示例-
public class ArrayListBasics {
private static Scanner input = new Scanner(System.in);
private static AdjustStudents ad = new AdjustStudents();
public static void main(String[] args) {
addNewStudent();
}
public static void addNewStudent() {
System.out.println("----- Adding A New Student -----");
System.out.println(" Please enter student Name :");
String name = input.nextLine();
double gpa = 0;
System.out.println(" Please enter student GPA :");
do {
while (!input.hasNextDouble()){
System.out.println(" Please enter valid GPA :");
input.next();
}
gpa = input.nextDouble();
}while (gpa <= 0);
ad.addStudent(name, gpa);
}
}