2009-08-17 13 views
1

Dies ist ein Labor, für das ich für eine CSE 201 arbeite. Das Programm soll Informationen über Schüler und ihre Noten aus einer Datei lesen und den Namen jedes Schülers mit allen ausgeben seine/ihre Punktzahlen und die Gesamtpunktzahl, plus die durchschnittliche Punktzahl der Klasse sowie den Namen und die Gesamtpunktzahl der Schüler mit der höchsten und niedrigsten Gesamtpunktzahl.Anfänger Java (Klassenzuordnung zum Kompilieren)

Die genaue Zuordnung kann here gesehen werden.

Ich habe ein wenig Mühe, es zu kompilieren, vor allem mit der Variablen "". Jede Hilfe wäre großartig.

/* 
* The program will read information about students and their 
* scores from a file, and output the name of each student with 
* all his/her scores and the total score, plus the average score 
* of the class, and the name and total score of the students with 
* the highest and lowest total score. 
*/ 

import java.util.Scanner; 

public class Lab7 
{ 
     public static void main(String[] args) 
     { 
       // Input file name 
       Scanner in = new Scanner(System.in); 
       String filename = getFileName(in); 

       // Input number of students 
       int Student[students] = getStudents(FileIOHelper.getNumberOfStudents(filename)); 

       // Input all students records and create Student array and 
       // integer array for total scores 
       int[] totalScores = new int[students.length]; 
       for(int i = 0; i < students.length; i++){ 
         for(int j = 1; j < 4; j++){ 
           totalScores[i] += students[i].getScore(j); 
         } 
       } 

       // Compute total scores and find students with lowest and 
     // highest total score 
       int maxIndex = 0, minIndex = 0; 
       for(int i = 0; i < students.length; i++){ 
         if(totalScores[i] > totalScores[maxIndex]){ 
           maxIndex = i; 
         }else if(totalScores[i] < totalScores[minIndex]){ 
           minIndex = i; 
         } 
       } 

       // Compute average total score 
       int average = 0; 
       for(int i = 0; i < totalScores.length; i++){ 
         average += totalScores[i]; 
       } 
       average /= students.length; 

       // Output results 
       outputResults(students, totalScores, maxIndex, minIndex, average); 

     } 

     // Given a Scanner in, this method prompts the user to enter 
     // a file name, inputs it, and returns it. 
     private static String getFileName(Scanner in) 
     { 
       System.out.print("Enter input file name: "); 
       return in.nextLine(); 
     } 

     // Given the number of students records n to input, this 
     // method creates an array of Student of the appropriate size, 
     // reads n student records using the FileIOHelper, and stores 
     // them in the array, and finally returns the Student array. 
     private static Student[] getStudents(int n) 
     { 
       Student[] student = new Student[n]; 
       for(int i = 0; i < student.length; i++){ 
         student[i] = FileIOHelper.getNextStudent(); 

       } 
       return student; 
     } 

     // Given an array of Student records, an array with the total scores, 
     // the indices in the arrays of the students with the highest and 
     // lowest total scores, and the average total score for the class, 
     // this method outputs a table of all the students appropriately 
     // formatted, plus the total number of students, the average score 
     // of the class, and the name and total score of the students with 
     // the highest and lowest total score. 
     private static void outputResults(
         Student[] students, int[] totalScores, 
         int maxIndex, int minIndex, int average 
     ) 
     { 
       System.out.println("\nName \t\tScore1 \tScore2 \tScore3 \tTotal"); 
       System.out.println("--------------------------------------------------------"); 
       for(int i = 0; i < students.length; i++){ 
         outputStudent(students[i], totalScores[i], average); 
         System.out.println(); 
       } 
       System.out.println("--------------------------------------------------------"); 
       outputNumberOfStudents(students.length); 
       outputAverage(average); 
       outputMaxStudent(students[maxIndex], totalScores[maxIndex]); 
       outputMinStudent(students[minIndex], totalScores[minIndex]); 
       System.out.println("--------------------------------------------------------"); 
     } 

