我目前有以下学生班
public class Student
{
String name;
String address;
String major;
double gpa;
int ClassLevel;
int college;
String idNumber;
public Student(String name, String address, String major, double gpa, int ClassLevel, int college, String idNumber)
{
this.name = name;
this.address = address;
this.major = major;
this.gpa = gpa;
this.ClassLevel = ClassLevel;
this.college = college;
this.idNumber = idNumber;
}
public String toString()
{
return name + " is a student enrolled in college number " + college + " majoring in " + major + " with a GPA of " + gpa + ". He is studying his year " + ClassLevel + " and his M# is " + idNumber + ". His address is " + address + ".";
}
}
我有另一个类从文本文件中读取数据以创建一个包含5个Student对象的数组
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadStudent
{
public static void main(String[] args)
{
Scanner fileIn = null;
String name = null;
String address = null;
String major = null;
double gpa = 0;
int ClassLevel = 0;
int college = 0;
String idNumber = null;
try
{
fileIn = new Scanner (new FileInputStream("student.dat"));
}
catch (FileNotFoundException e)
{
System.out.println("file not found");
System.exit(0);
}
Student[] object = new Student[5];
int i = 0;
while (fileIn.hasNextLine() && i <= 4)
{
name = fileIn.nextLine();
address = fileIn.nextLine();
major = fileIn.nextLine();
gpa = fileIn.nextDouble();
ClassLevel = fileIn.nextInt();
college = fileIn.nextInt();
idNumber = fileIn.nextLine();
fileIn.nextLine();
fileIn.nextLine();
object[i] = new Student(name, address, major, gpa, ClassLevel, college, idNumber);
i++;
}
for (int j =0; j<i; j++)
System.out.println(object[j]);
}
}
我试图通过GPA使用这些类之外的冒泡排序来对这些学生进行排序
BubbleSort课程:
public class BubbleSort
{
public static void sort (int n, double [] array)
{
double tempVar;
for (int i = 0; i<n-1; i++)
{
for (int j = 0; j<n-1; j++)
{
if (array[i] > array[j + 1])
{
tempVar = array [j+1];
array [j+1] = array[i];
array [i] = tempVar;
}
}
}
}
}
}
我不确定如何调用排序...... BubbleSort.sort [4, ???]
答案 0 :(得分:4)
为什么不将学生数组传递给方法而是以array[i].gpa > array[j + 1].gpa
进行比较? (请注意,您可能必须提供访问gpa
的getter。)
更灵活的方式是使用Comparable
界面或Comparator
,就像Collections.sort(...)
一样。
public static <T extends Comparable<T>> void sort( int n, T[] array ) {
T tempVar;
for( int i = 0; i < n - 1; i++ ) {
for( int j = 0; j < n - 1; j++ ) {
if( array[i].compareTo( array[j + 1]) > 0 ) {
tempVar = array[j + 1];
array[j + 1] = array[i];
array[i] = tempVar;
}
}
}
}
class Student implements Comparable<Student> {
public int compareTo( Student s ) {
//compare gpa here
}
}
使用比较器,您不必实现Comparable
,而是提供Comparator<Student>
的合适实例,例如
public static <T> void sort( int n, T[] array, Comparator<T> comparator ) {
T tempVar;
for( int i = 0; i < n - 1; i++ ) {
for( int j = 0; j < n - 1; j++ ) {
if( comparator.compare( array[i], array[j + 1]) > 0 ) {
tempVar = array[j + 1];
array[j + 1] = array[i];
array[i] = tempVar;
}
}
}
}
BubbleSort.sort( students.length, students, new Comparator<Student>() {
public int compare(Stundent lhs, Student rhs ) {
//compare gpa
}
});