Probleme mit Klasse

Meiki Jay

Mitglied
Hallo, ich habe vor kurzem mit der Java Programmierung angefangen.

Ich habe mit Java ein einfache Aufgbe zu lösen, aber das klappt bei mir einfach nicht...

Also ich soll ein "Pizzafabrik" simulieren. Es soll möglich sein so eine Pizza mit namen zu erstellen

C++:
hw = Pizza.buildPizza("Hawaii");

Außerdem soll ich ein exception werfen falls der Name schon vorhanden war...

Also dazu habe ich 2 Fragen:
1. Wie krieg ich das mit der eception hin, also wie überprüfe ich ob der Name schon vorhanden ist?
2. Ich bekomme bei meinem Programm den Fehler:
non-static variable buildPizza(java.lang.String) cannot be referenced from a static context (in Zeile 16)


Also hier mein Code

C++:
public class PizzaFabrik {
	public  class Pizza {
		boolean unbekannt;
		String noname;
		
		String buildPizza(final String name) {
			if (unbekannt)
				throw new Exception();
			 else
				 return name;
		}			
	}
    public static void main (String args[]) {
        String hw = Pizza.buildPizza("Hawaii");
	}
}
 
Zu 1.
Du wirst ne Liste/ Array oder so etwas brauchen, wo du alle bekannten Namen speichern kannst. Diese kannst du dann durchlaufen beim erstellen einer neuen Pizza un falls dieser Name in der Liste vorhanden ist, kannst du die Fehlermeldung bringen.

zu 2. Versuch es am besten indem du erst ein neues PizzaFabrik objekt erstellst. Also in der Main PizzaFabrik fabrik = new PizzaFabrik()
und dann mit fabrik.buildPizza die Pizza erstellen
Willst du jedoch den aufruf so belassen, muesstest du die methode in der Pizza Klasse static machen. public static String buildPizza, da du aber auf variablen in der Klasse zugreifen willst, wird das mit der static methode net funktionieren soweit ich das in Erinnerung hab. (bitte berichtigen falls falsch)
Somit waere es mit der Objekt erstellung einfacher :D

Achja, du erstellst in der Pizzafabrik ne neue Klasse Pizza. Was ansich net so schlimm ist, Jedoch hat eine Pizza sicherlich keinen Wert wie "unbekannt" oder "noname". Variablen sind dafuer da um das Objekt zu definieren. SOmit waere fuer Pizza etwas angebracht wie "name" oder "preis'. Die methode buildPizza, gehoert dann auch zu der Pizzafrabik, weil die ja die PIzzen herstellt.
 
Zuletzt bearbeitet:
Hallo,

schau mal hier:

Code:
import java.util.*;

public class Pizzatest {

	private Vector mypizzas;
	
	public Pizzatest() {
		mypizzas = new Vector();
	}
	
	public void addpizza(String pizzaname) throws Exception {
		for(int i=0; i<mypizzas.size(); i++) {
			if(mypizzas.elementAt(i).equals(pizzaname)) throw new Exception();
		}
		mypizzas.add(pizzaname);
		System.out.println("Pizza "+pizzaname+" in Liste aufgenommen!");
	}
	
	public static void main(String[] args) {
		pizzatest pt = new Pizzatest();
		try {
			pt.addpizza("Salami");
		}
		catch(Exception e) {
			System.out.println("Pizza schon vorhanden!");
		}
		try {
			pt.addpizza("Schinken");
		}
		catch(Exception e) {
			System.out.println("Pizza schon vorhanden!");
		}
		try {
			pt.addpizza("Salami");
		}
		catch(Exception e) {
			System.out.println("Pizza schon vorhanden!");
		}
		try {
			pt.addpizza("Thunfisch");
		}
		catch(Exception e) {
			System.out.println("Pizza schon vorhanden!");
		}
	}
}
 
Zuletzt bearbeitet:
Edit: Klassenname groß geschrieben. Danke für den Hinweis :)

Warum sollte es ihm/ihr nicht helfen? Nachvollziehen muss man ja den Code dennoch noch...
 
[offtopic]Weil man nur durch programmieren programmieren lernt. Hier werden häufig Fragen zu Übungsaufgaben gestellt und da ist es nicht sinnvoll eine Lösung zu posten.

Es geht darum jemandem zu helfen es selbst hinzubekommen. Stück für Stück anhand von dessen Code. Darum wird hier Code bei Sachen die nach Übungsaufgabe klingen oft nur im Text erklärt.

Und das nächste Mal bitte per PN Offtopic klären und nicht hier in einem der Threads ;)
[/offtopic]

Abgesehen davon sollte man keinen Vector verwenden und in diesem Fall eignet sich eine HashMap wahrscheinlich sowieso besser :)
 
Hi, danke für eure Hilfe,
hatte in letzter viel zu tun, kann deshalb erst jetzt antworten...

Ich hab das ein bisschen anders gelöst, bin aber nicht sicher ob das so richtig ist...

C++:
import java.util.*;

public class PizzaFabrik {
	char[] array = new char [20];
	int stelle = 0;
	
	char buildPizza(char name) throws Exception {
		for (int i = 0; i != 20 ; i++) {
			if (name == array[i])
				throw new Exception("Unbekannt");
                }
		stelle++;
		name = array[stelle];
		return name;
	}
}

und als main Funktion:

C++:
public class Fabrik {
		public static void main (String args[]) {
			PizzaFabrik farik = new PizzaFabrik();
			String hw = PizzaFabrik.buildPizza("Hawaii");
		}
}
 
Na du mußt doch mal testen ob das was du programmierst funktioniert. Pack mal ein paar mehr Pizzen rein, dann solltest du sehen dass es nicht klappt.

Was hast du dir denn gedacht wie das was du programmiert hast funktionieren soll?

Eigentlich ist gar nicht erstmal das programmierte das wichtige sondern der Algorithmus. Sprich: Überleg dir auf Zettel und Papier wie du das ohne ein Computerprogramm lösen würdest. Versuche dann das auf die der Programmiersprache eigenen Konzepte abzubilden.
 
Find ich gut das du es selbst probiert hast, und net einfach den code kopiert! *daumen hoch*
Wie schon gesagt wurde, versuch dir aufzuschreiben wie du es dri denkst. Dann eventuell pseudocode ala:
..
erstelle neue pizza fabrik
fuege pizza mit namen 'hawai'' hinzu
...

etc etc etc. Wenn du das hast, kannst es gerne mal posten, so sehen wir bissel deine Gedanken dazu :D. Wir helfen dann auch gerne weiter, wenn du dann wieder festhaengst.
 
Hi,
danke erstmal für die Hilfe!

So ein Struktogramm (oder wie man das auch immer nennen will) habe ich nicht gemacht.

Zurzeit habe ich nur das Problem, daass ihc das Prgogramm nicht zum laufen krieg, ich programmiere derzeit unter Mac OS X und schreibe meine Programme mit TextWrangler und compilier sie mittels Terminal (javac ProgName.java). Jedoch wenn ich das Programm mit java starten will bekomm ich den Fehler:
Exception in thread "main" java.lang.NoClassDefFoundError: Teeest/java

Ich weiss, dass ich dann das Programm mit java -cp <classpath> ProgName starten soll, aber ich kenne den classpath nicht...

lg Meiki
 

Neue Beiträge

Zurück