2013-10-01 6 views
0

Я написал программу, которая должна считываться в записях из файла и вводить их в массив класса Student. Затем мне нужно отсортировать их по имени.bubble сортировка массива класса

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("==============================="); 
    } 
} 

Я написал то, как мой PrOfFeSsOr описал его в классе, но я все еще получаю ошибки, что «оператор> не определено для типа аргумента (ов) java.laungage.String»

Любая помощь будет принята с благодарностью.

благодаря

Edit: Я использовал предложение Ашан и теперь это выглядит следующим образом.

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.

+1

Как вы думаете, что означает ошибка? Мне кажется, это очень понятно для меня, также учитывая то, что вы пытаетесь с этим сделать. –

ответ

1

Вы не можете сравнивать строки с помощью оператора, такого как <,>. Для сравнения строк существует метод, предоставленный в классе String под названием compareTo. Этот метод сравнивает две строки лексикографически.

compareTo возвращается

  • 0 упаковывают обе строки лексически равно
  • -1, если строка вызова лексикографически меньше, чем входной строки
  • 1, если строка вызова лексикографически больше, чем на входе stirng

Вы можете заменить следующие условия:

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

с использованием метода CompareTo как:

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

Я использовал это, и он исправил мою ошибку. Теперь у меня это есть. , , – user1873736

0

Я думаю, ошибка связана с тем, что вы не можете сравнить, насколько велика имя или насколько оно маленькое. Создавая поиск пузырьков для сортировки имен по алфавиту, вам необходимо проверить их первые символы ASCII. Это довольно простая задача. Я плохо разбираюсь в Java, но C++. Итак, алгоритмы одинаковы;) Удачи;)

0

Вы можете использовать СотрагеТо() из String. > и < используются для чисел int, float, символов и т. д., а не для таких объектов, как строки. Если объекты поддерживают операции сравнения, он должен реализовать интерфейс Comparable, в котором вы определяете метод compareTo().

Этот метод возвращает -1, если он меньше другого, 0, если они равны, и 1, если он больше, чем другой объект.

Смежные вопросы