verkettete Liste auslesen

Status
Nicht offen für weitere Antworten.

MarkusU

Mitglied
Hallo!

Ich habe folgendes Problem bei einer Programmieraufgabe:

In einer verketten Liste sind Objekte meiner Klasse Geschenk gespeichert. Diese Klasse enthält u.a. den Namen des Kindes, für die das Geschenk (als String) ist, sowie den Wert des Geschenks (als float) und einen Verweis auf den Nachfolger in der Liste.

Nun soll ich eine rekursive Methode in einer Klasse Beutel schreiben, die ausgibt, wie viele Geschenke jedes einzelne Kind bekommt. (Klasse Beutel (damit ist der Beutel des Nikolaus gemeint => es weihnachtet :) enthält die Referenzvariable auf das erste Glied einer Liste von Geschenken)


Und da liegt das Problem: Ich muss ja zuerst irgendwie berechnen, wie viele Geschenke jedes Kind bekommt, d.h. die Liste durchlaufen und dann die Information "extern" speichern, da ich am Anfang der Liste ja noch nicht weiß, wie oft ein bestimmtes Kind später in der Liste noch auftaucht und ein Geschenk bekommt.

Ich habs mit nem Array versucht (bzw. mit 2 Arrays, einen vom Typ String für die Namen der Kinder und einem vom Typ float für den Wert des Geschenks => sehr schlechter Programierstil), aber das funktioniert nicht (Wo und wie (static?) müsste ich diesen Array anlegen -> innerhalb der Methode geht nicht, da die Methode rekursiv ist, in der Klasse mit static funktionierts auch nicht)

Oder gibts einen ganz anderen (saubereren) Lösungsansatz ohne Array / Zwischenspeichern??

Ich hoffe jemand hat das Problem verstanden :)

Danke schonmal für die Antworten !!


Gruß,

Markus

Code:
public class Geschenk
{
	String kind;
	float wert;
	Geschenk nf;
}


Code:
class Beutel
{
	Geschenk untenimbeutel;	// verweist auf das erste Objekt der Liste
   
       void gibKinderunddieAnzahlderenGeschenkeaus()
       {
       // ???
       }
}
 
M

maki

Gast
In einer verketten Liste sind Objekte meiner Klasse Geschenk gespeichert. Diese Klasse enthält u.a. den Namen des Kindes, für die das Geschenk (als String) ist, sowie den Wert des Geschenks (als float) und einen Verweis auf den Nachfolger in der Liste.
Zeig doch mal den Code, dann kann man konkretere Antworten geben.
 

MarkusU

Mitglied
Hier der gesamte Code. Wie gesagt, das mit den Arrays ist wohl völlig falsch ...
Wahrscheinlich wäre ein anderer Ansatz besser?


Code:
class Beutel
{
	Geschenk untenimbeutel;	// entspricht head 
	
       // Die beschriebenenArrays (funktionieren natürlich nicht):
	public static String[] kindername = new String[this.anzahlgeschenke];
	public static int[] geschenkzahl = new int[kindername.length];
	public static float[] geschenkwert = new float[kindername.length];  
	
	Beutel(Geschenk k)
	{
		this.obenimbeutel = this.untenimbeutel = k;
	}
	


	// neues Geschenk in den Beutel werfen
	void neuesGeschenk(Geschenk neu)
	{
		if (this.untenimbeutel == null) // falls Beutel leer
		{
			this.untenimbeutel = this.obenimbeutel = neu;	// -> erstes Geschenk im Beutel
		}
		else neuesGeschenk(neu, untenimbeutel.nf); 
	}
	
	void neuesGeschenk(Geschenk neu, Geschenk g)
	{
		if (g.nf == null)	//  falls g oberstes Geschenk im Beutel
		{
			g.nf = untenimbeutel = neu;  
		}
		else neuesGeschenk(neu, g.nf);	
	}
	
	
	
	
	
	// Geschenke pro Kind -- hier die "Problemmethode" - sieht irgendwie verheerend aus ...
	
	int anzahlGeschenke()
	{
		if (this.untenimbeutel == null)	return 0;
		else return (anzahlGeschenke(this.untenimbeutel) + 1);
	}
	int anzahlGeschenke(Geschenk g)
	{
		if (g.nf == null) return 0;
		else return (anzahlgeschenke(g.nf) + 1);
	}
	
	
	void GeschenkeproKindausgeben()
	{
		
		if (this.untenimbeutel == null)	return;
		else GeschenkeproKindausgeben(this.untenimbeutel);
	}

	void GeschenkeproKindausgeben(Geschenk g)
	{
		for (int i = 0; i < kindername.length; i++)
		{
			if (g.kind == kindername[i])		// um den String-Vgl. kümmere ich mich ein anderes mal...
			{
				geschenkwert[i] = geschenkwert[i] + g.wert;
				geschenkzahl[i] = geschenkzahl[i] + 1;
			}
						
			else if (kindername[i] == "")			// um den auch		
			{
				kindername[i] = g.name;
				geschenkwert[i] = g.wert;
				geschenkzahl[i] = 1;
				
				for (int j = 0; j < kindernahme.length; j++)
				{	
					if (kindername[i] == "") break;                // und um den
					System.out.println(kindername[i] + " bekommt " + geschenkanzahl + " Geschenk(e)");
					break;
				}
				break;
			}
		}
		
		if (g.nf == null) return;
		else GeschenkeproKindausgeben(g.nf);
	}

	
	
	// Gesamtwert der Geschenke
	float gesamtwert()
	{
		if (this.untenimbeutel == null)	return 0f;	//  Beutel leer
		else return (gesamtwert(this.untenimbeutel) + this.untenimbeutel.wert);
	}
	float gesamtwert(Geschenk g)
	{
		if (g.nf == null) return g.wert;
		else return (gesamtwert(g.nf) + g.wert);
	}
	
	
	void ausgabe()
	{
		if (this.untenimbeutel == null) return;
		else
		{
			System.out.println(this.untenimbeutel.name);
			if (this.untenimbeutel.nf != null)	ausgabe(this.untenimbeutel.nf);		
		}
	}	
	
	void ausgabe(Geschenk gg)
	{
		System.out.println(gg.name);
		if (gg.nf != null) ausgabe(gg.nf);
	}
	
	public static void main (String[] args)
	{
	
		Geschenk g4 = new Geschenk("Holzhammer", "Bart", 5f, null);
		Geschenk g3 = new Geschenk("Eisenhammer", "Lisa", 5f, g4);
		Geschenk g2 = new Geschenk("Gummiknüppel", "Maggy", 5f, g3);
		Geschenk g1 = new Geschenk("Rammbock", "Homer", 5f, g2);		
		
		Beutel b1 = new Beutel(g1);
		
		b1.ausgabe(b1.untenimbeutel);
		
		System.out.print("Anzahl der Geschenke im Beutel: " + b1.anzahlGeschenke());
		
	}
	
}

Und die Klasse Geschenk:
Code:
public class Geschenk
{
	String name;
	String kind;
	float wert;
	Geschenk nf;
	
	public Geschenk(String cname, String ckind, float cwert, Geschenk cnf)
	{
		this.name = cname;
		this.kind = ckind;
		this.wert = cwert;
		this.nf = cnf; //Standardwert
	}
}
 

MarkusU

Mitglied
OK, hier die Aufgabe:

"Schreiben Sie zwei JAVA-Klassen namens Beutel und Geschenk. Ein Beutel ist eine
Liste von Geschenken. Jedes Geschenk hat drei Eigenschaften (3 Parameter): der Name
des Geschenks, der Name des Kindes, das dieses Geschenk bekommt, und den Wert
des Geschenks.

Dazu sind vier Methoden der Klasse Beutel zu schreiben:

Die erste soll die Liste von Geschenken mit einem neuen Geschenkwunsch erg anzen;
-> müsste funktionieren

die zweite soll bestimmen und ausgeben, wieviele Geschenke jedes Kind bekommt;

