要实现学生成绩的排序,要从两方面来考虑如何设计程序。
第一方面是选择存储方式
第二方面是选择什么样的排序方式
以下是三种不同类型的实现:
使用对象数组存储学生信息,冒泡法实现排序使用List存储学生信息,ArrayList冒泡法实现排序利用Comparator接口和Collections类实现自动排序
成绩排序功能实现结果如下
方法一:数组排序
采用对象数组的方式来存储学生对象,定义班级类,使用数组来保存班级的学生,代码如下
//使用对象数组存储学生信息,使用冒泡排序算法实现排序
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建班级并实例化
studentclass sclass=new studentclass();
//添加学生
sclass.createclass();
System.out.println("原始顺序:");
//排序前的输出
System.out.println(sclass.output());
sclass.sort();
System.out.println("数组冒泡排序的结果:");
//冒泡排序后的输出
System.out.println(sclass.output());
}
}
class student {
private String name;
private int age;
private double grade;
public student(String name,int age,double grade) {
this.name=name;
this.age=age;
this.grade=grade;
}
//置取方法
public double getGrade() {
return grade;
}
public String getName() {
return name;
}
}
class studentclass {
private student[] stus;
private int size;
public studentclass(){
size=0;
stus=null;
}
//创建班级方法
public void createclass() {
//定义三个数组存放学生的信息
String names[]= {"张三","王五","李四","赵六","孙七"};
double grades[]= {67,78.5,98,76.5,90};
int ages[]= {17,18,18,19,17};
//把name的长度作为数组长度
size=names.length;
//创建班级stus
stus=new student[size];
for(int i=0;i stus[i]=new student(names[i],ages[i],grades[i]); } } //排序方法 public void sort() { student temp; //冒泡排序 for(int i=0;i for(int j=1;j if(stus[j-1].getGrade()>stus[j].getGrade()) { temp=stus[j-1]; stus[j-1]=stus[j]; stus[j]=temp; } } } } //输出方法 public String output() { //StringBuilder表示可变字符字符串 StringBuilder studentinfo=new StringBuilder(); for(int i=0;i //append(方法是创建了一个新的数组,扩大了长度,将需要添加的字符串给复制到这个新的数组中。 studentinfo.append("姓名:"+stus[i].getName()+"\t成绩:"+stus[i].getGrade()+"\r\n"); } return studentinfo.toString(); } } 其中output()用到一个类StringBuilder类对象studentinfo的append()方法****来完成字符串的拼接操作。 方法一程序当人数发生变化时,程序的变化也是很大,其次就是程序的实现方法没有充分体现Java语言的特色。 方法二:List排序 Java语言提供了List接口,list是元素可以重复的线性表。 它的一个具体的实现类是ArrayList,是长度可变的数组,可以对数组中的元素随机访问、插入和删除。 代码如下: import java.util.List; import java.util.ArrayList; public class test { public static void main(String[] args) { // TODO Auto-generated method stub studentclass sclass=new studentclass(); sclass.createclass(); //添加一个学生 sclass.add(new student("杨哥",18,70)); System.out.println("原始顺序:"); System.out.println(sclass.output()); sclass.sort(); System.out.println("数组冒泡排序的结果:"); System.out.println(sclass.output()); } } class studentclass { //用到泛类student,stulist保存班级学生 private List private int size; public studentclass(){ size=0; stulist=null; } public void createclass() { String names[]= {"张三","王五","李四","赵六","孙七"}; double grades[]= {67,78.5,98,76.5,90}; int ages[]= {17,18,18,19,17}; size=names.length; //实例化类型为ArrayList stulist=new ArrayList student temp; for(int i=0;i temp=new student(names[i],ages[i],grades[i]); stulist.add(temp); } } public void sort() { student temp; //冒泡排序 for(int i=0;i for(int j=1;j //get获取第几个元素 if(stulist.get(j-1).getGrade()>stulist.get(j).getGrade()) { temp=stulist.get(j-1); //set插入当前位置 stulist.set(j-1,stulist.get(j)); stulist.set(j, temp); } } } } public void add(student s) { stulist.add(s); size=stulist.size(); } public String output() { StringBuilder studentinfo=new StringBuilder(); for(student stu:stulist) { studentinfo.append("姓名:"+stu.getName()+"\t成绩:"+stu.getGrade()+"\r\n"); } return studentinfo.toString(); } } class student { private String name; private int age; private double grade; public student(String name,int age,double grade) { this.name=name; this.age=age; this.grade=grade; } public double getGrade() { return grade; } public String getName() { return name; } } 在createclass方法中,根据班级人数创建班级对象stulist的实例,实例类型为ArrayList,应用ArrayList的方法add()将学生对象添加到班级中。 其中sort排序过程使用到了ArrayList的两个方法 public E get(int index) 获取第index个元素 public E set(int index, E element) 将元素element插入到对象的第index的位置上 其中for(student stu: stulist)就相当于 for(int i=0;i student stu=stulist.get(i); } 输出结果如图 方法三:List自动排序 可以使用Collections类和Comparator接口实现自动排序功能 代码如下: import java.util.Comparator; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class test { public static void main(String[] args) { // TODO Auto-generated method stub studentclass sclass=new studentclass(); sclass.createclass(); System.out.println("原始顺序:"); System.out.println(sclass.output()); sclass.sort(); System.out.println("数组冒泡排序的结果:"); System.out.println(sclass.output()); } } //实现Comparator class studentComparator implements Comparator public int compare(student student1,student student2) { double grade1,grade2; grade1=student1.getGrade(); grade2=student2.getGrade(); if(grade1>grade2) { return 1; }else if(grade1 return -1;} else { return 0; } } } class studentclass { private List private int size; public studentclass(){ size=0; stulist=null; } public void createclass() { String names[]= {"张三","王五","李四","赵六","孙七"}; double grades[]= {67,78.5,98,76.5,90}; int ages[]= {17,18,18,19,17}; size=names.length; stulist=new ArrayList student temp; for(int i=0;i temp=new student(names[i],ages[i],grades[i]); stulist.add(temp); } } public void sort() { //创建一个比较器类对象sc,使用静态方法sort实现排序 studentComparator sc=new studentComparator(); Collections.sort(stulist,sc); } public String output() { StringBuilder studentinfo=new StringBuilder(); for(student stu:stulist) { studentinfo.append("姓名:"+stu.getName()+"\t成绩:"+stu.getGrade()+"\r\n"); } return studentinfo.toString(); } } class student { private String name; private int age; private double grade; public student(String name,int age,double grade) { this.name=name; this.age=age; this.grade=grade; } public double getGrade() { return grade; } public String getName() { return name; } }
