学校要进行年终总结,需要对教师和学生的评分结果进行统计。学生的统计数据有三个,教师的统计数据有四个。请你实现一个统计系统,对输入的数据进行整理。
请你实现一个Person类表示人员,并实现一些必要的方法,再实现Teacher类和Student类,通过类的继承机制完成这个任务。
输入格式:
首先输入一个数字N,表示输入统计的人数。
接下来是N行,每行是用空格隔开的一系列数字。
输出格式:
N行,每行是一个标识符加一个平均得分(向下取整的整数),用空格隔开。
学生的标识符是Student,教师的标识符是Teacher。
输入样例:
2
2 3 4
2 3 4 5
输出样例:
Student 3
Teacher 3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = Integer.parseInt(in.nextLine().trim());
for(int i = 0; i < n; i++){
String s = in.nextLine().trim();
String []t = s.split(" ");
int a = 0, b = 0, c = 0, d = 0;
if(t.length == 3){
a = Integer.parseInt(t[0]);
b = Integer.parseInt(t[1]);
c = Integer.parseInt(t[2]);
Student st = new Student(a,b,c);
System.out.println("Student " + st.Average());
}else if(t.length == 4){
a = Integer.parseInt(t[0]);
b = Integer.parseInt(t[1]);
c = Integer.parseInt(t[2]);
d = Integer.parseInt(t[3]);
Teacher te = new Teacher(a,b,c, d);
System.out.println("Teacher " + te.Average());
}
}
in.close();
}
}
abstract class Person {
public abstract int Average();
}
class Student extends Person {
private int x;
private int y;
private int z;
public Student(int x,int y,int z)
{
this.x=x;
this.y=y;
this.z=z;
}
public int Average() {
int ave;
ave=(int) Math.floor((x+y+z)/3);
return ave;
}
}
class Teacher extends Person{
private int x;
private int y;
private int z;
private int m;
public Teacher(int x,int y,int z,int m)
{
this.x=x;
this.y=y;
this.z=z;
this.m=m;
}
public int Average() {
int ave;
ave=(int) Math.floor((x+y+z+m)/4);
return ave;
}
}
总结:
1,在输入时如何确定输入数据的个数,然后根据输入的个数构造对象:
可以把一行当做一个String ,然后用split方法用空格作为分隔符分隔一下,判断整个数组的长度就行了。
2,极端样例
总有一个样例出错,原来是这个用例的第一行数字后面有一个空格
如果用nextInt()接收数据,会跳过循环内nextLine()的执行,所以可以利用trim()可以去掉字符串尾部的空格。
3,nextInt()与nextLine()方法连用时
关于上面那个特殊样例也可以使用nextInt 但是nextLine()会把nextInt()的结束换行符作为字符串读入,进而不需要从键盘输入字符串nextLine便已经转向了下一条语句执行。
所以 在nextInt()语句后边可以加一个nextLine()语句,将Enter过滤掉。
如:int n = in.nextInt();
in.nextLine();