# Wo ist mein Fehler ? o:



## MCmarekAF (4. Feb 2013)

Hallo Leute , ich habe ein Problem :bahnhof: : ich habe ein Programm geschrieben , aber habe Schwierigkeiten , da es zwar funktioniert , aber nicht ganz so wie ich das möchte .
Dieses Programm sollte eigentlich ein Taschenrechner sein , mit dem man die vier Grundrechenarten ausführen können sollte ...  ich habe eifach mal ein paar kommentare in den Quellcode geschrieben , damit ihr seht was genau nicht funktioniert .
Ich hoffe das ihr mir weiterhelfen könnt und freue mich auf eure antworten 



```
import java.util.Scanner;


public class Klasse{
  
public static void main(String args[]){
	  Scanner s = new Scanner(System.in);
	  
	  double x ;
	  
	  System.out.println("Welche Art der Rechnung möchten Sie durchführen ?  ");
System.out.println(" ");
	  System.out.println("Tippen Sie für Addition die : 1,");
	  System.out.println("für Subtraktion die : 2 ,");
	  System.out.println("für Multiplikation  die : 3 ,");
	  System.out.println("Und für Division  die : 4 ein. ");
	  
	  
	   x =s.nextInt();                                 // das wird zwar richtig ausgeführt , aber wenn die erste Zahl , die ich eingebe , kleiner oder gleich 4 ist , dann springt er in eine der anderen methoden :/
	  Addition(x);
	  Subtraktion(x);
	  Multiplikation(x);                               // das wird immer zweimal aufgeführt ..
	  Division(x);}                                    // wenn ich die Division wähle , führt er es zwar aus , aber 3 mal o: ich hab aber keine ahnung wieso ..
	  
	
	
	private static void Addition(double a){
	  if (a==1){
		  Scanner s = new Scanner(System.in);
		  System.out.println("Geben sie die erste Zahl ein :");
		  a = s.nextInt();
		  System.out.println("Geben Sie die zweite Zahl ein :");
		 double b = s.nextInt();
		  double c = a +b ;
		  System.out.println("Die Summe aus " + a + " und " + b + " ist : " + c);
		  Subtraktion(a);
		  
	  }
	  }
	  
	private static void Subtraktion(double b){
  if(b==2){
	
	Scanner sn = new Scanner(System.in);
	  
		  System.out.println("Geben sie die erste Zahl ein :");
		 double d = sn.nextInt();
		  System.out.println("Geben Sie die zweite Zahl ein :");
		 double e = sn.nextInt();
		  double f = d - e ;
		  System.out.println("Die Differenz  aus " + d + " und " + e + " ist : " + f);
  }
        Multiplikation(b);
		  
	  }
	 
	private static void Multiplikation(double c){ // 50
  if (c==3){
	
	Scanner s = new Scanner(System.in);
	  System.out.println("Geben sie die erste Zahl ein :"); 
	  double g = s.nextInt();
	  System.out.println("Geben Sie die zweite Zahl ein :");
	  double h = s.nextInt();
	  double i = g * h ;
	  System.out.println("Das Produkt aus " + g + " und " + h + " ist : " + i);
	   
  }
     Division(c);
	  }
	
	private static void Division (double d){
  if (d==4){
	
	Scanner s = new Scanner(System.in);
	  System.out.println("Geben sie die erste Zahl ein :");
	  double j = s.nextInt();
	  System.out.println("Geben Sie die zweite Zahl ein :");
	  double k = s.nextInt();
	  double l = j / k ;
	  System.out.println("Der Quotient on " + j + " und " + k + " ist : " + l);
	  
	  
	  
  }
	}
	}
```


----------



## Timothy Truckle (4. Feb 2013)

MCmarekAF hat gesagt.:


> [JAVA=19]	   x =s.nextInt();                                 // das wird zwar richtig ausgeführt , aber wenn die erste Zahl , die ich eingebe , kleiner oder gleich 4 ist , dann springt er in eine der anderen methoden :/
> // Was jetzt kommt ist keine auswahl sondern sumpfes nacheinander aufrufen der Methoden.
> // es ist also kein Wunder, dass er in jede rein geht, egal was Du eingegeben hast.
> Addition(x);
> ...


bye
TT


----------



## MCmarekAF (4. Feb 2013)

ist es denn schlimm , dass er dann nochmal in jede methode reingeht  ? 
Ich meine , dass er es auch nur ausführt wenn die Annforderungen der Schleife erfüllt werden oder ?

ähhm zu dem zweitem : ich habe mir ein paar Tutorial auf youtube angeguckt und da wurde gesagt , dass es egal ist wie ich die Variable in der Methode nenne o: hat das irgend eine Auswirkung auf das problem das ich habe ? 

beim dritten fällt mir nichts auf o: was habe ich falsch gemacht ?
danke für deine Hilfe (


----------



## Timothy Truckle (4. Feb 2013)

MCmarekAF hat gesagt.:


> ist es denn schlimm , dass er dann nochmal in jede methode reingeht ?


Ja, weil du so verschleierst, dass 
	
	
	
	





```
x
```
 die Art der Rechenoperation auswählt. Deine Taktik wird dir noch richtig Kopfzerbrechen bereiten, wenn Du mal 'ne GUI für Deinen Taschenrechner nachrüsten musst.

Es gibt eine bessere prozedurale Lösung mittels 
	
	
	
	





```
switch
```
 und eine noch bessere OO-Lösung mittels 
	
	
	
	





```
enum
```
 dafür. Beide machen Dein Programm aber nicht GUI-tauglicher. Dazu ist es jetzt noch zu schlecht.



MCmarekAF hat gesagt.:


> wenn die Annforderungen der Schleife erfüllt


Du hast keine Schleifen, nur Verzweigungen.



MCmarekAF hat gesagt.:


> ich habe mir ein paar Tutorial auf youtube angeguckt und da wurde gesagt , dass es egal ist wie ich die Variable in der Methode nenne o:


Den Namen ja, aber der *Typ* muss stimmen. In diesem Fall klappt das rein technisch, weil Java deinen 
	
	
	
	





```
int
```
 heimlich in einen 
	
	
	
	





```
double
```
 umwandelt. Da aber fließkommazahlen in Computerprogrammen so generell ihre Probleme haben kann das auch mal ganz böse in's Auge gehen.



MCmarekAF hat gesagt.:


> beim dritten fällt mir nichts auf o: was habe ich falsch gemacht ?


*Das* Ist (in Verbindung mit 1) die Ursache für Dein Wiederholungsproblem:
Am Ende der Subtraction (die er wegen dem if am Anfang nicht macht) ruft er die Division das erste mal auf (und führt sie durch). Nach der (ebenfalls nicht durchgeführten) Multiplikation noch mal, und dann noch mal aus Zeile 23. Macht 3 Durchläufe für die Division.

Die Frage die man sich stellen muss ist: warum solle nach einer Subtraktion eine Divison aufgerufen werden?

bye
TT


----------



## tröööt (4. Feb 2013)

kann mir mal bitte wer erklären was dieser thread hier in diesem sub-forum zu suchen hat ?

ich glaube man sollte in die faq noch sowas wie folgendes aufnehmen : was ist das richtige sub-forum ?


----------

