Scheinbare Endlosrekursion

Underfaker

Bekanntes Mitglied
Hallo,

offenbar habe ich in meinem Programm eine Endlosrekursion erzeugt denn ich erhalte einen Stackoverflow Fehler.

Das Problem muss beim erzeugen eines Objektes liegen:

Ich rufe es so auf:

Java:
Bestellung v = new Bestellung();

Wenn ich es auskommentiere läuft das Programm wieder, also ist das offenbar das Problem, ich füge einmal die Datei und dannach nochmal die Methode einzeln (damit man besser überblicken kann) an und die Klasse auf die sich das bezieht, vielleicht kann sich ja jemand den fehler denken. :)

Zeile 236
Java:
import java.util.*;
import java.io.*;

class OnlineShop

{

			private InputStreamReader is=new InputStreamReader(System.in);
			private BufferedReader faileingabe=new BufferedReader(is);
int lol;
int f;
int produktnr;
int bestellmenge;
double gesamtpreis;

		Produktverwaltung d = new Produktverwaltung();	

	public static void main (String args[])

	{


		OnlineShop c = new OnlineShop();

			

		int b = OnlineShop.ZeigeHauptmenue();

		switch (b)

		{

			case 1: 

				c.produkteaufrufen();

			break;

			case 2:

				c.bestellen();

			break;

			case 3:

				c.abschicken();

				

			break;

			default:

			break;

		}

	}

	public static int ZeigeHauptmenue()

	{

		TastaturIn a = new TastaturIn();

		int b;

		System.out.println("Online-Shop Wunschshop");

		System.out.println("-----------------------------");

		System.out.println("1 - Produkte anzeigen");

		System.out.println("2 - Bestellung aufgeben");

		System.out.println("3 - Bestellung abschicken");

		System.out.println("0 - Programm beenden");

		System.out.println("Bitte Ihre Auswahl eingeben und bestaetigen.");

		do

		{

			try
	
			{

				b = a.readInt();
				
				break;

			}

			catch (Exception e)

			{ System.out.println("Fehler! Bitte eine der angegebenen Zahlen auswählen und bestaetigen."); }

		}

		while (true);

		return b;

	}

	public void produkteaufrufen()

	{
	
		int alpha = d.produktliste.size();

		int index = 0;

		while(alpha>0) 

			{

				System.out.println(index + "  " + d.produktliste.get(index).getproduktname() + ", " +  d.produktliste.get(index).getpreis());

				alpha--;
				
				index++;

			}

		



		try
	
			{

				System.out.println("Drücken Sie Enter um zum Menue zurück zu kehren.");

				String zeile="";
		
				zeile= faileingabe.readLine();


			}

			catch (Exception e)

			{ System.out.println("Fehler!"); }

		OnlineShop.main(new String[] {"1","2","3"});

	}

	public void bestellen()

	{

		f = waehlekundennummer();

		produktebestellen();

	}

	public int waehlekundennummer()

	{

		Kundenverwaltung e = new Kundenverwaltung();

		TastaturIn fail = new TastaturIn();

		

		ListIterator<Kunde> ot = e.kundenliste.listIterator();

		int beta = e.kundenliste.size();

		int index2 = 0;

		System.out.println("---Kundenliste---");

		while(beta>0) 

		{

			System.out.println(index2 + "  " + e.kundenliste.get(index2).getKundenname() + ", " +  e.kundenliste.get(index2).getStraße() + ", " +  e.kundenliste.get(index2).getOrt());

			beta--;
				
			index2++;

		}

		System.out.println("Bitte geben Sie Ihre Kundennummer ein und drücken Sie Enter.");

		do

		{

			try
	
			{

				lol = fail.readInt();
				
				break;

			}

			catch (Exception u)

			{ System.out.println("Fehler! Bitte eine der angegebenen Zahlen auswählen und bestaetigen."); }

		}

		while (true);

		return lol;

	}

	public void abschicken()

