HOME> 梅西世界杯图片> Java学生成绩排序输出的三种不同方法
{$vo.文章标题}
{$vo.文章标题}

Java学生成绩排序输出的三种不同方法

admin
4858

要实现学生成绩的排序,要从两方面来考虑如何设计程序。

第一方面是选择存储方式

第二方面是选择什么样的排序方式

以下是三种不同类型的实现:

使用对象数组存储学生信息,冒泡法实现排序使用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 stulist;

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 stulist;

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;

}

}