À l'aide de la méthode compareTo avec un tableau à trier les élèves par leur nom et leur score à un test d'
J'ai besoin d'utiliser la même interface et une méthode compareTo de tri d'une liste d'élèves par ordre alphabétique, puis par le test du score. J'ai du mal à obtenir que cela fonctionne dans mon application.
La liste des noms doit être lu à partir d'un fichier texte. Je ne sais pas combien de noms dans le fichier texte que mon professeur utilise, sauf qu'il sera à moins de 100. Je suis aussi censé afficher la moyenne des notes en bas ainsi que d'en écrire un message à côté de tout étudiant qui est de 15 points en dessous de la moyenne. Je n'ai pas vraiment appris à la rédaction de partie du message que je suis actuellement bloqué sur l'obtention des noms et des scores à imprimer et de les trier.
Le fichier texte doit ressembler à quelque chose comme ceci:
Steelman Andrea 95
Murach Joel 98
Doug Lowe 82
Murach Mike 93
C'est ce que j'ai jusqu'à présent... si quelqu'un pouvait me donner un peu de direction, je l'apprécierais. Je vous remercie.
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;
}
}
}
- Vous rencontrez un problème spécifique?
- Je ne peux pas obtenir mon code pour trier la liste... je pense que je ne suis pas à comprendre comment utiliser le tableau et la méthode compareTo que le code que j'ai écrit n'est pas de travail.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, supprimer le entièrement de votre
Comparable
interface. UtilisationComparable
à partir du JDK.Modifier votre code pour cette
Note également qu'il n'est pas "autre chose" après un conditionnel
return
, j'ai donc omis qui redondant partie du codeList
, pas un tableau. Personne n'utilise les tableaux dans le monde réel. Je suppose que c'est une affectation, seulement de mauvais enseignants vous faire utiliser des tableaux.Il y a quelques choses qui a besoin de correction dans votre code:
Student
classe est intérieure de la classe afin de créer un objet de cette classe, vous devez d'abord l'objet de l'extérieur de la classe. Vous avez probablement voulu classe imbriquée que les objets peuvent être créés sans objet extérieur (juste ajouterstatic
modificateur deStudent
classe)Arrays.sort()
objet doit implémenterjava.lang.Comparable
interface, pas d'interface que vous avez créés.Vous pouvez utiliser des génériques avec
Comparable<T>
essayez donc de la mise en œuvre de votreStudent
classe avecimplements Comparable<Student>{
de cette façon, votrecompareTo
méthode peut commeau lieu de:
Depuis votre tableau contient les valeurs null (valeur par défaut pour ne pas rempli lieux), vous devez prévenir le tri comparateur d'invoquer
compareTo
sur l'élément de valeur null. Faire usageArrays.sort(Object[] a, int fromIndex, int toIndex)
version de l'algorithme de tri.Vérifier de nouveau votre logique lors de la collecte d'informations à partir d'un fichier. Pour faciliter les choses à ne pas faire plusieurs choses à la fois. D'abord rassembler toutes les données, puis faire des statistiques.
Arrays.sort(studentArray,0,studentCounter)
depuis les paramètres de cette méthode de tri sont:a
le tableau à trier,fromIndex
l'index du premier élément (inclus) pour être triés,toIndex
l'index du dernier élément (exclusif) à trier.int counter=0
et après la mise en place de chaque étudiant dans la gamme pour augmenter sa valeur, par exemple ideone.com/mIhD53. Maintenant, je vais dormir tellement l'habitude de répondre à vos questions pour quelques heures. Bonne chance avec votre code.