利用流水线计算学生成绩的最大值、最小值以及及格率
#DoInput.java---输入学生人数,以及学生成绩
import java.util.*;
public class DoInput extends DoThing{
DoThing nextDoThing;
public void setNext(DoThing next){
nextDoThing=next;
}
public void doThing(double []a){
System.out.println("请输入学生数:");
Scanner read=new Scanner(System.in);
int count=read.nextInt();
System.out.println("请输入每个学生的成绩:");
a=new double[count];
for(int i=0;i<count;i++){
a[i]=read.nextDouble();
}
nextDoThing.doThing(a);
}
}
#DoThing.java
public abstract class DoThing{
public abstract void doThing(double []a);
public abstract void setNext(DoThing next);
}
#MaxAndMin.java---计算最高分,最低分
import java.util.*;
public class MaxAndMin extends DoThing{
DoThing nextDoThing;
public void setNext(DoThing next){
nextDoThing=next;
}
public void doThing(double []a){
Arrays.sort(a);
System.out.println("最高分:"+a[a.length-1]+",");
System.out.println("最低分:"+a[0]);
nextDoThing.doThing(a);
}
}
#PassPercent.java --计算及格率
public class PassPercent extends DoThing{
DoThing nextDoThing;
public void setNext(DoThing next){
nextDoThing=next;
}
public void doThing(double []a){
int count=0;
for(int i=0;i<a.length;i++){
if(a[i]>=60) count+=1;
}
double passpercent=(double)count/a.length;
System.out.print("这次考试中学生的及格率:"+passpercent*100+"%\n");
}
}
#StreamLine.java---建立流水线
public class StreamLine{
private DoThing one,two,three;
StreamLine(){
one=new DoInput();
two=new MaxAndMin();
three=new PassPercent();
one.setNext(two);
two.setNext(three);
}
public void giveResult(double a[]){
one.doThing(a);
}
}
#StudnetTest
public class StudentTest{
public static void main(String args[]){
StreamLine line=new StreamLine(); //创建流水线
double []a=new double[1];
line.giveResult(a);
}
}
运行结果示例: