Datenverarbeitung mit Ausgabe

F.lol

Mitglied
Ich habe als Aufgabe gestellt bekommen, ein Array zu erstellen, in das ich die Daten eines Studenten einlese und abspeichere und am Ende wieder ausgebe.
Zuvor soll ich noch die Anzahl der Studenen (also die Länge des Array festlegen)
ich hab das ganze jetzt mal so gelöst:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Studenten {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws IOException {
		BufferedReader reader = new BufferedReader(new
                InputStreamReader(System.in));
                System.out.print("Bitte geben Sie die Anzahl der Studenten ein ....: ");
                String StringA = reader.readLine();
                int Anzahl = Integer.parseInt(StringA);
                Student [] StudentArray;
                StudentArray = new Student [Anzahl];
                for (int i= 0;i<Anzahl;i++)
                {
                BufferedReader reader1 = new BufferedReader(new
                InputStreamReader(System.in));
                System.out.print("Bitte geben Sie den Vornamen des Studenten ein ....: ");
                String Vorname = reader.readLine();
                BufferedReader reader2 = new BufferedReader(new
                InputStreamReader(System.in));
                System.out.print("Bitte geben Sie den Nachnamen des Studenten ein ....: ");
                String Nachname = reader.readLine();
                BufferedReader reader3 = new BufferedReader(new
                InputStreamReader(System.in));
                System.out.print("Bitte geben Sie die Matrikelnummer des Studenten ein ....: ");
                String Matrikel = reader.readLine();
                //Aufrufen der Klasse Student
                Student student =new Student (Vorname, Nachname, Matrikel);
                StudentArray[i]= student;
                }
                //Aufrufen der Methode "ausgeben"
                Student.GetFullName(Student student)
                
                
                
	}

}

class Person
{
	public String Vorname;
	public String Nachname;
	public Person (String Nachname, String Vorname)
	{
		this.Vorname = Vorname;
		this.Nachname = Nachname;
	}
	public String getFullName ()
	{
		return Vorname + " " + Nachname;
	}
}
	

class Student extends Person
{
	public String Matrikel;
	
	public Student(
			String Nachname,
			String Vorname,
			String Matrikel)
	{
		super (Nachname, Vorname);
		this.Matrikel = Matrikel;
	}
	public void GetFullName(studentArray [Anzahl]) 
	{
		System.out.println(StudentArray [1]);
	}
}

irgendwie stimmt aber noch irgendwas mit der Speicherung der Daten in das Array bzw. mit deren Ausgabe nicht. Ich kann die Methode "GetFullName" nicht aufrufen. Dabei versteh ich auch noch nicht so ganz welche Werte ich hier übergeben soll.
Also ich Instanziiere den Studenten als Erweiterung der Klasse "Person" lese dann genau so oft Daten ein, wie ich Studenten habe und speicher sie in ein Array mit der Größe [Anzahl]
Aber wie gebe ich denn dann aus, was ich eingelesen habe? :-/
Die Ausgabe soll UNBEDINGT in einer eigenen Methode passieren nicht einfach mit "system.out.Println" nach der Instanziierung.
 
Zuletzt bearbeitet:
1.
irgendwie stimmt aber noch irgendwas mit der Speicherung der Daten in das Array bzw. mit deren Ausgabe nicht. Ich kann die Methode "GetFullName" nicht aufrufen. Dabei versteh ich auch noch nicht so ganz welche Werte ich hier übergeben soll.

2.
Also ich Instanziiere den Studenten als Erweiterung der Klasse "Person" lese dann genau so oft Daten ein, wie ich Studenten habe und speicher sie in ein Array mit der Größe [Anzahl]
Aber wie gebe ich denn dann aus, was ich eingelesen habe? :-/

3.
Die Ausgabe soll UNBEDINGT in einer eigenen Methode passieren nicht einfach mit "system.out.Println" nach der Instanziierung.

Zu 1:
GetFullName (Methoden sollten eigentlich klein Anfangen, genauso wie Variablen) soll dir den Vor und Nachnamen einer Person (Student) die du übergibst ausgeben.

Zu 2:
Hier mal nen bissl Pseudo-Code:
Java:
for Jedes Element in der Studentenliste:
       return den vollen Namen
       return die Matrikelnummer des Studenten

Zu 3:
Dann schreib doch ne Funktion wie printStudentenDaten
Die den aktuellen Studenten wiedergibt.
 
du postest 30 Zeilen irrelevanten Einlese-Code, obwohl du nicht eine ganz normale Methode eines ganz normalen Objektes aufrufen kannst?
da wäre ein etwas kürzeres Beispiel doch dasselbe Problem, selbst das Array spielt bisher nicht unbedint eine Rolle, nur
einen Dummy-Studenten erstellen + Methode aufrufen, das wäre schon ein Erfolg

------

Tipp:
Java:
Student.GetFullName(Student student)
ist falsch wie du sicher weißt,
zum Vergleich ein Beispiel welches du schon hinbekommen hast (jetzt doch der Einlese-Code interessant 😉 )

du schreibst
Java:
reader.readLine();
zum Aufruf der readLine()-Methode im reader, und nicht
Java:
BufferedReader.readLine(BufferedReader reader)
siehst du die Analogie?

Methoden übrigens unbedingt klein schreiben
 
Dass eine Instanz einer Klasse (in Deinem Fall Personen oder Studenten) die in ihr gespeicherten Daten als String ausgibt, ist eine sehr sinnvolle Funktion. Dafür wird i.d.R. die toString()-Methode überschrieben. Dass solltest du für Person und Student auch tun. ICh denke, dass das die Quitnessenz der Anforderung ist, die Ausgabe in einer eigenen Methode zu machen. Euer Dozent wollte bestimmt darauf hinaus, dass man für sowas in Java die toString()-Methode überschreibt

Bei Deiner Methode GetFullName in Student weiß ich jetzt anhand des Codes nicht so genau, was sie machen soll. Du definierst einen Array als Parameter (sieht jedenfalls so aus, als hättest Du das gewollt). Das sieht danach aus, als würdest Du die Daten des ganzen Arrays ausgeben lassen wollen. Der Code im Rumpf und der Aufruf in Zeile 38 Deiner main sehen aber mehr danach aus, als sollten die Daten nur eines Studenten ausgegeben werden.

Ich denke mal, nachdem eine überschriebene toString()-Methode schon die Datene eines einzelnen Studenten ausgibt, hat eine Methode GetFullName, die dasselbe tut, nicht wirklich einen Mehrwert. Ich würde also für eine Methode printStudentData(Student[] studenten) plädieren. Das übergebene Array iterierst Du durch und gibtst für jeden einzelnen Studenten das Ergebnis der toString()-Methode aus.
 
Zuletzt bearbeitet von einem Moderator:
Der Code im Rumpf und der Aufruf in Zeile 38 Deiner main sehen aber mehr danach aus, als sollten die Daten nur eines Studenten ausgegeben werden.

So wars auch gedacht. Also z.B. gebe ich den 3. Studenten aus wenn ich zuvor eine Eingabe einbaue in der ich dann 3 eingebe und dann spuckt mir das Programm den 3. Studenten aus mit Vor- und Nachname und der Matrikelnummer.
 
So wars auch gedacht. Also z.B. gebe ich den 3. Studenten aus wenn ich zuvor eine Eingabe einbaue in der ich dann 3 eingebe und dann spuckt mir das Programm den 3. Studenten aus mit Vor- und Nachname und der Matrikelnummer.

das müsste dann so aussehen:
Java:
studentenListe[wunschAusgabe].GetFullName();
//oder halt
Student.GetFullName(studentenListe[wunschAusgabe]);
 
das müsste dann so aussehen:
Java:
studentenListe[wunschAusgabe].GetFullName();
//oder halt
Student.GetFullName(studentenListe[wunschAusgabe]);

dann spuckt mit die Konsole sowas aus: "Student@1e5e2c3"
bzw. wie funktioniert denn die toString() Methode?
Also ich habs jetzt so gemacht wenn ichs richtig verstanden hab:
Java:
 Student.getFullName(StudentArray[1]);
.
.
.
public static void getFullName(Student student) 
	{
	System.out.println(student);
            }
aber das klappt gar net. Da gibt er (wahrscheinlich) nur den Array Rechenwert aus und nicht die darin gespeicherten Strings.
Wie krieg ich denn alle drei Strings aus dem einen Array und verpacke sie als eins?
 
die statische Methode scheint überhaupt nicht geeignet, schaue dir doch das funktionierende getFullName() der Klasse Person an
 
gut jetzt hab ich meine Ausgabe Methode der angepasst, die in der Klasse Person steht. Jetzt funktioniert aber der Aufruf wieder nimmer...
Wie soll denn der Aufruf aussehen???
So gehts scheinbar net:
Java:
  student.getFullName(StudentArray[1]);
.
.
.
.
public String getFullName ()
    {
        return Vorname + " " + Nachname + " " + Matrikel;
    }
 
Lass uns Dein Gesamtproblem bitte in Teilschritten angehen. Der erste Teilschritt ist, eine standardisierte Form zu finden, mit der eine Instanz die in ihr gespeicherten Werte als String ausgibt. Dazu wird (ich wiederhole mich) die toString()-Methode überschrieben. Die Begriffe "Java toString überschreiben" sollten Dir bei google genug Anregungen geben. Wenn Du das hast, poste zur Kontrolle den Code und wir machen mit dem Zugriff auf Array-Elemente weiter...

P.S. "Student@1e5e2c3" sowas kommt raus, wenn man die toString()-Methode nicht überschrieben hat.
 
Lass uns Dein Gesamtproblem bitte in Teilschritten angehen. Der erste Teilschritt ist, eine standardisierte Form zu finden, mit der eine Instanz die in ihr gespeicherten Werte als String ausgibt. Dazu wird (ich wiederhole mich) die toString()-Methode überschrieben. Die Begriffe "Java toString überschreiben" sollten Dir bei google genug Anregungen geben. Wenn Du das hast, poste zur Kontrolle den Code und wir machen mit dem Zugriff auf Array-Elemente weiter...

P.S. "Student@1e5e2c3" sowas kommt raus, wenn man die toString()-Methode nicht überschrieben hat.

Ich muss ehrlich sein...ich hab in meinem Leben noch NIE irgendwas mit dieser Methode anfangen können bzw. zu tun gehabt...von Überschreibungen ganz zu schweigen. Deswegen bin ich von den Google treffern mehr als nur überfordert...
ich hab ja net mal ne Ahnung was diese toString Methode überhaupt kann bzw. was man da überschreiben kann und wie das überhaupt geht.. 🙁
Da ich auch in der Vorlesung von sowas noch nie gehört habe bin ich grade am zweifeln, ob wir sowas überhaupt tun solln oder ob das net anders geht...aber ich les mal weiter JAVA-Tutorials.. :-/
 
du könntest zurück zur getFullName-Lösung gehen, die ist fast fertig, du musst nur noch überlegen was mit den Parametern passieren soll,
dafür lohnt sich nun wirklich irgendwas nachzulesen denn ohne eine einzige Methode definieren und aufzurufen zu können kann man in Java praktisch nichts machen
 
du könntest zurück zur getFullName-Lösung gehen, die ist fast fertig, du musst nur noch überlegen was mit den Parametern passieren soll,
dafür lohnt sich nun wirklich irgendwas nachzulesen denn ohne eine einzige Methode definieren und aufzurufen zu können kann man in Java praktisch nichts machen

Soweit so gut: Also wenn ich ne Methode aufrufe muss ich beim Aufruf den Wert in die Klammer setzen also
Java:
student.getFullName(StudentArray[0])
weil ich ja die gespeicherten Daten an der z.B. 0ten Stelle des Arrays haben will. Die sind ja laut Definition vom Typ "Student"
Java:
Student [] StudentArray;
StudentArray = new Student [Anzahl];
in der Methode selber muss ich sie mit ihrem Typ definieren und hier liegt mein Problem...
das wäre dann ja
Java:
public String getFullName (Student StudentArray)
    {
        return Vorname + " " + Nachname + " " + Matrikel;
    }
wobei wir das, was er aus dem Array herausließt, als String speichern. Deswegen ja der Rückgabetyp "String"...Aber das läuft net...
Die Konsole lässt mich einlesen und knallt dann mit...
"Exception in thread "main" java.lang.NullPointerException
at Studenten.main(Studenten.java:36)"
....Ab.
 
Noch ne Kleinigkeit...ist dir aufgefallen,dass du manche Variablen gar nicht benutzt? 😉
Die Initialisierung von reader1,reader2 und reader3 kannst du dir eigentlich sparen.
 
puh, damit wirfst du wieder so viele andere Dinge auf, da ist 'fast fertig' wohl übertrieben gewesen,

das Programm ist viel zu hoch für dich, ob du musst oder selber willst, es bringt nichts das anzufangen wenn du nicht eine einzige Methode korrekt implementieren kannst,
jeder 5.-Klässler lernt erstmal 2 Zahlen zu addieren, fängt nicht gleich mit Integralrechnung an,
ein Ding lernen, beherrschen oder zumindest auf irgendeine Weise verstehen, dann vielleicht erst zum nächsten wechseln,


zwei Beispiele fallen mir gerade besonders auf:

du definierst an einer Stelle
> Student [] StudentArray;
ok,

in der Methode steht dann
> public String getFullName (Student StudentArray)

StudentArray ist hier ein einfacher Student, kein Array, obwohl du vorher bzw. an anderer Stelle StudentArray als Array von Student deklariest,
siehst du den Widerspruch? mit solch strukturellen Fehlern (hier kein Java-Fehler sondern einfach nur komisch/ schlecht benannt)
gehen alle Grundlagen flöten

Variablen bzw. Parameter schreibt man sowieso klein,
> Student s;
> Student st;
> Student student;
wären alles denkbare Variablennamen, aber nenne keine Variable 'Array' wenn sie kein Array ist?!

------------

der zweite Punkt:
Java:
public String getFullName (Student StudentArray)
    {
        return Vorname + " " + Nachname + " " + Matrikel;
    }
wozu brauchst du hier überhaupt den Parameter?
was würde sich ändern wenn du ihn wegläßt, mal abgesehen davon dass es beim Aufruf vielleicht eine Fehlermeldung gibt?
ein Parameter muss immer einen Sinn haben, insbesondere in der Methode verwendet werden,
hier gibst du doch nur Attribute des eigenen Objektes aus, dafür braucht es gar keine Parameter

-------

ich nehme nicht an dass du alles verstehst was ich gerade geschrieben habe,
ich rate dir dein Programm einfacher anzufangen, lasse das Einlesen und das Array mit Indexen usw. weg,
erstelle nur einen Dummy-Studenten mit Namen "test" usw. und versuche den auszugeben,
das wäre wie früher schon mal geschrieben ein Riesenerfolg

die NullPointerException tritt der Fehlermeldung nach in der main-Methode in Zeile 36 auf,
vielleicht ist die Variable student dort null
 
ich weiß selber, dass ich mit dem Programm vollends überfordert bin. Hab ich ja auch selbst zugegeben. Leider eigne ich mir Java ja auch nicht aus Langeweile an, sondern weil ich es so schnell wie möglich können muss....
und wenn mir nach 3 Vorlesungen so eine Aufgabe gestellt wird, dann schmeiß ich mich drüber, egal wie viel ich bisher kann..wenn du verstehst was ich meine.. :-/
ich muss ehrlich sagen, dass ich noch NIE mit Arrays gearbeitet habe sondern nur mit so simplen Sachen wie Objekte addieren und so n Kram aber Arrays sind mir mit der Arbeitsanweisung doch noch ein bisschen suspekt und das was jetzt da im Programms steht, ist mehr oder weniger das, was ich mir aus 10 verschiedenen Tutorials zusammengepuzzelt habe 🙁
und weil ich den überblick verloren habe, was denn jetzt wo passt und wo nicht, hab ich ja um hilfe gebeten...nicht weil ich zu faul bin, es zu lernen, sondern weil ich ohne Übung NULL überblick über die Sache habe und mal auf Fehlersuche in meinem Programm gehen wollte... :-/
 
und ich sage dir selbst wenn in 10 sec die Bombe explodiert macht es keinen Sinn 15 Drähte und 4 Schneidewerkzeuge gleichzeitig bedienen zu wollen,
konzentriere dich auf einen Draht bzw. hier auf einfache Dinge,
solange du dir nicht in Ruhe anschaust, was eine Methode ist, was ein Objekt ist usw. ist alle Zeit, die du in höheres investierst weitgehend verschwendet

dass du die Aufgaben machen musst ist klar, aber mache sie geschickt, lerne auch was dabei!
-> erst Grundlagen, was eine Methode ist ist mit das wichtigste,
solange du gleichzeitig überlegst wo wohl das Array und irgendein Index hingehört, denkst du über die Methode gar nicht nach..
 

Neue Themen


Zurück
Oben