ungewollte Abbrüche in einer Endlosschleife

Cyston

Mitglied
Hallo Forum,

hier ist erstmal der komplete Code:

Java:
package endlosschleifemitwhile;
import javax.swing.JOptionPane;

public class EndlosSchleifeMitWhile
{

	
	public static void main(String[] args)
	{
		char zeichen = '-';
		int wert1 = 45, wert2 = 10, resultat = 0;
		String eingabe;
		
		while (true)
		{
			if((eingabe = JOptionPane.showInputDialog("Geben Sie einen arithmetischen Operator ein:" +
					"\n(die Eingabe von \"!\" beendet das Programm)")) == null || eingabe.equals("!"));
			{
				JOptionPane.showMessageDialog(
						null,
						"Das Programm wurde beendet.",
						"ENDE",
						JOptionPane.INFORMATION_MESSAGE);
				
				System.exit(0);
			}
			
			if (eingabe.length() != 1)
				JOptionPane.showMessageDialog(
						null,
						"Sie dürfen nur ein Zeichen eingeben",
						"EINGABEFEHLER",
						JOptionPane.WARNING_MESSAGE);
			
			else
			{
				zeichen = eingabe.charAt(0);
				
				if (zeichen == '+' || zeichen == '-' || zeichen == '*' || zeichen == '/' || zeichen == '%')
				{
					switch (zeichen)
					{
					case '+': resultat = wert1 + wert2; break;
					case '-': resultat = wert1 + wert2; break;
					case '/': resultat = wert1 + wert2; break;
					case '%': resultat = wert1 + wert2; break;
					case '*': resultat = wert1 + wert2; break;
					}
					
					JOptionPane.showMessageDialog(
							null,
							"Das Resulat von " + wert1 + " und " + wert2 + " ist " + resultat + ".",
							"RESULTAT",
							JOptionPane.PLAIN_MESSAGE);
				}
				else
				{
					JOptionPane.showMessageDialog(
							null,
							"Sie haben ein falsches Zeichen eingeben",
							"EINGABEFEHLER",
							JOptionPane.ERROR_MESSAGE);
				}
			}
		}
	}

}

es soll folgendes mit dem Programm bezweckt werden:

In einer Endlosschleife soll ein Operator eingegeben werden (nur ein Zeichen erlaubt).
Die einzige Möglichkeit das Programm zu beenden sollte in diesem Code sein:

Java:
if((eingabe = JOptionPane.showInputDialog("Geben Sie einen arithmetischen Operator ein:" +
					"\n(die Eingabe von \"!\" beendet das Programm)")) == null || eingabe.equals("!"));
			{
				JOptionPane.showMessageDialog(
						null,
						"Das Programm wurde beendet.",
						"ENDE",
						JOptionPane.INFORMATION_MESSAGE);
				
				System.exit(0);
			}

Jede andere Eingabe außer einem arithmetischen Operator sollte eine Fehlermeldung anzeigen

Java:
else
				{
					JOptionPane.showMessageDialog(
							null,
							"Sie haben ein falsches Zeichen eingeben",
							"EINGABEFEHLER",
							JOptionPane.ERROR_MESSAGE);
				}

ebenfalls wird ein Hinweis ausgegeben wenn mehr als nur ein Zeichen eingegeben wird:

Java:
if (eingabe.length() != 1)
				JOptionPane.showMessageDialog(
						null,
						"Sie dürfen nur ein Zeichen eingeben",
						"EINGABEFEHLER",
						JOptionPane.WARNING_MESSAGE);

Mein Problem:

Es wird, unabhängig von meiner Eingabe, immer das Programm abgebrochen.
Eclipse zeigt ebenfalls keine Fehler.

Jemand ne Lösung?

Im OriginalCode wird auch ein Stringvariable (ausgabe) angegeben, diese wird jedoch im gesamten Code nicht benützt. Deshalb habe ich das gleich ausgelassen.
 
du musst nur deinen ersten Teil der if-Verzweigung ändern:

Java:
while (true) {
			eingabe = JOptionPane
					.showInputDialog("Geben Sie einen arithmetischen Operator ein:"
							+ "\n(die Eingabe von \"!\" beendet das Programm)");
			if (eingabe == null || eingabe.equals("!")) {
				JOptionPane.showMessageDialog(null,
						"Das Programm wurde beendet.", "ENDE",
						JOptionPane.INFORMATION_MESSAGE);

				System.exit(0);
			}
//und dann den restlichen Code
 
Zuletzt bearbeitet:
jgh vielen Dank.

Deine Lösung hat geklappt aber kann ich die beiden Anweisungen nicht innerhalb if machen? das ergebnis ist zwar das selbe aber es geht mir mehr um den aufbau. eigentlich sollte es innerhalb der if ebenfalls gehen aber ich bekomm den code nicht zusammen.
 
Hallo Forum,

hier ist erstmal der komplete Code:

Java:
package endlosschleifemitwhile;
import javax.swing.JOptionPane;

public class EndlosSchleifeMitWhile
{

	
	public static void main(String[] args)
	{
		char zeichen = '-';
		int wert1 = 45, wert2 = 10, resultat = 0;
		String eingabe;
		
		while (true)
		{
			if((eingabe = JOptionPane.showInputDialog("Geben Sie einen arithmetischen Operator ein:" +
					"\n(die Eingabe von \"!\" beendet das Programm)")) == null || eingabe.equals("!"));
			{
				JOptionPane.showMessageDialog(
						null,
						"Das Programm wurde beendet.",
						"ENDE",
						JOptionPane.INFORMATION_MESSAGE);
				
				System.exit(0);
			}
			
			if (eingabe.length() != 1)
				JOptionPane.showMessageDialog(
						null,
						"Sie dürfen nur ein Zeichen eingeben",
						"EINGABEFEHLER",
						JOptionPane.WARNING_MESSAGE);
			
			else
			{
				zeichen = eingabe.charAt(0);
				
				if (zeichen == '+' || zeichen == '-' || zeichen == '*' || zeichen == '/' || zeichen == '%')
				{
					switch (zeichen)
					{
					case '+': resultat = wert1 + wert2; break;
					case '-': resultat = wert1 + wert2; break;
					case '/': resultat = wert1 + wert2; break;
					case '%': resultat = wert1 + wert2; break;
					case '*': resultat = wert1 + wert2; break;
					}
					
					JOptionPane.showMessageDialog(
							null,
							"Das Resulat von " + wert1 + " und " + wert2 + " ist " + resultat + ".",
							"RESULTAT",
							JOptionPane.PLAIN_MESSAGE);
				}
				else
				{
					JOptionPane.showMessageDialog(
							null,
							"Sie haben ein falsches Zeichen eingeben",
							"EINGABEFEHLER",
							JOptionPane.ERROR_MESSAGE);
				}
			}
		}
	}

}

...

Naja, eigentlich musst du nur das Semikolon in Zeile 17 entfernen. Das würde auch schon helfen. ;-)

Aber ich will nicht als gerade eben frisch Registrierter klugschei****; hab' das Programmierbeispiel nämlich gestern von meinem Prof. bekommen und dort gerade nach etwas gesucht, dabei deinen Beitrag entdeckt und prompt den Fehler durch Vergleichen gefunden. Verflixte Semiklolons nochmal.^^
 
jgh vielen Dank.

Deine Lösung hat geklappt aber kann ich die beiden Anweisungen nicht innerhalb if machen? das ergebnis ist zwar das selbe aber es geht mir mehr um den aufbau. eigentlich sollte es innerhalb der if ebenfalls gehen aber ich bekomm den code nicht zusammen.

klar^^, wenn du das semikolon in zeile 17 entfernst.

Edit: to late 🙁
 

Neue Themen


Zurück
Oben