die dritte soll den Namen des Kindes bestimmen und ausgeben, welches die teuersten Geschenke (die größte
Summe der Werte) bekommt;

die vierte soll den Gesamtwert der Geschenke berechnen."
-> müsste auch funktionieren



Die Methoden 1 und 4 sind rekursiv relativ einfach lösbar, aber die 2. u. 3. eben nicht: Die krieg ich leider nicht hin...
 

Ebenius

Top Contributor
Für zweitens würde ich in Beutel folgende Methoden deklarieren:

Code:
public void druckeGeschenkAnzahlProKind() {
  final Map<String,Integer> sammlung = new TreeMap<String,Integer>();
  sammleGeschenkAnzahlProKind(sammlung, untenimbeutel);
  for (Map.Entry<String,Integer> entry : sammlung.entrySet()) {
    System.out.println("Kind " + entry.getKey() + " bekommt " + entry.getValue() + " Geschenke");
  }
}

private void sammleGeschenkAnzahlProKind(Map<String,Integer> sammlung, Geschenk geschenk) {
  final Integer anzahl = sammlung.get(geschenk.name);
  if (anzahl == null) {
    sammlung.put(geschenk.name, new Integer(1));
  } else {
    sammlung.put(geschenk.name, new Integer(anzal.intValue() + 1));
  }
  if (sammlung.nf != null) {
    sammleGeschenkAnzahlProKind(sammlung.nf);
  }
}

Ich hab's im Browser getippt. Kann gut sein, dass ich ein paar kleine Tippfehler drin hab.

Hilft Dir das so?

Ebenius
 

MarkusU

Mitglied
Das sieht doch auf den ersten Blick viel besser aus.

Werds heut Mittag probieren, aber müsste funktionieren.


Danke!!
 

MarkusU

Mitglied
Nur der Vollständigkeit halber:

Der Code von Ebenius beinhaltet einige mir (noch :) unbekannte Elemente, aber hat mich auf eine neue Idee gebracht:

Ich hab eine neue Klasse vom Typ Speicher mit den Attributen Name (des Kindes), Wert (der Geschenke des Kindes) und Anzahl (auch der Geschenke des Kindes) angelegt.
Die Geschenke hab ich dann in ein Array vom Typ Speicher abgelegt und entsprechende Methoden hinzugefügt.

Funktioniert jetzt (endlich) alles!!

Danke für alle Antworten!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
M Verkettete Liste Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
A Verkettete Liste Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
H Verkettete Liste Java Basics - Anfänger-Themen 7
N Verkettete liste rückwärts ausgeben Java Basics - Anfänger-Themen 18
K Verkettete Liste und seine Methoden Java Basics - Anfänger-Themen 1
N Verkettete Liste implementieren Java Basics - Anfänger-Themen 5
O Einfach verkettete Liste - Revert Methode Java Basics - Anfänger-Themen 1
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
B Doppelt Verkettete Liste - Ist alles gut so? Java Basics - Anfänger-Themen 3
C Verkettete Liste - sortiert einfügen Java Basics - Anfänger-Themen 7
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
U Datentypen Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 13
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
B OOP Über eine doppelt verkettete Liste iterieren Java Basics - Anfänger-Themen 4
hooked Verkettete Liste / linked list Java Basics - Anfänger-Themen 2
L Doppelt verkettete Liste Java Basics - Anfänger-Themen 6
J Eine Art verkettete Liste aber mit teils mehr als einem Nachfolger Java Basics - Anfänger-Themen 8
V Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 3
R doppelt verkettete Liste aus Arrays erstellen Java Basics - Anfänger-Themen 1
K Einfach Verkettete Liste - addFirst() Java Basics - Anfänger-Themen 7
G 2 Aufgabe rund um eine verkettete Liste Java Basics - Anfänger-Themen 2
O Verkettete Liste Java Basics - Anfänger-Themen 10
E Methoden auf von Methoden erstellte Objekte zugreifen (verkettete Liste) Java Basics - Anfänger-Themen 10
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
S Doppelt verkettete Liste Java Basics - Anfänger-Themen 3
G Doppelt Verkettete Liste Java Basics - Anfänger-Themen 2
A Doppelt Verkettete Liste Java Basics - Anfänger-Themen 16
E doppelt verkettete liste Java Basics - Anfänger-Themen 10
V Verkettete Liste. Java Basics - Anfänger-Themen 7
X Einfach Verkettete Liste Java Basics - Anfänger-Themen 16
K Verkettete Liste - Methode entwerfen Java Basics - Anfänger-Themen 14
S Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 12
B Insertionsort verkettete Liste Java Basics - Anfänger-Themen 4
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
R verkettete liste ansEndeSchieben Java Basics - Anfänger-Themen 13
T Verkettete Liste Java Basics - Anfänger-Themen 14
A Klassen Innere Klassen, verkettete Liste Java Basics - Anfänger-Themen 9
B Zweifach-verkettete Liste umkehren Java Basics - Anfänger-Themen 6
X verkettete Liste Java Basics - Anfänger-Themen 13
E Datentypen Doppelt verkettete Liste Java Basics - Anfänger-Themen 10
P Einfügen in doppelt verkettete Liste Java Basics - Anfänger-Themen 7
kae verkettete Liste Java Basics - Anfänger-Themen 5
S Queue als doppelt verkettete Liste Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
B OOP Verkettete Liste Java Basics - Anfänger-Themen 7
R verkettete liste Java Basics - Anfänger-Themen 5
M Verkettete Liste Java Basics - Anfänger-Themen 4
M verkettete liste Java Basics - Anfänger-Themen 7
N doppelt verkettete liste einfügen Java Basics - Anfänger-Themen 7
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
N einfach verkettete liste fehler Java Basics - Anfänger-Themen 5
N einfach verkettete liste Java Basics - Anfänger-Themen 3
G verkettete Liste - invertieren Java Basics - Anfänger-Themen 2
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
B verkettete Liste Java Basics - Anfänger-Themen 8
S zyklisch verkettete Liste erstellen Java Basics - Anfänger-Themen 3
S einfach verkettete Liste Java Basics - Anfänger-Themen 19
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
W Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 2
T Einfach verkettete Liste: Wie Elemente löschen? Java Basics - Anfänger-Themen 4
J verkettete Liste Java Basics - Anfänger-Themen 2
D Einfach verkettete Liste Java Basics - Anfänger-Themen 20
DasDogma Verkettete Liste - Element löschen Java Basics - Anfänger-Themen 2
H Verkettete Liste Java Basics - Anfänger-Themen 5
K eigene verkettete Liste Java Basics - Anfänger-Themen 4
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
A Eine verkettete Liste Java Basics - Anfänger-Themen 43
G verkettete lineare Liste Java Basics - Anfänger-Themen 2
L verkettete Liste - Ausgabeproblem Java Basics - Anfänger-Themen 2
G Wie kann ich eine verkettete Liste in ein JTable einfügen? Java Basics - Anfänger-Themen 7
D doppelt verkettete Liste Java Basics - Anfänger-Themen 16
S Doppelt Verkettete Liste Java Basics - Anfänger-Themen 7
R ArrayList Objekt -> verkettete Liste Java Basics - Anfänger-Themen 4
R verkettete Liste Java Basics - Anfänger-Themen 13
R verkettete Liste in und aus Datei Java Basics - Anfänger-Themen 5
M Doppelt verkettete Liste Zeiger Vorgänger beim Einfügen Java Basics - Anfänger-Themen 2
J doppelt verkettete Liste Java Basics - Anfänger-Themen 5
L doppelt verkettete Liste Java Basics - Anfänger-Themen 6
C einfach verkettete Liste -> Elemente vertauschen Java Basics - Anfänger-Themen 2
0 Binärbaum als verkettete Liste Java Basics - Anfänger-Themen 3
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 12
G Dopplelt verkettete liste Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste Java Basics - Anfänger-Themen 16
R einfach verkettete Liste, intersect Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben