0

我编写了一个程序,它应该从文件中读取记录并将它们输入到 Student 类的数组中。然后我需要按名称对它们进行排序。

import java.io.*;
import java.util.Scanner;

public class StudentTest 
{

public static void main(String[] args) 
{
    String name;
    String address;
    String major;
    double gpa;
    int classLevel;
    int college;
    String blank;
    String idNumber;

    Scanner fileIn = null;
    try
    {
        fileIn = new Scanner (new FileInputStream("student.dat"));
    }
    catch (FileNotFoundException e)
    {
        System.out.println("File not found");
        System.exit(0);
    }

    Student[] aStudent = new Student[15];
    int index = 0;

    for (index=0; index <= 15; index++)
    {
        while (fileIn.hasNext())
        {
        name = fileIn.nextLine();
        address = fileIn.nextLine();
        major = fileIn.nextLine();
        gpa = fileIn.nextDouble();
        classLevel = fileIn.nextInt();
        college = fileIn.nextInt();
        fileIn.nextLine();
        idNumber = fileIn.nextLine();
        aStudent[index] = new Student(name, address, major, gpa, classLevel, college, idNumber);
        aStudent[index].Display();
        }
    }
    Student temp = null;
    for (int pass = 0; pass < (index-1); pass++)
    {
        for (int c = 0; c < (index - 1); c++)
        {
            if  (aStudent[].getName() > aStudent[c+1].getName())
            {
                temp = aStudent[];
                aStudent[]=aStudent[+1];
                aStudent[+1]=temp;
            }
        }
    }
}
}

import java.util.Scanner;
public class Student 
{
private String name;
private String address;
private String major;
private double gpa;
private int classLevel;
private int college;
private String idNumber;
Scanner keyboard = new Scanner(System.in);

    public Student(String name, String address, String major, double gpa, int classLevel, int coll, String idNum)
    {
        this.name = name;
        this.address = address;
        this.gpa = gpa;
        this.major = major;
        this.classLevel = classLevel;
        this.college = coll;
        this.idNumber = idNum;

    }
    public String getName()
    {
        return name;
    }
    public String getAddress()
    {
        return address;
    }
    public String getMajor()
    {
        return major;
    }
    public double getGPA()
    {
        return gpa;
    }
    public int getClassLevel()
    {
        return classLevel;
    }
    public int getCollege()
    {
        return college;
    }
    public String getID()
    {
        return idNumber;
    }
    public void setAddress(String address)
    {
    }
    public void setMajor(String maj)
    {
    }
    public void setCollege(int coll)
    {
    }
    public void Display()
    {
        System.out.println("Name: "+getName());
        System.out.println("Address: "+getAddress());
        System.out.println("Major: " + getMajor());
        System.out.println("GPA: "+getGPA()+" Class Level: "+getClassLevel()+" College: "+getCollege());
        System.out.println("ID: "+getID());
        System.out.println("===============================");
    }
}

我按照教授在课堂上描述的方式编写了排序,但我仍然收到错误消息“> 运算符未为参数类型 java.laungage.String 定义”

任何帮助将不胜感激。

谢谢

编辑:我使用了 Ashan 的建议,现在看起来像这样。

    for (int pass = 0; pass < (index-1); pass++)
    {
        for (int c = 0; c < (index - 1); c++)
        {
            if  (aStudent[c].getName().compareTo(aStudent[c+1].getName()) > 0)
            {
                temp = aStudent[c];
                aStudent[c]=aStudent[+1];
                aStudent[+1]=temp;

那清除了那个错误。但是,我现在得到一个 NullPointerException。

4

3 回答 3

1

您不能使用 < 、 > 等运算符比较字符串。为了比较字符串,在 String 类中提供了一个方法,称为compareTo. 此方法按字典顺序比较两个字符串。

compareTo返回

  • 0 如果两个字符串在字典上是相等的
  • -1 如果调用字符串按字典顺序小于输入字符串
  • 1 如果调用字符串按字典顺序大于输入搅拌

您可以替换以下条件

    if  (aStudent[].getName() > aStudent[c+1].getName())

使用 compareTo 方法:

    if  (aStudent[].getName().compareTo(aStudent[c+1].getName()) > 0)
于 2013-10-01T00:43:57.950 回答
0

我认为错误是因为您无法比较名称的大小。进行气泡搜索以按字母顺序对名称进行排序,您需要检查它们的第一个字符ASCII。这是一件很容易做到的事情。我不擅长Java,但是C++。所以算法是一样的;)祝你好运;)

于 2013-10-01T00:43:07.363 回答
0

您可能想要使用 String 的 compareTo()。> 和 < 用于 int、float 数字、字符等,不适用于字符串等对象。如果对象支持比较操作,它必须实现 Comparable 接口,您将在其中定义 compareTo() 方法。

如果小于另一个,此方法将返回 -1,如果相等则返回 0,如果大于另一个对象,则返回 1。

于 2013-10-01T00:48:55.800 回答