     // Given a Student record, the total score for the student, 
     // and the average total score for all the students, this method 
     // outputs one line in the result table appropriately formatted. 
     private static void outputStudent(Student s, int total, int avg) 
     { 
       System.out.print(s.getName() + "\t"); 
       for(int i = 1; i < 4; i++){ 
         System.out.print(s.getScore(i) + "\t"); 
       } 
       System.out.print(total + "\t"); 
       if(total < avg){ 
         System.out.print("-"); 
       }else if(total > avg){ 
         System.out.print("+"); 
       }else{ 
         System.out.print("="); 
       } 
     } 

     // Given the number of students, this method outputs a message 
     // stating what the total number of students in the class is. 
     private static void outputNumberOfStudents(int n) 
     { 
       System.out.println("The total number of students in this class is: \t" + n); 
     } 

     // Given the average total score of all students, this method 
     // outputs a message stating what the average total score of 
     // the class is. 
     private static void outputAverage(int average) 
     { 
       System.out.println("The average total score of the class is: \t" + average); 
     } 

     // Given the Student with highest total score and the student's 
     // total score, this method outputs a message stating the name 
     // of the student and the highest score. 
     private static void outputMaxStudent(
         Student student, 
         int score 
     ) 
     { 
       System.out.println(student.getName() + " got the maximum total score of: \t" + score); 
     } 

     // Given the Student with lowest total score and the student's 
     // total score, this method outputs a message stating the name 
     // of the student and the lowest score. 
     private static void outputMinStudent(
         Student student, 
         int score 
     ) 
     { 
       System.out.println(student.getName() + " got the minimum total score of: \t" + score); 
     } 
} 
+3

Ich sehe nicht, dass Sie Studenten erklären ..? – Nelson

+0

Drucken Sie die Ausgabe des Compier, wäre es nützlich – OscarRyz

+0

die Hälfte oder mehr der Leute auf SO würde nicht zustimmen, aber es sollte kompilieren die ganze Zeit, wie Sie es geschrieben haben.Eine gute IDE (wie Eclipse oder Netbeans) hätte Ihnen gezeigt, wo der Syntaxfehler war. Wenn Sie Zeit haben und Zeit haben, gehen Sie in einige Werkzeuge. Ich lernte Java mit einem Texteditor und es war eine riesige Zeitverschwendung. –

Antwort

3

Die Größe Ihres Arrays kann nicht auf der linken Seite angegeben werden.

Der Student Array-Deklaration sollte wie folgt aussehen:

int noOfStudents = FileIOHelper.getNumberOfStudents(filename); 
//create an array of students of the given length 
Student[] students = new Student[noOfStudents]; 
1

Dieser Teil sieht ein Problem zu sein:

// Input number of students 
int Student[students] = getStudents(FileIOHelper.getNumberOfStudents(filename)); 

Sie wollen wahrscheinlich zuerst die Anzahl der Studenten bekommen, dann diese Variable verwenden getStudents aufrufen. Wenn das Array Studenten heißen soll, sollte es nicht in Klammern stehen.

Student[] students = ..... 
1

Die Linie, wo Sie Probleme haben, ist die erste Linie an der Spitze der main():

int Student[students] = getStudents(FileIOHelper.getNumberOfStudents(filename)); 

ich immer mit der gleichen Einstellung wie ein Compiler das Lesen durch eine problematische Zeile empfehlen: es Weiß nichts außer dem, was du gesagt hast, von oben nach unten, von links nach rechts.

Also lassen Sie uns am Anfang beginnen:

int 

Ich weiß, was ein int ist! Du willst einen deklarieren! Genial! Bewegen Sie sich auf ...

Student 

Was zum Teufel ist ein Student? Ich sehe nirgendwo in dem Code, der mir sagen würde, was das ist! Als Mensch kann ich daraus schließen, dass es der Name einer Klasse sein soll, da Klassennamen immer in Java groß geschrieben werden, aber nicht deklariert werden, so dass der Compiler nicht sicher sein kann. Ist es vielleicht der Name dieser Klasse (anstelle von Lab7)?

