Mein Kleines Programm

10/20/2015 14:19 TheRealLenon#1
Hallo,

ich habe ein kleines Programm geschrieben, wo man verschiedene Schwierigkeiten wählen kann.

Da ich dies alles mit Absicht sehr ausführlich schreibe, habe ich manche Codes doppelt etc.. (Also nicht wundern).

Nun funktioniert alles in dem Schwierigkeitsgrad Einfach wunderbar.
Jedoch wenn ich auf den Schwierigkeitsgrad Mittel gehen möchte, wird das Programm nicht weiter ausgeführt.

Anbei seht ihr den Code.

Code:
package erstesSpiel;

import javax.swing.JOptionPane;

import org.omg.CORBA.TIMEOUT;

public class erstesSpiel {

	private static final String String = null;

	public static void main(String[] args) {

		int startergeldEinfach = 10;
		double startergeldMittel = 5;
		double startergeldSchwer = 2;

		JOptionPane.showMessageDialog(null, "Herzlich-Willkommen bei meinem kleinen Spiel.");

		String input = JOptionPane.showInputDialog(null, "Du befindest dich nun in dem Startmenü\n\n"
				+ "Wähle\n\n 1 für Spiel starten\n2 für Spielbeschreibung\n" + "3 für die Credits.\n\n");

		if (input.equals("starten")) {
			String schwierigkeit = JOptionPane.showInputDialog(null,
					"Bitte wäle nun deinen Schwierigkeitsgrad\n\n" + "Einfach\n" + "Mittel\n" + "Schwer\n");
			while (schwierigkeit.equals("Einfach")) {

				double startergeld = 10;

				String einfach = JOptionPane.showInputDialog(null,
						"Du hast den Schwierigkeitsgrad Einfach gewählt.\n" + "Dein Startkapital beträgt "
								+ startergeldEinfach + " Credit´s.\n" + "in was möchtest du investieren?\n"
								+ "Dir stehen folgende Investitionen zur Verfügung:\n" + "\n" + "Automobilbranche\n"
								+ "IT-Branche\n" + "Pharmabranche\n" + "Musikindustrie\n" + "Uhrenindustrie\n"
								+ "Illegale geschäfte.");
				if (einfach.equals("Automobilbranche")) {
					JOptionPane.showMessageDialog(null, "Du hast in die Automobilbranche investiert.\n\n"
							+ "Du erhältst zu deinem Kapital einen Bonus von einem Credit.");

					JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + ++startergeldEinfach);

				}

				if (einfach.equals("IT-Branche")) {
					JOptionPane.showMessageDialog(null,
							"Du hast in die IT-Branche investiert. Dein Kapital erhöht sich um zwei Credits.");

					JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + (startergeldEinfach + 2));
					++startergeldEinfach;
					++startergeldEinfach;

				}

				if (einfach.equals("Pharmabranche")) {
					JOptionPane.showMessageDialog(null,
							"Du hast in die Pharmabranche investiert. Dein Kapital erhöht sich um drei Credits.");

					JOptionPane.showMessageDialog(null, "Dein kapital beträgt nun: " + (startergeldEinfach + 3));
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
				}

				if (einfach.equals("Musikindustrie")) {
					JOptionPane.showMessageDialog(null,
							"Du hast in die Musikindustrie investiert. Dein Kapital erhöht sich um vier Credits.");

					JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + (startergeldEinfach + 4));
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
				}

