Le tri des élèves par leur nom et le score à l'aide d'un tableau

J'ai posté une question à ce sujet hier soir, mais je suis toujours aux prises. J'ai besoin de trier une liste d'élèves à partir d'un fichier texte d'abord par son nom (dans ce format nom, prénom), puis par des tests. Je ne sais pas combien d'élèves seront dans le fichier texte, d'autres qu'il est à moins de 100. J'ai utiliser la méthode compareTo (qui, je pense, je l'ai fait correctement) et un tableau (je ne pense pas que je suis en utilisant correctement). J'ai été déconner avec ce pour littéralement des heures sur la fin et je ne semblent tout simplement pas l'obtenir. Le livre de texte vraiment ne semble pas être de m'aider à tout. Comment puis-je obtenir mon appli classe pour imprimer triés noms des étudiants/notes?

Autres spefications sont pour obtenir la moyenne des notes et faire un commentaire à côté de tout score inférieur à la moyenne. Ceux, cependant, je peux travailler sur après je peux obtenir le tri redressé.

Voici mon code...

 package CH11AS8App;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class kjkkkkkkkkkkk {
public static void main( String[] args ) throws Exception {
//TODO Auto-generated method stub
Scanner aScanner = new Scanner(
new FileReader("src//chapt11//ch11AS8data.txt"));
int numOfStudents = 100;
Student[] studentArray = new Student[numOfStudents];
Scanner sc = null;
int counter = 0;
while (aScanner.hasNext()) {
sc = new Scanner(aScanner.nextLine());
String lastName = sc.next();
String firstName = sc.next();
int score = sc.nextInt();
studentArray[counter++] = new Student(lastName, firstName, score);
studentArray[counter] = new Student(lastName, firstName, score); 
int average= 0;
int sum = 0;
sum += score; 
if (counter < numOfStudents); 
average = sum / counter;
if (score <= (average - 10)) {
System.out.println("Score 10 points under average");
System.out.println("Student Average:" + average);
}
sc.close();
//Display Welcome Message
System.out.println("Welcome to the Student Scores Application.\n");
//Sort Names
Arrays.sort(studentArray,0,counter, new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2) {
return s1.getLastName().compareTo(s2.getLastName());
}
});
System.out.println();
System.out.println("Student list by name:");
System.out.println();
for(int j = 0; j < counter; j++){  
System.out.println(studentArray[j]);
}
//Sort Scores
Arrays.sort(studentArray,0,counter, new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2) {
return Integer.valueOf(s2.getScore()).
compareTo(Integer.valueOf(s1.getScore()));
}
});
System.out.println();
System.out.println();
System.out.println("Student list by score:");
System.out.println();
for(int j = 0; j < counter; j++){  
System.out.println(studentArray[j]);
}
//Close Scanner
aScanner.close();

}

static class Student implements Comparable<Student> {
//Instance Variables
private String firstName;
private String lastName;
private int score;
//Getters & Setters
public Student( String firstName, String lastName, int score ) {
this.firstName = firstName;
this.score = score;
this.lastName = lastName;
}
public int getScore() {
return score;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
//CompareTo Method
@Override
public int compareTo( Student s ) {
if( !firstName.equalsIgnoreCase( s.firstName ) ) {
return firstName.compareToIgnoreCase( s.firstName );
}
if( !lastName.equalsIgnoreCase( s.lastName ) ) {
return lastName.compareToIgnoreCase( s.lastName );
}
return (new Integer(score)).compareTo((new Integer(s.score)));
}
@Override public String toString(){ return lastName + ", "+ firstName        +" : "+score; }
}
}
  • C'est un double possible de à l'Aide de la méthode compareTo avec un tableau à trier les élèves par leur nom et leur score à un test. Êtes-vous sûr que c'est une nouvelle question, et pas seulement un prolongement de la question précédente?
  • Ne devrait pas counter être déclarée à l'extérieur de la while boucle? Et suis-je aveugle ou est counter jamais incrémenté? ... et pourquoi sommes-nous de tri le tableau à chaque fois que nous lisons un Étudiant plutôt qu'une fois à la fin?
  • Lorsque le compteur est déclarée en dehors de la boucle et je lance le programme, j'obtiens une liste d'erreurs. Je ne sais pas ce que tu veux dire par tri le tableau chaque fois qu'un élève est en lecture?
InformationsquelleAutor newB | 2012-11-12