Noch wichtiger, wenn es eine Klasse ist, dann haben Sie gerade zwei Datentypen in einer Zeile benannt: int und Student. Welchen Typ wollten Sie verwenden? Vermutlich, wenn Sie eine Liste von Student s wollen, ist die int überhaupt nicht relevant. Wenn Sie die Nummer von Studenten wollen, dann ist nur der int relevant.

Moving on:

students 

Was zum Teufel ist ein students?Ich sehe wieder nirgendwo in dem Code, der mir sagen würde, was das ist!

Lassen Sie uns für einen Moment zurückgehen. Was versuchst du wirklich hier zu machen? Sie versuchen, ein Array aller Schüler in der Datei zu erhalten. Die getStudents() Funktion erreicht dies vermutlich. (Es kann fehlerhaft sein, aber das ist im Moment nicht unser Problem. Wir rufen es nur hier an, also gehen wir davon aus, dass es funktioniert.)

Aber wie soll man wissen, wie groß das Array ist, wenn hast du es noch nicht gelesen? Praktischerweise müssen Sie nicht wissen! Sie können einfach schreiben:

Student[] 

Sie sind Instanziieren das Array nach unten in getStudents(), und dort haben Sie es richtig eine Größe gegeben. Hier in main() deklarieren Sie es einfach, und keine Größe ist notwendig.

Okay, so können Sie einfach schreiben:

Student[] = getStudents(FileIOHelper.getNumberOfStudents(filename)); 

Nein ‚dazu führen, dass Variable hat keinen Namen. Wie wäre es etwa so:

Student[] students = getStudents(FileIOHelper.getNumberOfStudents(filename)); 

Ich vermute, dass das, was Sie gedacht, aber da Sie irgendwo, es ist wichtig, stecken blieb auf dem Weg zu sein, um „unstuck“ und geistig zu Fuß durch das, was der Compiler sieht, ist ein nützliche Weise, das zu tun.

+0

Das stimmt nur mit einer stark typisierten Sprache. –

+0

Um ... entlang der Zeile "denke wie ein Compiler": Was ist * heck * ein "int Student []" ?? –

+0

Es hilft, denke ich, die richtige Sprache verwendet zu haben. Entsprechend bearbeitet. – VoteyDisciple

5

Zunächst einmal: Es ist immer nützlich, tatsächlich auf den Compilerfehler zu achten. Javas Compier-Fehler sind die meiste Zeit sehr klar und nützlich und sagen Ihnen genau, was falsch ist, wenn Sie erst einmal gelernt haben, sie zu verstehen. Und im Allgemeinen, ist es viel einfacher für Menschen hier auf SO, Ihnen zu helfen, wenn Sie den eigentlichen Text eines Fehlers beinhalten anstatt zu sagen: „Ich Schwierigkeiten haben, es zu Compiler“

Dies ist die erste offensichtlich falsche Zeile:

int Student[students] = getStudents(FileIOHelper.getNumberOfStudents(filename)); 

eine Variablendeklaration in Java besteht aus (etwas vereinfacht):

  • der Typ der variablen
  • seinen Namen
  • o ptionally eine Zuweisung eines Anfangswerts

In der obigen Zeile beginnen Sie mit Typ int, aber der nächste Teil Student[students] macht keinen Sinn - es sieht aus wie ein Array Instanziierung, schon gar nicht ein Name. Was Sie wahrscheinlich gemeint ist:

Student[] students = getStudents(FileIOHelper.getNumberOfStudents(filename)); 

das heißt der Typ Student[] (ein Array von Studenten Objekte), der Name ist ‚Schüler‘, und es ist der Rückgabewert der getStudents() Methode zugeordnet. Ein int ist nirgendwo beteiligt (Sie müssen hier nicht die Größe des Arrays angeben, da es innerhalb der getStudents()-Methode erstellt wird).

+0

Ich war die Hälfte der gleichen Antwort tippen –

+0

Auch bekannt als die "Schnellste Waffe im Westen" Problem :) –

+0

Offensichtlich war es nicht offensichtlich. ;-) –