Mit der compareTo-Methode mit einem array zu Sortieren Studenten mit Namen und test-Ergebnis
Brauche ich, um vergleichbare interfact und eine compareTo-Methode zum Sortieren einer Liste der Schüler alphabetisch und dann nach test-Ergebnis. Ich habe Mühe zu bekommen, dies funktioniert in meiner Anwendung.
Die Liste der Namen gelesen werden soll aus einer text-Datei. Ich weiß nicht, wie viele Namen werden in der text-Datei, die mein professor verwendet, außer, dass es weniger als 100. Ich bin außerdem soll das display der Durchschnitt der Noten auf der Unterseite, sowie eine Nachricht schreiben, neben einem Schüler, der 15 Punkte unter dem Durchschnitt. Ich habe nicht wirklich bekommen, um das schreiben der Nachricht-Teil, wie ich bin derzeit stecken die Namen und Noten zu drucken und zu Sortieren.
Die Textdatei sollte wie folgt Aussehen:
Steelman Andrea 95
Murach Joel 98
Lowe, Doug 82
Murach Mike 93
Dies ist, was ich habe, so weit... wenn jemand könnte mir ein wenig die Richtung, ich würde es zu schätzen wissen. Danke.
package chapt11;
import java.io.FileReader;
import java.util.Arrays;
importjava.util.Scanner;
public class CH11AS8App {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
System.out.println("Welcome to the Student Scores Application.");
System.out.println();
Scanner aScanner = new Scanner(new FileReader(
"src//chapt11//ch11AS8data.txt"));
Student [] studentArray;
String lastName;
String firstName;
int examScore = 0;
double average = 0;
int nStudent = 100; //array size not set unit run time
studentArray = new Student[nStudent];
for (int i=0; i<nStudent; i++)
{
System.out.println();
while (aScanner.hasNext()) {
lastName = aScanner.next();
firstName = aScanner.next();
examScore = aScanner.nextInt();
System.out.println("Student " + nStudent++ + " " + firstName
+ " " + lastName + " " + +examScore);
studentArray[i] = new Student(lastName, firstName, examScore);
}
double sum = 0.0;
sum += examScore;
average = sum/nStudent;
Arrays.sort(studentArray);
System.out.println();
for (Student aStudent: studentArray)
{
System.out.println(aStudent);
if (examScore<= (average-10))
{
System.out.println ("Score 10 points under average");
}
System.out.println("Student Average:" +average);
}
}
}
public interface Comparable {
int compareTo(Object o);
}
class Student implements Comparable {
private String firstName;
private String lastName;
private int examScore;
public Student(String firstName, String lastName, int examScore) {
this.firstName = firstName;
this.examScore = examScore;
this.lastName = lastName;
}
//Get & Set Methods
public int getExamScore() {
return examScore;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
@Override
public int compareTo(Object o) {
Student s = (Student) o;
if (s.lastName.equals(lastName)) {
return firstName.compareToIgnoreCase(s.firstName);
} else {
return lastName.compareToIgnoreCase(s.lastName);
}
}
public String toString() {
return lastName + ", " + firstName + ": " + examScore;
}
}
}
- Haben Sie ein spezielles problem?
- I cant get my code um die Liste zu Sortieren... ich denke ich bin nicht das Verständnis, wie der array und die compareTo Methode wie ich den code geschrieben habe, funktioniert nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, löschen Sie vollständig Ihre
Comparable
- Schnittstelle. VerwendenVergleichbar
aus dem JDK.Den code ändern, um dies
Beachten Sie auch, dass es keinen "else" nach einer bedingten
return
, also habe ich weggelassen, der redundante Teil des CodesList
ist, und kein array. Niemand nutzt arrays in der realen Welt. Ich nehme an, dies ist eine Zuweisung - nur schlechte Lehrer machen Sie arrays verwenden.Es gibt nur wenige Dinge, die muss Korrektur im code:
Student
Klasse die innere Klasse so erstellen Sie ein Objekt der Klasse müssen Sie zuerst ein Objekt der äußeren Klasse. Sie wollte wohl geschachtelte Klasse, die Objekte erstellt werden können, ohne äußere Objekt (fügen Sie einfachstatic
ModifiziererStudent
Klasse)Arrays.sort()
Objekt implementieren mussjava.lang.Comparable
- Schnittstelle, keine Schnittstelle wurde von Ihnen erstellt.Können Sie generics mit
Comparable<T>
so versuchen Sie, die Umsetzung IhrerStudent
Klasse mitimplements Comparable<Student>{
diese Weise IhrecompareTo
Methode kann wiestatt:
Da dein array enthält null-Werte (Standardwert für nicht gefüllte Plätze) müssen Sie verhindern, dass die Sortierung Komparator aus aufrufen
compareTo
auf null element. Es zu tun, verwenden SieArrays.sort(Object[] a, int fromIndex, int toIndex)
version von Sortier-Algorithmus.Überprüfen Sie noch einmal Ihre Logik, während das sammeln von Informationen aus der Datei. Dinge einfacher zu machen, nicht tun paar Dinge auf einmal. Zuerst sammeln Sie alle Daten, dann Statistik.
Arrays.sort(studentArray,0,studentCounter)
da die Parameter dieser Methode sind:a
das array sortiert werden,fromIndex
den index des ersten Elements (inklusive) sortiert werden,toIndex
den index des letzten Elements (exclusive) sortiert werden.int counter=0
und nach der jeder Schüler in der Reihe, um seinen Wert zu erhöhen, zum Beispiel ideone.com/mIhD53. Jetzt werde ich schlafen so gewohnt Ihre Fragen beantworten für ein paar Stunden. Viel Glück mit deinem code.