Taschenrechner springt an Start nach falscher Eingabe

engelsteufelin

Mitglied
Wenn man eine Zahl eingegeben hat soll man zurück zur letzten Zahl springen können und nicht an den Anfang des Programms.
Also wenn man die 2. Zahl falsch hat das er dann zu Zahl 2 sprint.
Das gleiche auch beim Operator.
Und das er die voherigen Zahlen solange zwischenspeichert wenn etwas falsch ist.

Das macht er nur leider nicht. hmm :bahnhof:
Wie stelle ich das an, das er es macht?

Java:
import static java.lang.System.out;
import java.util.Scanner;
    
public class test_1 {

   public static void main(String[] args) {
      new test_1();
      
      Scanner s = new Scanner (System.in);
      Werkzeug input= new Werkzeug();
      do {
          out.println("Bitte geben Sie Ihre Rechenaufgabe ein:");
          out.println("="+input.calc());
          out.print("Eine weitere Aufgabe rechnen? (j/n) ");
       }
       while(s.next().equals("j"));
    }
   }

Java:
import java.util.InputMismatchException;
import static java.lang.System.out;
import java.util.Scanner;

public class Werkzeug extends test_1 {
	   
	   public double calc() {
		   try {
	   
	    	 Scanner s = new Scanner (System.in);
	    	 
	         double nummer1 = s.nextDouble();
	         String operator = s.next();
	         double nummer2 = s.nextDouble();
	         
	        // if(nummer1==)
	         if(operator.equals("+")) {
	            return addieren(nummer1, nummer2);
	         }
	         else if(operator.equals("-")) {
	            return subtrahieren(nummer1, nummer2);
	         }
	         else if(operator.equals("*")) {
	            return multiplizieren(nummer1, nummer2);
	         }
	         else if(operator.equals("/")) {
	        	 if (nummer2== 0){
	        	out.println("Teilen durch 0 funktioniert nicht");
	        	}
	        	 else
	        	 {
	            return dividieren(nummer1, nummer2);
	        	 }
	         }
	         else
	        	 {
	        	 out.println("Hä?");
	        	 return 9;
	        	 }
		   }	      
	      catch(InputMismatchException e) {
	    	  out.println("Geben Sie pro Zeile nur eine Zahl bzw. einen Operator ein!\nZwischen zwei Zahlen muss ein Operator eingeben werden.");
	      }     
	      return 0.0;
	   }
	   public double subtrahieren(double minuend, double subtrahend) {
	      return minuend - subtrahend;
	   }
	   public double addieren(double summand1, double summand2) {
	       return summand1 + summand2;
	   }
	   public double dividieren(double dividend, double divisor) {
	      return dividend / divisor;
	   }
	   public double multiplizieren(double factor1, double factor2) {
	       return factor1 * factor2;
	   }
}
 
das ist doch recht deutlich, die Eingaben ausbauen, mehrere Versuche für jede Zahl usw.
Java:
             double nummer1 = s.nextDouble();
             String operator = s.next();
             double nummer2 = s.nextDouble();
ist der Code bisher, das muss ausgebaut werden,
eine Methode fürs Zahlen einlesen mit Schleife, Wiederholung solange Fehler usw.

einfach nur die Frage stellen ist in der Tat bisschen wenig, gar keine Ideen zum Vorgehen?
 
Danke, jetzt habe ich die Frage versatnden, bzw was damit gemeint ist. Sorry, war aus der Fragestellung und dem Code für mich nicht gleich ganz klar ;-)

SlaterB hat es ja schon beantwortet, würde ich sagen

Nebenbei eine Frage, warum extends Werkzeuge deine test_1 classe?
 
Danke, jetzt habe ich die Frage versatnden, bzw was damit gemeint ist. Sorry, war aus der Fragestellung und dem Code für mich nicht gleich ganz klar ;-)

SlaterB hat es ja schon beantwortet, würde ich sagen

Nebenbei eine Frage, warum extends Werkzeuge deine test_1 classe?

also quasi für jede eingabe eine while schleife einbauen und wenn des falsch ist springt sie wieder zurück und der Rest bleibt gespeichert?
 
Java:
public class Werkzeug extends test_1 {
	
	public double z(){
		Scanner s = new Scanner(System.in);
		double zahl;
		try{
			zahl=s.nextDouble();
			return zahl;
		}
		catch(Exception e)
		{
			System.out.println("das war Mist? \ngib bitte nochmal die Zahl ein");
		}
		return z();
	}
	public String d (){
		Scanner s = new Scanner(System.in);
		String operator = s.next();
		
			if(operator.equals("+")||operator.equals("-")||operator.equals("*")||operator.equals("/"))
			{
			return operator;
			}
			else
			{
				out.println("Operator falsch. \nBitte nochmal eingeben.");
				return d();
			}
	}   
	   public double calc() {
		   try {
			   
	         double nummer1 = z();
	         
	         String operator = d();
	         
	         double nummer2 = z();
	         
	         
	        // if(nummer1==)
	         if(operator.equals("+")) {
	            return addieren(nummer1, nummer2);
	         }
	         else if(operator.equals("-")) {
	            return subtrahieren(nummer1, nummer2);
	         }
	         else if(operator.equals("*")) {
	            return multiplizieren(nummer1, nummer2);
	         }
	         else if(operator.equals("/")) {
	        	 if (nummer2== 0){
	        	out.println("Teilen durch 0 funktioniert nicht");
	        	}
	        	 else
	        	 {
	            return dividieren(nummer1, nummer2);
	        	 }
	         }
	         else
	        	 {
	        	 out.println("Hä?");
	        	 return 9;
	        	 }
		   }	      
	      catch(InputMismatchException e) {
	    	  out.println("Geben Sie pro Zeile nur eine Zahl bzw. einen Operator ein!\nZwischen zwei Zahlen muss ein Operator eingeben werden.");
	      }     
	      return 0.0;
	   }
	   public double subtrahieren(double minuend, double subtrahend) {
	      return minuend - subtrahend;
	   }
	   public double addieren(double summand1, double summand2) {
	       return summand1 + summand2;
	   }
	   public double dividieren(double dividend, double divisor) {
	      return dividend / divisor;
	   }
	   public double multiplizieren(double factor1, double factor2) {
	       return factor1 * factor2;
	   }
}

JUHU it works. :toll:
 
Ok, auch eine möglichkeit, zwar eher selten das mittels rekursion zu lösen aber wie du ja siehst möglich =)
 

Neue Themen


Zurück
Oben