				if (einfach.equals("Uhrenindustrie")) {
					JOptionPane.showMessageDialog(null,
							"Du hast in die Uhrenindustrie investiert. Dein Kapital erhöht sich um 5 Credits.");

					JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + (startergeldEinfach + 5));
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;

				}

				if (einfach.equals("Illegale Geschäfte")) {
					JOptionPane.showMessageDialog(null,
							"Du hast in illegale Geschäfte investiert. Dein Kapital erhöht sich um 6 Credits.");

					JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + (startergeldEinfach + 6));
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
				}

				else {
					JOptionPane.showMessageDialog(null,
							"Bitte wähle eins der zur Verfügung stehenden Investitionen aus.");

				}

				while (schwierigkeit.equals("Mittel")) {
					
					String mittel = JOptionPane.showInputDialog(null,
							"Du hast den Schwierigkeitsgrad Einfach gewählt.\n" + "Dein Startkapital beträgt "
									+ startergeldMittel + " Credit´s.\n" + "in was möchtest du investieren?\n"
									+ "Dir stehen folgende Investitionen zur Verfügung:\n" + "\n" + "Automobilbranche\n"
									+ "IT-Branche\n" + "Pharmabranche\n" + "Musikindustrie\n" + "Uhrenindustrie\n"
									+ "Illegale geschäfte.");
					if (mittel.equals("Automobilbranche")) {
						JOptionPane.showMessageDialog(null, "Du hast in die Automobilbranche investiert.\n\n"
								+ "Du erhältst zu deinem Kapital einen Bonus von einem Credit.");

						JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + ++startergeldMittel);

					}

					if (mittel.equals("IT-Branche")) {
						JOptionPane.showMessageDialog(null,
								"Du hast in die IT-Branche investiert. Dein Kapital erhöht sich um zwei Credits.");

						JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + (startergeldMittel + 2));
						++startergeldMittel;
						++startergeldMittel;

					}

					if (mittel.equals("Pharmabranche")) {
						JOptionPane.showMessageDialog(null,
								"Du hast in die Pharmabranche investiert. Dein Kapital erhöht sich um drei Credits.");

						JOptionPane.showMessageDialog(null, "Dein kapital beträgt nun: " + (startergeldMittel + 3));
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;
					}

					if (mittel.equals("Musikindustrie")) {
						JOptionPane.showMessageDialog(null,
								"Du hast in die Musikindustrie investiert. Dein Kapital erhöht sich um vier Credits.");

						JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + (startergeldMittel + 4));
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;
					}

					if (mittel.equals("Uhrenindustrie")) {
						JOptionPane.showMessageDialog(null,
								"Du hast in die Uhrenindustrie investiert. Dein Kapital erhöht sich um 5 Credits.");

						JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + (startergeldMittel + 5));
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;

					}

					if (mittel.equals("Illegale Geschäfte")) {
						JOptionPane.showMessageDialog(null,
								"Du hast in illegale Geschäfte investiert. Dein Kapital erhöht sich um 6 Credits.");

						JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + (startergeldMittel + 6));
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;
						++startergeldMittel;
					}

					else {
						JOptionPane.showMessageDialog(null,
								"Bitte wähle eins der zur Verfügung stehenden Investitionen aus.");

					}

				}

			}

		}

	}
}
Vielen dank für eure Hilfe im Voraus.

Mit freundlichen Grüßen



TheRealLenon
10/20/2015 14:46 ComputerBaer#2
Die Schleife für Einfach beginnt in Zeile 25 und endet in Zeile 187.
Die Schleife für Mittel beginnt in Zeile 106 und endet in Zeile 185.

Die Schleife für Mittel befindet sich also in der Schleife für Einfach. Die Schleife für Einfach wird aber nicht ausgeführt wenn Mittel ausgewählt wurde.

Ich würde dir empfehlen jetzt deinen Code aufzuräumen und den doppelten Code so weit wie möglich zu entfernen. Das wird später nur mehr Arbeit und ist eine unnötig große Fehlerquelle.
10/20/2015 15:47 TheRealLenon#3
Ah Okey.. Well fuck.. Danke! :) Hab ewig danach gesucht haha..
10/21/2015 00:59 .SkyneT.#4
Quote:
Originally Posted by TheRealLenon View Post
Da ich dies alles mit Absicht sehr ausführlich schreibe, habe ich manche Codes doppelt etc.. (Also nicht wundern).
Ich würde das gar nicht erst machen, es ist nämlich nicht ausführlich sondern unnötig und redundant. Gewöhn dir so einen Code gar nicht erst an. Um einen Code "ausführlich" und leserlich zu schreiben, kann man immer noch Kommentare hinzufügen.

Soetwas ist einfach nicht nötig:
Code:
++startergeldMittel;
++startergeldMittel;
++startergeldMittel;
++startergeldMittel;
(versuch doch mal startergeldMittel um 168183 zu erhöhen, viel Glück.)

So sollte das aussehen:
Code:
startergeldMittel += 4;
das ist leicht verständlich, übersichtlich und du musst sogar weniger tippen.
10/21/2015 08:58 TheRealLenon#5
Quote:
Originally Posted by .SkyneT. View Post
Ich würde das gar nicht erst machen, es ist nämlich nicht ausführlich sondern unnötig und redundant. Gewöhn dir so einen Code gar nicht erst an. Um einen Code "ausführlich" und leserlich zu schreiben, kann man immer noch Kommentare hinzufügen.

Soetwas ist einfach nicht nötig:
Code:
++startergeldMittel;
++startergeldMittel;
++startergeldMittel;
++startergeldMittel;
(versuch doch mal startergeldMittel um 168183 zu erhöhen, viel Glück.)

So sollte das aussehen:
Code:
startergeldMittel += 4;
das ist leicht verständlich, übersichtlich und du musst sogar weniger tippen.
Das mite dem startergeldMittel=+4; hatte ich zuerst. jedoch wurde dies in der while schleife nicht erhöht.
10/21/2015 09:44 ComputerBaer#6
Quote:
Originally Posted by TheRealLenon View Post
Das mite dem startergeldMittel=+4; hatte ich zuerst. jedoch wurde dies in der while schleife nicht erhöht.
Dann hattest du wahrscheinlich "startergeldMittel = 4;", dann kann sich da auch nichts erhöhen. Bei "startergeldMittel += 4;" oder länger "startergeldMittel = startergeldMittel + 4;" muss es sich erhöhen.
10/21/2015 14:36 TheRealLenon#7
Wenn ich startergeldMittel = startergeldMittel + 4; eingegeben habe, kam immer, das die Variable doppelt deklariert wurde.
10/21/2015 14:46 ComputerBaer#8
Nur "startergeldMittel = startergeldMittel + 4;" und nicht "double startergeldMittel = startergeldMittel + 4;". Beim zweiten deklarierst du sie dann nämlich wirklich doppelt. Aber "startergeldMittel += 4;" muss auch funktionieren und ist etwas besser zu lesen.
10/22/2015 11:09 XxharCs#9
So viele if-Anweisungen :confused: :(
Nimm doch bitte enums und verwende diese, mithilfe eines switch-cases.

Deine perfomance droppt, es ist unleserlich und generell schlecht mit vielen if's zu programmieren.
Ah btw. Klassennamen schreibt man groß.

Enum Beispiel:
Code:
public enum Entscheidung {
	
	STARTEN("Starten"),
	EINFACH("Einfach"),
	AUTOMOBILBRANCHE("Automobilbranche"); // usw.
	
	private final String text;
	
	private Entscheidung(final String text) {
		
		this.text = text;
	}
	
	public boolean equalsName(String otherText) { // optional, oder du ueberschreibst die equals Methode selbst
		
		return (otherText == null) ? false : text.equals(otherText);
	}
	
	@Override
	public String toString() {
		
		return text;
	}
}
Man sollte aber generell mit Numerischen Zahlen anstatt von Strings zu arbeiten.

Du kannst auch eine weitere Klasse erstellen, welche deinen Input checkt und dementsprechen das enstprechende enum typ/wert zurück liefert.

Beispiel:
Code:
public class EntscheidungChecker {

	public Entscheidung checkEntscheidung(String input) {
		
		if(input.isEmpty())
			return Entscheidung.EMPTY;
		
		String[] splittedInput = input.split(" ");
		
		switch(splittedInput[0]) {
		
		case "Starten":
			
			return Entscheidung.STARTEN;
			
		case "Einfach":
			
			return Entscheidung.EINFACH;
			
		case "Automobilbranche":
			
			return Entscheidung.AUTOMOBILBRANCHE;
		}
		
		return Entscheidung.FEHLER; // sowas ist immer gut, falls der user was dummes eingibt
	}
}
Das Enum sieht dann so aus:
Code:
public enum Entscheidung {

	STARTEN, EINFACH, AUTOMOBILBRANCHE, FEHLER, EMPTY;
}
In der Verwendung:
Code:
Entscheidung entscheidung = entscheidungCheck.checkEntscheidung(input);

switch(entscheidung) {

case STARTEN:
	
	// dein code
	break;

case EINFACH:
	
	// dein code
	break;
	
case AUTOMOBILBRANCHE:
	
	// dein code
	break;

case FEHLER:
	
	// dein code
	break;
	
}