	{
	
	Kundenverwaltung e = new Kundenverwaltung();

	System.out.println("Die Bestellung von "+ e.kundenliste.get(f).getKundenname() + ", " + "für " + "wurde an die " + e.kundenliste.get(f).getStraße() + ", " +  ", " +  e.kundenliste.get(f).getOrt() + " geliefert.");

	}

	public void produktebestellen()
	
	{

		Bestellung v = new Bestellung(); // <-- da ist der Übeltäter

		TastaturIn haha = new TastaturIn();

		int gamma = d.produktliste.size();

		int index3 = 0;

		while(gamma>0) 

			{

				System.out.println(index3 + "  " + d.produktliste.get(index3).getproduktname() + ", " +  d.produktliste.get(index3).getpreis());

				gamma--;
				
				index3++;

			}

		

		do

		{

		try
	
			{

				System.out.println("Geben Sie die Produktnummer ein:");
		
				produktnr = haha.readInt();

				System.out.println("Geben Sie die Bestellmenge ein:");

				bestellmenge = haha.readInt();
				
				break;


			}

			catch (Exception e)

			{ System.out.println("Fehler!"); }

		}

		while(true);

		/* gesamtpreis = v.Gesamtpreis(d.produktliste.get(index3).getpreis(), bestellmenge);

		System.out.println(gesamtpreis);*/
	
	}

}

Nochmal nur die Methode:
Java:
public void produktebestellen()
	
	{

		Bestellung v = new Bestellung(); // <-- da ist der Übeltäter

		TastaturIn haha = new TastaturIn();

		int gamma = d.produktliste.size();

		int index3 = 0;

		while(gamma>0) 

			{

				System.out.println(index3 + "  " + d.produktliste.get(index3).getproduktname() + ", " +  d.produktliste.get(index3).getpreis());

				gamma--;
				
				index3++;

			}

		

		do

		{

		try
	
			{

				System.out.println("Geben Sie die Produktnummer ein:");
		
				produktnr = haha.readInt();

				System.out.println("Geben Sie die Bestellmenge ein:");

				bestellmenge = haha.readInt();
				
				break;


			}

			catch (Exception e)

			{ System.out.println("Fehler!"); }

		}

		while(true);

		/* gesamtpreis = v.Gesamtpreis(d.produktliste.get(index3).getpreis(), bestellmenge);

		System.out.println(gesamtpreis);*/
	
	}

Und die zugehörige Klasse:

Java:
import java.util.*;

class Bestellung extends ArrayList

{

	Bestellung bestelldaten = new Bestellung();

	double gesamtpreis;

	public double Gesamtpreis(double preis, int menge)

	{

		gesamtpreis = preis * menge;

		return gesamtpreis;

	}

	public void Bestelldaten(String kundenname, String produktname, double gesamtpreis,  String straße, String ort)

	{

		bestelldaten.add(kundenname);

		bestelldaten.add(produktname);

		bestelldaten.add(gesamtpreis);

		bestelldaten.add(straße);

		bestelldaten.add(ort);

	}

}

ps: Wegen der Form bspw und ob manches Sinn macht... also ich weiß vieles ist zum Haare raufen aber ich bin quasie kurz davor das Ding eh hinzuschmeißen weil ich kaum zum Ziel komme, deswegen probiere ich es mal so gut es geht wie weit ich komme.
 

Kevin94

Top Contributor
1. Zeile von Bestellung:
Java:
Bestellung bestelldaten=new Bestellung();

Das ergibt eine Endlos"rekursion".
 

Sesostris

Aktives Mitglied
Java:
class Bestellung extends ArrayList {
	Bestellung bestelldaten = new Bestellung();
Du erzeugst bei jeder Instanziierung eines Objektes Bestellung wieder ein Objekt Bestellung, das wieder ein Objekt ... und wieder ... und wieder ein Objekt Bestellung erzeugt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Endlosrekursion Java Basics - Anfänger-Themen 41

Ähnliche Java Themen

Neue Themen


Oben