der2of6
20-04-2006, 14:16
Hi,
ich hab hier eine Aufgabe, bei der ich Einfach nicht weiterkomme.
Ist es ist eine kleine Studentenverwaltung, die in einer verketteten Liste gespeichert wird.
Der letze Teil der Aufgabe ist, die Liste zu durchsuchen und den ältesten Studenten auszugeben.
Ich bekomme zwar eine Ausgabe, aber die ist nicht der älteste:
Hier die Klassen: (teils um die unwichtigen Dinge gekützt)
Der Fette Teil ist mein Code.
Der Reste des Codes soll nicht verändert werden, das hinzufügen ist aber erlaubt.
In der ListElem geht er rekursiv durch die Liste durch und übergibt das alter auch immer richtig, das abschließende return am schluss jedoch gibt nicht den ältesten studenten zurück.
Hab ich da was übersehen? :confused:
Ich hoffe mir kann jemand helfen
Listenaufgabe.java
// Listenaufgabe.java
//
// Einstiegsaufgabe, zeigt Einsatz rekursiver Datenstrukturen (Liste)
//
// ...(name), ...(datum)
//
import java.io.*;
public class Listenaufgabe {
public static void main(String[] args) throws IOException {
Liste studlist;
BufferedReader stdin;
ListElem current_element;
...
//Eingabe
current_element = new ListElem(new Student(n, v, m, a, s));
studlist.insert(current_element);
}
// gib zur Kontrolle die Liste aller Datensaetze aus:
System.out.println();
System.out.println("Alle Studenten (Liste):");
studlist.print();
// gib aeltesten Student aus:
System.out.println();
System.out.println("Aeltester Student:");
#########################################
studlist.aeltester().print();
} // end main
} // end class Listenaufgabe
Student
public class Student {
...
public int getAlter() {
public String getName() {
public Student() {
this.name = null;
this.vorname = null;
this.martikelnr = null;
this.alter = 0;
this.semester = 0;
}
....
public void print() {
System.out.println("Name, Vorname: " + this.name + " " + this.vorname);
System.out.println("Martikelnummer: " + this.martikelnr + " Alter: "
+ this.alter);
System.out.println("Semester: " + this.semester);
}
}
// End Klasse Student
// Liste.java
// Definition einer Liste (gehoert zu Listenaufgabe.java)
public class Liste {
// Teil 1: Attribute (="Eigenschaften")
private ListElem head; // Anker (=Listenkopf) fuer das erste Listenelement
// Teil 2: Konstruktor(en) (=Vorbesetzung der Eigenschaften +
// "Geburtsverhalten")
public Liste() {
head = null; // Liste ist anfangs leer
}
// Teil 3: Methoden (="Verhalten")
public void insert(ListElem el)
// einfuegen des Elements el am Ende der Liste
{
if (head == null)
head = el;
else
head.insert(el);
}
public void print()
// ausgeben der Liste
{
if (head == null)
System.out.println("Liste ist leer!");
else
head.print(); // Aufgabe an Klasse Listelem weitergeben
}
public void setHead(ListElem h)
// Besetzung des von aussen nicht zugaenglichen Attributs
{
head = h;
}
public ListElem getHead()
// Lieferung des von aussen nicht zugaenglichen Attributs
{
return head;
}
// Hier ggf. zusaetzliche Methoden ergaenzen!
public Student aeltester() {
Student alt = null;
alt = head.aeltester(0, head.getElement());
return alt;
}
} // end class Liste
// ListElem.java
// Definition eines Listenelements (gehoert zu Listenaufgabe.java)
public class ListElem {
// Teil 1: Attribute (="Eigenschaften")
private Student element;
private ListElem next;
// Teil 2: Konstruktor(en) (=Vorbesetzung der Eigenschaften +
// "Geburtsverhalten")
public ListElem(Student e) {
element = e;
next = null;
}
// Teil 3: Methoden (="Verhalten")
public void insert(ListElem el)
// einfuegen eines Elements am Ende der Liste
{
if (next == null) {
// einfache Loesung im Trivialfall
next = el;
} else {
// ansonsten rekursive Weitergabe der Aufgabe
next.insert(el);
}
}
public void print()
// ausdrucken der kompletten Liste
{
element.print();// ausdrucken des (ersten) Elements (der Liste)
if (next != null)
next.print(); // rekursiver Aufruf mit Listenrest
}
public Student getElement()
// Lieferung des von aussen nicht zugaenglichen Attributs
{
return element;
}
public ListElem getNext()
// Lieferung des von aussen nicht zugaenglichen Attributs
{
return next;
}
// Hier ggf. zusaetzliche Methoden ergaenzen!
public Student aeltester(int a, Student b) {
Student tmp = b;
int i;
int alter = a;
if (this.element.getAlter() > alter) {
alter = this.element.getAlter();
tmp = this.getElement();
}
if (next != null) {
if (next.element.getAlter() > alter) {
alter = next.element.getAlter();
tmp = next.getElement();
next.aeltester(alter, tmp);
} else {
next.aeltester(alter, tmp);
}
}
return tmp;
}
} // end class ListElem
ich hab hier eine Aufgabe, bei der ich Einfach nicht weiterkomme.
Ist es ist eine kleine Studentenverwaltung, die in einer verketteten Liste gespeichert wird.
Der letze Teil der Aufgabe ist, die Liste zu durchsuchen und den ältesten Studenten auszugeben.
Ich bekomme zwar eine Ausgabe, aber die ist nicht der älteste:
Hier die Klassen: (teils um die unwichtigen Dinge gekützt)
Der Fette Teil ist mein Code.
Der Reste des Codes soll nicht verändert werden, das hinzufügen ist aber erlaubt.
In der ListElem geht er rekursiv durch die Liste durch und übergibt das alter auch immer richtig, das abschließende return am schluss jedoch gibt nicht den ältesten studenten zurück.
Hab ich da was übersehen? :confused:
Ich hoffe mir kann jemand helfen
Listenaufgabe.java
// Listenaufgabe.java
//
// Einstiegsaufgabe, zeigt Einsatz rekursiver Datenstrukturen (Liste)
//
// ...(name), ...(datum)
//
import java.io.*;
public class Listenaufgabe {
public static void main(String[] args) throws IOException {
Liste studlist;
BufferedReader stdin;
ListElem current_element;
...
//Eingabe
current_element = new ListElem(new Student(n, v, m, a, s));
studlist.insert(current_element);
}
// gib zur Kontrolle die Liste aller Datensaetze aus:
System.out.println();
System.out.println("Alle Studenten (Liste):");
studlist.print();
// gib aeltesten Student aus:
System.out.println();
System.out.println("Aeltester Student:");
#########################################
studlist.aeltester().print();
} // end main
} // end class Listenaufgabe
Student
public class Student {
...
public int getAlter() {
public String getName() {
public Student() {
this.name = null;
this.vorname = null;
this.martikelnr = null;
this.alter = 0;
this.semester = 0;
}
....
public void print() {
System.out.println("Name, Vorname: " + this.name + " " + this.vorname);
System.out.println("Martikelnummer: " + this.martikelnr + " Alter: "
+ this.alter);
System.out.println("Semester: " + this.semester);
}
}
// End Klasse Student
// Liste.java
// Definition einer Liste (gehoert zu Listenaufgabe.java)
public class Liste {
// Teil 1: Attribute (="Eigenschaften")
private ListElem head; // Anker (=Listenkopf) fuer das erste Listenelement
// Teil 2: Konstruktor(en) (=Vorbesetzung der Eigenschaften +
// "Geburtsverhalten")
public Liste() {
head = null; // Liste ist anfangs leer
}
// Teil 3: Methoden (="Verhalten")
public void insert(ListElem el)
// einfuegen des Elements el am Ende der Liste
{
if (head == null)
head = el;
else
head.insert(el);
}
public void print()
// ausgeben der Liste
{
if (head == null)
System.out.println("Liste ist leer!");
else
head.print(); // Aufgabe an Klasse Listelem weitergeben
}
public void setHead(ListElem h)
// Besetzung des von aussen nicht zugaenglichen Attributs
{
head = h;
}
public ListElem getHead()
// Lieferung des von aussen nicht zugaenglichen Attributs
{
return head;
}
// Hier ggf. zusaetzliche Methoden ergaenzen!
public Student aeltester() {
Student alt = null;
alt = head.aeltester(0, head.getElement());
return alt;
}
} // end class Liste
// ListElem.java
// Definition eines Listenelements (gehoert zu Listenaufgabe.java)
public class ListElem {
// Teil 1: Attribute (="Eigenschaften")
private Student element;
private ListElem next;
// Teil 2: Konstruktor(en) (=Vorbesetzung der Eigenschaften +
// "Geburtsverhalten")
public ListElem(Student e) {
element = e;
next = null;
}
// Teil 3: Methoden (="Verhalten")
public void insert(ListElem el)
// einfuegen eines Elements am Ende der Liste
{
if (next == null) {
// einfache Loesung im Trivialfall
next = el;
} else {
// ansonsten rekursive Weitergabe der Aufgabe
next.insert(el);
}
}
public void print()
// ausdrucken der kompletten Liste
{
element.print();// ausdrucken des (ersten) Elements (der Liste)
if (next != null)
next.print(); // rekursiver Aufruf mit Listenrest
}
public Student getElement()
// Lieferung des von aussen nicht zugaenglichen Attributs
{
return element;
}
public ListElem getNext()
// Lieferung des von aussen nicht zugaenglichen Attributs
{
return next;
}
// Hier ggf. zusaetzliche Methoden ergaenzen!
public Student aeltester(int a, Student b) {
Student tmp = b;
int i;
int alter = a;
if (this.element.getAlter() > alter) {
alter = this.element.getAlter();
tmp = this.getElement();
}
if (next != null) {
if (next.element.getAlter() > alter) {
alter = next.element.getAlter();
tmp = next.getElement();
next.aeltester(alter, tmp);
} else {
next.aeltester(alter, tmp);
}
}
return tmp;
}
} // end class ListElem