if-then statement soll nur Zahlen zulassen

  • Themenstarter Themenstarter TitoTatanka
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
T

TitoTatanka

Gast
Hi,

ich möchte ein Programm schreiben, in dem bei einer Fehleingabe darauf hingewiesen wird das nur Zahlen als Eingabe zulässig sind. Intuitiv hab ich's so gelöst:

Code:
/**Gibt bei Fehleingaben eine Meldung aus und kehrt zum Anfang der Schleife zurück.*/
    private void fehleingabe() throws IOException
    {
    	if (operand1 == boolean)
    	{
    		MeineAusgabe.schreibe("richtige Eingabe");
    	}
    	else MeineAusgabe.schreibe("Fehleingabe");
    }

Ist natürlich falsch. Mit welchem Befehl kan ich im if-then statement bewirken, das Zahleneingaben von Texteingaben unterschieden werden?

LG Tito
 
Was ist denn operand1 für ein typ/klasse? Genau genommen versteh ich nicht, was dein Beispielcode mit deinem Problem zu tun haben soll ???:L
 
operand1 ist ein Attribut, dem der Benutzer zuvor einen Wert zuordnen kann...
 
Super, Attribut ... das hilft mir jetzt enorm dir zu helfen :roll: Schonmal in Java die Klasse 'Attribut' gesehen? Ich nämlich nicht!
 
Versteh ich Dich richtig, dass Du eigentlich eine Exception mit eigener Meldung für den Fall werfen willst, wenn in operand1 keine Zahl steht?
 
also so sieht die komplette Klasse aus:

Code:
import java.io.IOException;
 
 
 public class Taschenrechner
 {
 	/**Attribut zur Erfassung des 1. Operanden*/
 	private double operand1;
 	/**Attribut zur Erfassung des 2. Operanden*/
 	private double operand2;
 	/**Attribut zur Erfassung  der Operation*/
 	private String operation;
 	/**Attribut welches das Ergebnis liefert.*/
 	private double ergebnis;
 	/**Attribut zum Starten einer neuen Berechnung*/
 	private String neu;	
 
 
 
    public Taschenrechner() throws IOException
    {
 	   /**Methode die die Operanden festlegt*/
 	   legeOperandenFest();
 	   /**Methode die Fehleingaben berücksichtigt*/
 	   //fehleingabe();
 	   /**Methode zur Erfassung der Operation*/
 	   legeOperationFest();
    }
 
    /**Ermöglicht die Eingabe der Operanden*/
    private void legeOperandenFest() throws IOException
    {
       MeineAusgabe.schreibe ("                                 Taschenrechner");
 	   MeineAusgabe.schreibe ("\n\nBitte geben Sie den 1. Operanden ein:            ");
       operand1 = MeineEingabe.erfasseDouble();
 	   MeineAusgabe.schreibe ("Bitte geben Sie den 2. Operanden ein:            ");
 	   operand2 = MeineEingabe.erfasseDouble();
 	   
 	   if (operand2 == 0)
 	   {
 	   	
 	   }
 	   MeineAusgabe.schreibe ("Bitte waehlen Sie die Operation (+ - * / %):     ");
 	   operation = MeineEingabe.erfasseText();
    }
    
    /**Gibt bei Fehleingaben eine Meldung aus und kehrt zum Anfang der Schleife zurück.*/
    /*private void fehleingabe() throws IOException
    {
    	if (operand1 == boolean)
    	{
    		MeineAusgabe.schreibe("richtige Eingabe");
    	}
    	else MeineAusgabe.schreibe("Fehleingabe");
    }*/
    
    /**Ermöglicht die Eingabe der Operation, weist auf Fehleingaben hin*/
    private void legeOperationFest() throws IOException
    {
    	if (operation == "+")
    	{
    		ergebnis = operand1 + operand2;
    	}
    	else if (operation == "*")
    	{
    		ergebnis = operand1 * operand2;
    	}
    	else if (operation == "-")
    	{
    		ergebnis = operand1 - operand2;
    	}
    	else if (operation == "/")
    	{
    		ergebnis = operand1 / operand2;
    	}
    	else if (operation == "%")
    	{
    		ergebnis = operand1 % operand2;
    	}
    	else
    	{
    		MeineAusgabe.schreibe("Sie haben einen unzulässigen Operanden eingegeben. Bitte versuchen Sie es nochmal.");
    		System.exit(0);
    	}
    }
    
 }
 
Also

1.) Strings vergleicht man mit equals und nicht mit ==
2.) operand1 wird nie etwas anderes als ein double sein, da es als sochler deklariert wurde
3.) Die Abfrage muss beim Einlesen und anschließenden parsen des Strings geschehen und folglich in der Klasse "MeineEingabe" erfolgen
4.) Die "throws IOException"'s bei fehleingabe und legeOperationFest sind unnötig
 
achso übrigens gleich noch eine Frage zum if-then-statement...ich beende durch den Befehl "System.exit(0);" das Programm bei einer Fehleingabe...würde aber lieber zum Anfang der schleife springen, dass soll mit der "Continue"-Anweisung funktionieren...wisst ihr wie ich sie anwenden kann??

LG Tito
 
aaah okay darüber muss ich erstmal nachdenken...vielen Dank @ Hobbit
 
Dazu bräuchtest du erstmal eine Schleife :roll: . Ich würde dir empfehlen erstmal ein Einsteiger-Javabuch zu lesen bzw. weiter zu lesen! Dazu findest du in unserer Bücher/Links/Tutorials Sektion viele Angebote.

Dadurch lernst du dann erstmal die Basics, was dir hilft solche Probleme gleich selbst zu lösen (Wissen/Nachschlagen), deine Fragen hier so zu stellen, dass wir sie sofort richtig erfassen und dir somit ohne großes rumraten schneller helfen können und letztendlich auch unsere Antworten zu verstehen und umzusetzen 🙂 !
 
zu deiner 2. Antwort...es macht Sinn das Operand1 nur vom Typ boolean seien kann, ist schließlich so deklariert...

Das Programm würde also abbrechen, wenn Buchstabenwerte eingegeben werden!? Wie kann ich das verhindern und stattdessen einen Hinweis zur Fehleingabe anzeigen lassen???
 
Anonymous hat gesagt.:
zu deiner 2. Antwort...es macht Sinn das Operand1 nur vom Typ boolean seien kann, ist schließlich so deklariert...

Zuersteinmal habe ich geschrieben, dass operand1 nur vom Typ double sein kann und nicht vom Typ boolean. Ein boolean ist ein Wahrheitswert, speichert also true oder false. Ein double ist eine Gleitkommazahl, speichert also Zahlen mit Komma.

Anonymous hat gesagt.:
Das Programm würde also abbrechen, wenn Buchstabenwerte eingegeben werden!?

Das kommt ganz darauf an wie das die Klasse 'MeineEingabe' handhabt. Im Idealfall wirft 'MeineEingabe' eine IOException, die du dann in einem try-catch-Block auffangen und entsprechend reagieren kannst.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben