Attribute, Arrays, Schleifen

Hallo, ich habe ein Problem mit einer Aufgabe. Den Code habe ich bereits, zu meinem besten Können, geschrieben. Kompilieren lässt er sich, bei der Ausführung gibt es jedoch Probleme. Ich werde hier die Aufgabenstellung und meinen Code einfügen:

Implementieren Sie eine Klasse Student. Fügen Sie die Attribute nachname und vorname vom Typ String und matnr vom Typ int hinzu. In dieser Aufgabe sollen die Attribute von außen sichtbar sein.
Testen Sie nun diese Klasse, indem Sie eine weitere Klasse Tub schreiben, die über eine main-Methode verfügt. Gehen Sie dazu wie folgt vor:

• Definieren Sie eine Variable m, welche die Anzahl der Studenten in einem Array repräsentiert. m soll über die Terminal-Klasse eingelesen werden (public static int readInt()).
• Definieren Sie ein Array vom Typ Student[] mit der Länge m.
• Initialisieren Sie nun in einer geeigneten Schleife die Studenten im Array. Die Attribute eines jeden Studenten sollen mithilfe von Benutzereingaben initialisiert werden. Benutzen Sie auch dafür die TerminalKlasse. Führen Sie den Benutzer durch das Programm mithilfe von Konsolenausgaben.
• Geben Sie anschließend die Daten aller Studenten mithilfe einer weiteren Schleife auf der Konsole aus.


Bei der Ausführung wird zunächst nach m gefragt, sobald ich dafür eine Zahl eingebe, endet das Programm und ich werde auf der Konsole nach einer neuen Eingabe gefragt..
Hier mein Code:
[CODE lang="java" title="Code"]public class Tub {

public static void main(String[] args) {

int m = Terminal.readInt();

Student[] SdtArray = new Student [m];

for(int i=0; i>m; i++){

SdtArray = new Student();

String x = Terminal.askString("Wie lautet Ihr Nachname?");

SdtArray.nachname = x;

String y = Terminal.askString("Wie lautet Ihr Vorname?");

SdtArray.vorname = y;

int z = Terminal.askInt("Wie lautet Ihre Matrikelnummer?");

SdtArray.matnr = z;

}

for(int i=0; i>m; i++){

System.out.println(Student.nachname);
}
}
}

class Student {

//Attribute

public static String vorname;

public static String nachname;

public static int matnr;

}[/CODE]

Die Terminal-Klasse beinhaltet mehrere vorgeschriebene Methoden, wie zum Beispiel das Erfragen eines strings oder integers auf der Konsole.
Was muss ich nun ändern, damit die Attribute auf der Konsole erfragt werden und anschließend alle Objekte m mit deren Attributen in einer Schleife ausgegeben werden?
 

M.L.

Top Contributor
An dem Programm ist wohl noch mehr zu reparieren (Terminal.java gibt es z.B. von hier ). Z.B. ist die zu erwartende Eingabe nicht intuitiv und die Ausgabe der Testdaten ist auch fehlerhaft, siehe Screenshot inkl. Variationen im Anhang.
 

Anhänge

  • Tub_Student_Kopie.png
    Tub_Student_Kopie.png
    39,1 KB · Aufrufe: 25
Ok, ich habe nun den wirklich dusseligen Fehler in der Bedingung, den mihe7 erwähnte, behoben. Das Programm lässt sich nun ausführen. Allerdings gibt es, wie M.L. schon anmerkte, das Problem, dass nur die letzte Eingabe m mal ausgeben wird, statt alle Eingaben der Reihe nach. Und ja, ich verstehe tatsächlich nicht, warum und vor allem wie ich static entfernen soll. Wenn ich das nämlich tue, wird ja auch der Fehler "non-static variable cannot be referenced from a static context" angezeigt..
[CODE lang="java" title="tub"]public class Tub {

public static void main(String[] args) {

int m = Terminal.askInt("Wie viele Studenten sollen eingelesen werden?");

Student[] SdtArray = new Student [m];

for(int i=0; i<m; i++){

SdtArray = new Student();

String x = Terminal.askString("Wie lautet der Nachname des Studenten?");

SdtArray.nachname = x;

String y = Terminal.askString("Wie lautet der Vorname des Studenten?");

SdtArray.vorname = y;

int z = Terminal.askInt("Wie lautet die Matrikelnummer des Studenten?");

SdtArray.matnr = z;

}

for(int i=0; i<m; i++){

System.out.println("nachname:" +Student.nachname+ " " + "vorname:" +Student.vorname+ " " + "matrikelnummer:" +Student.matnr);
}
}
}[/CODE]

1608485873202.png
 

temi

Top Contributor
Und ja, ich verstehe tatsächlich nicht, warum und vor allem wie ich static entfernen soll.
Schau mal, ob dir das schon weiterhilft. Ansonsten melde dich noch einmal.
https://www.java-forum.org/thema/boolean-stellt-sich-auf-true.188074/#post-1218268

Und was die Fehlermeldung angeht. Du greifst in deiner Ausgabe direkt auf die Klasse zu. Deshalb benötigst du dazu auch Klassenvariablen. In dem Array sind allerdings Instanzen der Klasse gespeichert (erzeugt mit new Student()). Blöderweise gibt es halt keine Instanzvariablen, d.h. du überschreibst dauernd die Klassenvariablen und es wird darum der letzte Wert angezeigt, der darin gespeichert wurde.
Java:
// anstatt von
for(int i=0; i<m; i++){
    System.out.println("nachname:" +Student.nachname // Student ist die Klasse
              
// brauchst du
for(int i=0; i<m; i++){
    System.out.println("nachname:" +SdtArray[i].nachname // SdtArray ist die Variable mit den Instanzen der Klasse Student

Und halte dich bitte an die Java-Programmierkonventionen: Klassennamen beginnen mit einem Großbuchstaben und Variablennamen mit einem Kleinbuchstaben. In deinem Fall "SdtArray" => "sdtArray" und weil Abkürzungen fast immer Scheiße sind: "studentArray" oder "students".
 
Zuletzt bearbeitet:
In Ordnung, ich meine es nun zu verstehen. Static macht aus einer Instanzvariablen also eine Klassenvariable, wodurch jeder Wert gleich ist und die Attribute auch nur ein mal existieren können, wodurch sie bei jeder neuen Eingabe überschrieben werden?

Zum zweiten Punkt: Die Aussage System.out.println("nachname:" +Student.nachname) geschieht also in einem statischen Kontext (Klassenvariable).. "Student.nachname" greift auf die komplette Klasse zu und der Fehler wird angezeigt, da die Variable "nachname" nicht mehr statisch ist? Man nutzt also den Array, um auf jede einzelne Instanz i zuzugreifen, statt auf die gesamte Klasse?
 

temi

Top Contributor
In Ordnung, ich meine es nun zu verstehen. Static macht aus einer Instanzvariablen also eine Klassenvariable, wodurch jeder Wert gleich ist und die Attribute auch nur ein mal existieren können, wodurch sie bei jeder neuen Eingabe überschrieben werden?
Ja, eine Klassenvariable existiert nur einmal für die Klasse (die gibt es ja auch nur einmal). Sie hat aber auch in jeder Instanz von dieser Klasse den selben Wert.
Die Aussage System.out.println("nachname:" +Student.nachname) geschieht also in einem statischen Kontext (Klassenvariable).. "Student.nachname" greift auf die komplette Klasse zu und der Fehler wird angezeigt, da die Variable "nachname" nicht mehr statisch ist? Man nutzt also den Array, um auf jede einzelne Instanz i zuzugreifen, statt auf die gesamte Klasse?
Student.nachname greift auf die Klassenvariable zu (sie ist ja statisch deklariert) SdtArray[i].nachname wäre zwar prinzipiell der Zugriff auf eine Instanzvariable, aber die gibt es ja nicht. Darum ist es wieder der Zugriff auf die Klassenvariable, auch wenn er diesmal über die Instanz erfolgt.

Das Array dient einfach dazu mehrere Instanzen von Student zu speichern.
Java:
// zwei Studenten in zwei Variablen

Student student_0 = new Student();
Student student_1 = new Student();

student_1.einschreiben();

// und in einem Array für zwei Studenten

Student[] studenten = new Student[2];
studenten[0] = new Student();
studenten[1] = new Student();

studenten[1].einschreiben();
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand XML desializing Attribute bringt nicht erwartetes Ergebnis Allgemeine Java-Themen 16
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
L xml node mit attribute auslesen Allgemeine Java-Themen 2
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
D JSF Bean Attribute bei Seitenaufruf Allgemeine Java-Themen 6
C Attribute aus HTML Tags auslesen Allgemeine Java-Themen 6
B Mp3-Attribute auslesen & beschreiben Allgemeine Java-Themen 6
M PDF Drucker-Attribute hinterlegen Allgemeine Java-Themen 3
E Finale Attribute und Konstruktor Allgemeine Java-Themen 3
T [htmlparser.sourceforge.net] Attribute extrahieren Allgemeine Java-Themen 3
T Namenskonventionen für Objekt-Attribute Allgemeine Java-Themen 12
J Attribute eines Objekts in ByteArray Allgemeine Java-Themen 3
I Attribute in Textfile auslesen Allgemeine Java-Themen 13
G [JDK 6u2] - JAR Failed to load Main-Class manifest attribute Allgemeine Java-Themen 6
E Attribute in Interfaces möglich? Allgemeine Java-Themen 17
MQue Button Attribute setzen Allgemeine Java-Themen 14
F JSP XML ATTRIBUTE Allgemeine Java-Themen 2
H Nullpointer exception, Attribute in Label schreiben? Allgemeine Java-Themen 4
L Alle Attribute eines Source-Files auslesen Allgemeine Java-Themen 2
J Attribute beim Drucken ändern/ausstellen Allgemeine Java-Themen 8
A Dynamisch Attribute hinzufügen Allgemeine Java-Themen 3
B Zugriff auf Attribute/Methoden der init-Klasse Allgemeine Java-Themen 10
Ü Arrays vergleichen Allgemeine Java-Themen 59
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Ü Eurobeträge in möglichst wenig Scheine/Münzen zerlegen (2D-Arrays) Allgemeine Java-Themen 27
Buroto Arrays generator Allgemeine Java-Themen 10
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
P Generics und Arrays Allgemeine Java-Themen 6
O Arrays an DOCX-Stamper Library übergeben Allgemeine Java-Themen 1
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
R Spalten/Zeilen verschieben in zweidimensionalen Arrays? Allgemeine Java-Themen 3
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
W Spaß mit Arrays Allgemeine Java-Themen 1
W Reflexion und Arrays Allgemeine Java-Themen 7
S Problem mit Arrays Allgemeine Java-Themen 1
D Erste Schritte Arrays vergleichen und die zahlen die nur einmal vorkommen ausgeben Allgemeine Java-Themen 5
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
Neoline Interpreter-Fehler Probleme mit Arrays.toString Allgemeine Java-Themen 7
H Zweidimensionale Arrays Allgemeine Java-Themen 6
Neoline Methoden Zwei Arrays abwechselnd zusammenführen Allgemeine Java-Themen 15
J Methoden clone(), arraycopy(): ein- und zweidimensionale Arrays Allgemeine Java-Themen 8
D Übereinstimmungen in Arrays Allgemeine Java-Themen 5
B Arrays mit Text und Zahlen füllen Allgemeine Java-Themen 3
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
J Arrays auf gleichheit untersuchen funktioniert nicht Allgemeine Java-Themen 11
N 2 Arrays abwechselnd verbinden Allgemeine Java-Themen 13
J private and arrays Allgemeine Java-Themen 2
T Alle Kombinationen aus zwei Arrays Allgemeine Java-Themen 8
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
C Zweidimensionale Arrays - Quadratisch? Allgemeine Java-Themen 4
AssELAss Zwei Arrays / ArrayLists inhaltlich vergleichen Allgemeine Java-Themen 2
A Lineare Interpolation mit zwei Arrays Allgemeine Java-Themen 4
S Datentypen Warum ist bei Arrays die Länge als Property aufrufbar? Allgemeine Java-Themen 1
Dechasa Vergleichen von zwei Arrays Allgemeine Java-Themen 4
DanielsLPecke Java Arrays an andere Java Programme schicken und zurück Allgemeine Java-Themen 5
H Arrays Allgemeine Java-Themen 4
J NullPointerExeption bei Inizialisierung eines Arrays Allgemeine Java-Themen 3
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
B automatisch benannte arrays erstellen Allgemeine Java-Themen 9
Y inhalte aus 2 unterschiedlichen Arrays miteinander vergleichen Allgemeine Java-Themen 12
M Arrays.sort Problem Allgemeine Java-Themen 2
F Arrays Allgemeine Java-Themen 2
F Arrays Allgemeine Java-Themen 4
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
F mehrdimensionale Arrays Allgemeine Java-Themen 4
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
S Java Problem bei der Rückgabe eines Arrays Allgemeine Java-Themen 19
I Verschiedene Arrays auslesen Allgemeine Java-Themen 6
R Wie kann man diese Methoden in arrays etablieren? Allgemeine Java-Themen 8
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
C Best Practice Tiefe Kopie eines Arrays unbekannter Dimension und unbekannten Typs Allgemeine Java-Themen 4
R kann man irgendwie mit Arrays mit Eingabefenstern und Schleifen Werte abklappern? Allgemeine Java-Themen 2
R Was los mit dieser Aufgabe? Arrays mit Schachbrettmustern? Allgemeine Java-Themen 10
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
K Methoden Arrays auf true Werte prüfen Allgemeine Java-Themen 4
T String Arrays aus den Argumenten auslesen Allgemeine Java-Themen 3
E ArrayIndexOutOfBounds - mehrdimensionale Arrays Allgemeine Java-Themen 6
D Arrays überschreiben sich Allgemeine Java-Themen 2
C Klonen von Arrays/ Matrizenrechnung Allgemeine Java-Themen 2
K Mehrere Arrays auf einmal erstellen Allgemeine Java-Themen 2
P Arrays erzeugen Allgemeine Java-Themen 5
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
S Variablen Dynamische Arrays Allgemeine Java-Themen 2
O Variablen System.getenv: Sinnlose Werte, Arrays?! Allgemeine Java-Themen 6
C Arrays.asList() - Problem Allgemeine Java-Themen 3
M problem mit speicherbedarf von arrays Allgemeine Java-Themen 14
B Generics und primitve arrays Allgemeine Java-Themen 6
V Umbennen von Arrays Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
A Frage zu Arrays Allgemeine Java-Themen 6
S Werte aus 2 eindimensionale boolean arrays mithilfe von logischen operatoren berechnen Allgemeine Java-Themen 6
R Methoden Rückgabe Arrays aufangen Allgemeine Java-Themen 29
T Arrays erstellen Allgemeine Java-Themen 3
C Zwei Arrays vereinen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben