题目
【问题描述】
还记得不久前的学生类二的题目吗?
定义一个学生类Student,其中至少包括5个成员变量:学号no,姓名name,年龄age,性别isMale,成绩score。学生的学号从1开始编,每创建一个学生,学号自动加1(参见课件中静态变量部分的第二个例子)。一个带4个参数的构造方法用来创建学生对象,一个实例方法show()用来将学生的学号、姓名、年龄、性别和成绩独立地显示在一个行中(每个信息之间用英文状态的逗号隔开,输完成绩后要求换行,输出样例:6,Liming,15,female,100 )。
再定义一个演示类Main,在其中输入10个学生的信息,并将创建的学生对象保存到数组Student[ ] stu中。然后遍历数组,让其中的每个元素调用show方法输出自己的信息;并计算出所有学生的平均分数显示出来。
*************************************************
现在要在上述程序的基础上加上异常处理的功能:main方法中输入学生信息时,如果输入错误(比如输入”fangyuanyuan false 15 98“,性别和年龄颠倒了 ),会发生java.util.InputMismatchException异常,要求你的程序能捕获这种异常,而对这种异常进行处理时能输出提示信息"Error input,please input again!",处理后能让用户重新输入发生异常的学生以及后续学生的信息。捕捉异常时可使用java.util.InputMismatchException类,或者直接使用Exception类。
【输入形式】样例输入的内容请一行一行分开输入,不要将所有行一次性粘贴过去,这样运行结果会看得更清楚点。
【输出形式】
【样例输入】
fangyuanyuan 15 false 98 lisi 14 true 84 wangwu true 90 wangwu 15 true 90 sunxiaomei 15 false 86 qianwenqing 21.2 false 76 qianwenqing 16 false 76 lisiyi 15 false 100 gumeiyan 14 true 86.5 xuzhian 15 true 60 liangsicheng 15 true 99 anbaoxin 14 true 80
【样例输出】
Error input,please input again! Error input,please input again! 1,fangyuanyuan,15,female,98.0 2,lisi,14,male,84.0 3,wangwu,15,male,90.0 4,sunxiaomei,15,female,86.0 5,qianwenqing,16,female,76.0 6,lisiyi,15,female,100.0 7,gumeiyan,14,male,86.5 8,xuzhian,15,male,60.0 9,liangsicheng,15,male,99.0 10,anbaoxin,14,male,80.0 Average score:85
Codding
定义一个学生类Student,其中至少包括5个成员变量:学号no,姓名name,年龄age,性别isMale,成绩score。 顺带生成getter和setter。
学生的学号从1开始编,每创建一个学生,学号自动加1(参见课件中静态变量部分的第二个例子)需要一个静态变量index存储现在是第几个学生。
class Student{
private int no;
private String name;
private int age;
private boolean isMale;
private int score;
private static double index;
}
生成构造函数,根据题目把姓名 年龄,性别,成绩注册进来,重写tostring方法
@Override
public String toString() {
return no+","+name+","+age+","+(isMale?"male":"female")+","+score;
}
编写主体函数
循环输入10个学生信息,题目还处理异常情况,当输入错误会报错,需要我们去捕获。
Scanner sc = new Scanner(System.in);
Student [] students = new Student[10];
for (int i = 0;i<students.length;i++){
try {
String name = sc.next();
int age = sc.nextInt();
boolean isMale = sc.nextBoolean();
double score = sc.nextDouble();
Student student = new Student(name, age,isMale,score);
students[i]=student;
}catch (InputMismatchException e){
i--;
System.out.println("Error input,please input again!");
sc.nextLine();
}
}
int sum=0;
for (Student i :students){
sum+=i.getScore();
System.out.println(i);
}
System.out.println("Average score:"+sum/10);
完整code
//package work007;
import java.util.InputMismatchException;
import java.util.Scanner;
public class StudentTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Student [] students = new Student[10];
for (int i = 0;i<students.length;i++){
try {
String name = sc.next();
int age = sc.nextInt();
boolean isMale = sc.nextBoolean();
double score = sc.nextDouble();
Student student = new Student(name, age,isMale,score);
students[i]=student;
}catch (InputMismatchException e){
i--;
System.out.println("Error input,please input again!");
sc.nextLine();
}
}
int sum=0;
for (Student i :students){
sum+=i.getScore();
System.out.println(i);
}
System.out.println("Average score:"+sum/10);
}
}
class Student{
private int no;
private String name;
private int age;
private boolean isMale;
private double score;
private static int index=1;
public Student(String name, int age, boolean isMale, double score) {
this.name = name;
this.age = age;
this.isMale = isMale;
this.score = score;
this.no= index++;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMale() {
return isMale;
}
public void setMale(boolean male) {
isMale = male;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public static int getIndex() {
return index;
}
public static void setIndex(int index) {
Student.index = index;
}
@Override
public String toString() {
return no+","+name+","+age+","+(isMale?"male":"female")+","+score;
}
}