# Währungsrechner



## coldstone (4. Apr 2012)

Hallo liebe JAVA Freunde;

muss einen Währungsrechner programmieren.

Das Lernziel ist es das Einlesen und Schrieben von Unicode-Zeichen aus der bzw. in die Konsole!

HAbe mal wie folgt angefangen:
BItte nicht gleich köpfen. Sind erst die ersten Überlegungen. 

```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class umrechner {
	
	
	public static String E;
	public static String e;
	public static String U;
	public static String u;
	private final double KURS = 1.29535;

	public static void main (String[] args) throws IOException {
		
		String waerung = waerungEingeben("Waerung");
				
		if(waerung == E || waerung == e ) {
			
			System.out.println("Euro");
			
			
		} else {
			if(waerung == U || waerung == u ) {
				
				System.out.println("Dollar");
				
			} else {
				System.out.println("Falsche Eingabe bitte nochmal");	
			}
			
		}
	
	}
	
	public static String waerungEingeben(String waerung) throws IOException {
		
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		 System.out.print("Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar ? :");
		 return br.readLine();		
	}
}
```

Aber irgendwas ist an der IF-Anweisung falsch (vielleicht auch wo anders)!
Wenn "E" oder "e" eingegeben wird, dann sollte er "Euro" ausgeben.
Wenn "U" oder "u" eingegeben werden, dann sollte er "Dollar" ausgeben.
Bei allen anderen Eingaben sollte er "Falsche Eingabe bitte nochmal" ausgeben.

Es wird aber immer "Falsche Eingabe bitte nochmal" ausgeben. Egal was eingeben wird.

Weis einer warum?


----------



## Gast2 (4. Apr 2012)

Strings vergleicht man per 
	
	
	
	





```
equals
```
.


----------



## Final_Striker (4. Apr 2012)

ein Beispiel: http://www.java-forum.org/top-fragen/1350-vergleichen-strings.html


----------



## coldstone (4. Apr 2012)

stimmt, wie dumm von mir.


----------



## irgendjemand (4. Apr 2012)

1) Objekte vergleicht man mit Object.equals(Object) ... primitive Datentypen mit "=="
2) deine 4 strings sind nicht initialisiert ... zeigen daher auf NULL ...
3) du brauchst keine 2 vergleiche ... es gibt eine methode String.equalsIgnoreCase() der es egal ist ob groß oder klein
4) mit Java7 wäre auch swith(String) möglich

beispiel

```
String input=new java.util.Scanner(System.in).nextLine();
if(input.equalsIgnoreCase("E")) { System.out.println("Euro"); }
else { if(input.equalsIgnoreCase("U")) { System.out.println("Dollar"); }
else { System.out.println("ERROR"); } }
```


----------



## coldstone (24. Apr 2012)

Also ich habe mal ein bischen weiterprobiert und bin bis jetzt hier angekommen:


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class umrechner {
	
	
	public static String E = "E";
	public static String U = "U";
	private final double KURS = 1.29535;

	public static void main (String[] args) throws IOException {
		
		String waerung = waerungEingeben("Waerung");
		betragEingeben();
				
		if(waerung.equalsIgnoreCase(E) ) {
			
			System.out.println("Euro");
			
			
		} else {
			if(waerung.equalsIgnoreCase(U)) {
				
				System.out.println("Dollar");
				
			} else {
				System.out.println("Falsche Eingabe bitte nochmal");	
			}
		}
	}
	
	public static String waerungEingeben(String waerung) throws IOException {
		
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		 System.out.print("Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar ? :");
		 return br.readLine();
		}
	
	public static String betragEingeben() throws IOException {
		
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		 System.out.print("Betrag:");
		 return br.readLine();
		}
}
```

Nur bin ich mir nicht sicher ob die Methode betragEingeben() so korrekt ist? Muss der Wert denn nicht ein double wert sein? Eclipse gibt eine fehlermeldung! Oder muss das einlesen betrages anders gelöst werden?


----------



## irgendjemand (24. Apr 2012)

code-duplizierung und macht keine sinn ...
auch das init deiner string-objekte kannst du dir sparen ... frisst nur unnötig speicher ... kannst auch dierekt String.equalsIgnoreCase(String) schreiben ... macht das programm nur unübersichtlicher
warum du dann noch der einen mehtode einen string mitgibst und diesen nicht verwendest -> raus damit
und die beiden methoden haben absolut gleichen inhalt -> eine raus und die andere zwei mal callen


dir fehlen echt grundlagen ... zieh dir mal das hier rein : Galileo Computing :: Java ist auch eine Insel - index


----------



## Final_Striker (24. Apr 2012)

coldstone hat gesagt.:


> Nur bin ich mir nicht sicher ob die Methode betragEingeben() so korrekt ist? Muss der Wert denn nicht ein double wert sein? Eclipse gibt eine fehlermeldung! Oder muss das einlesen betrages anders gelöst werden?



Du musst den String in ein double umwandeln



```
String eingabe = "42";
double betrag = Double.parseDouble(eingabe);
```


----------



## coldstone (25. Apr 2012)

irgendjemand hat gesagt.:


> code-duplizierung und macht keine sinn ...


Verstehe nicht was du meinst, Sorry!



irgendjemand hat gesagt.:


> auch das init deiner string-objekte kannst du dir sparen ... frisst nur unnötig speicher ... kannst auch dierekt String.equalsIgnoreCase(String) schreiben ... macht das programm nur unübersichtlicher


Funktioniert nicht! Eclipse gibt fehlermeldung wenn ich die initialisierung von String E und String U nicht mache.


irgendjemand hat gesagt.:


> warum du dann noch der einen mehtode einen string mitgibst und diesen nicht verwendest -> raus damit
> und die beiden methoden haben absolut gleichen inhalt -> eine raus und die andere zwei mal callen


Wenn ich diese aber zweimal calle, dann mache ich doch zweimal die selbe abfrage :  
"Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar ? "

oder verstehe ich da was falsch???


----------



## AquaBall (25. Apr 2012)

coldstone hat gesagt.:


> Verstehe nicht was du meinst, Sorry!
> 
> 
> Funktioniert nicht! Eclipse gibt fehlermeldung wenn ich die initialisierung von String E und String U nicht mache.
> ...



Er meint: 
	
	
	
	





```
if(waerung.equalsIgnoreCase("E") )
```
 ginge auch. bringt aber bei einer späteren Verallgemeinerung (auf viele Währungen) nur Nachteile.
Er meint: Bei 
	
	
	
	





```
public static String waerungEingeben(String waerung)
```
 wird "String waerung" nie verwendet. Stimmt.
Er meint: 
	
	
	
	





```
public static String waerungEingeben(String waerung)
```
 und 
	
	
	
	





```
public static String waerungEingeben(String waerung)
```
 sind identisch (code-duplizierung). Stimmt nicht, weil eben wie du schreibst der Einagbeprompt unterschiedlich ist.
Köntest du aber ändern auf  

```
public static String eingeben(String prompt) throws IOException {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	System.out.print(prompt);
	return br.readLine();
}
```
Auch deine If abfrage ist gewissermaßen code-duplizierung, und wirst du in einer späteren Version sicher gegen eine Schleife ändern. (und da wäre seine Reklamation wegen Stringvergleich eben  ein Nachteil.)


----------



## Blackhole16 (25. Apr 2012)

coldstone hat gesagt.:


> Verstehe nicht was du meinst, Sorry!


Pass auf: Leg dich nicht mit irgendjemand an. Das kann bzw. wird sehr schlimm enden. Ich hab das schon hinter mir :lol:



> Funktioniert nicht! Eclipse gibt fehlermeldung wenn ich die initialisierung von String E und String U nicht mache.


er meint es so nach dem Motto: [c]waerung.equalsIgnoreCase("E")[/c]. Damit kannst du dann auch gleich deine beiden Strings oben löschen. Ist besser so.



> Wenn ich diese aber zweimal calle, dann mache ich doch zweimal die selbe abfrage :
> "Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar ? "


Das meint er so:
[java=25]
public static String waerungEingeben(String frage) throws IOException {

	 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	 System.out.print(frage);
	 return br.readLine();
}
[/code]

damit sieht dein Code dann so aus:


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Umrechner {
	public static String E = "E";
	public static String U = "U";
	private final double KURS = 1.29535;

	public static void main (String[] args) throws IOException {
		String waerung = eingeben("Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar? :");
		eingeben("Betrag:");
			
		if(waerung.equalsIgnoreCase(E) ) {
			System.out.println("Euro");
		} else if(waerung.equalsIgnoreCase(U)) {
			System.out.println("Dollar");
				
		} else {
			System.out.println("Falsche Eingabe bitte nochmal");	
		}
	}
	
	public static String eingeben(String frage) throws IOException {
		
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		 System.out.print(frage);
		 return br.readLine();
	}
}
```

So meine Änderungen:
Classes IMMER Groß schreiben!
Möglichst viele Leerzeilen weg.
Strukturierung besser.
Wie oben schon gesagt: aus 2 Methoden eine gemacht. Du kannst es auch so realisieren:
[java=25]
public static String eingeben(String frage) throws IOException {

	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	if (frage.equals("Währung")) {
		System.out.print("Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar? :");
	} else if(frage.equals("Betrag")) {
		System.out.print("Betrag:");
	}
	return br.readLine();
}
[/code]
Dann musst du natürlich beim Aufruf [c]eingeben("Währung");[/c] oder [c]eingeben("Betrag");[/c].

Ich hoffe, ich konnte dir helfen

mfg
BH16


----------



## coldstone (25. Apr 2012)

Ich fange mal von vorne an!

Also habe jetzt folgendes Gerüst aufgebaut:


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class umrechner {
	
	
	private final double KURS = 1.29535;
	

	public static void main (String[] args) throws IOException {
		
		waerungEingeben(null);
		betragEingeben(null);
			
	}
	
	public static String waerungEingeben(String waerung) throws IOException {
		
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		 System.out.print("Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar ? :");
		 return br.readLine();
		}
	
	public static String betragEingeben(String betrag) throws IOException {
		
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		 System.out.print("Geben Sie den Betrag an:");
		 return br.readLine();
		}

	
	public void berechne(){
		
				
	}
}
```

ich habe meinen Kurs deklariert und 2 Eingabekanäle erstellt.
1. waerungEingeben
2. betragEingeben
und eine Methode zur Berechnung des Kurses.

So, jetzt habe ich die währung bestimmt und den betrag eingegeben. Nur wie  Rechne ich den mit Strings?


----------



## Final_Striker (25. Apr 2012)

coldstone hat gesagt.:


> So, jetzt habe ich die währung bestimmt und den betrag eingegeben. Nur wie Rechne ich den mit Strings?



Darauf habe ich dich oben doch schon hingewiesen?!


----------



## coldstone (25. Apr 2012)

Final_Striker hat gesagt.:


> Darauf habe ich dich oben doch schon hingewiesen?!




Also habe es so eingebunden, aber es klappt nicht! Eclipse verweist daraufhin dass der double wert ein String sein muss?!


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
 
public class umrechner {
    
    
    private final double KURS = 1.29535;
    
 
    public static void main (String[] args) throws IOException {
        
        waerungEingeben(null);
        betragEingeben(null);
        double betrag = Double.parseDouble(betrag);

            
    }
    
    public static String waerungEingeben(String waerung) throws IOException {
        
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         System.out.print("Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar ? :");
         return br.readLine();
        }
    
    public static String betragEingeben(String betrag) throws IOException {
        
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         System.out.print("Geben Sie den Betrag an:");
         return br.readLine();
        }
 
}
```


----------



## Final_Striker (25. Apr 2012)

Dein Code zeigt, dass du das Prinzip was Parameterübergabe und Rückgabewerte bei Methoden überhaupt nicht verstanden hast, da musst du dich unbedingt noch mal schlau machen.


----------



## coldstone (25. Apr 2012)

Final_Striker hat gesagt.:


> Dein Code zeigt, dass du das Prinzip was Parameterübergabe und Rückgabewerte bei Methoden überhaupt nicht verstanden hast, da musst du dich unbedingt noch mal schlau machen.



Kannst du mir das bitte nicht an diesem Beispiel kurz erklären?


----------



## Final_Striker (26. Apr 2012)

schau mal hier:

http://www.java-forum.org/einfuehru...oden-codeabschnitte-fuer-funktionalitaet.html

Ansonsten ist das Bestandteil jedes Tutorials, einfach mal suchen. Das sind absolute Grundlagen, solange du das nicht verstanden hast, kommst du nicht sehr weit.


----------



## Blackhole16 (26. Apr 2012)

mal eine kurze Frage: was hat es jetzt gebracht, dass ich mir fast 30 minuten ans Bein gebunden habe, um deinen Code zu tweaken, dir zu helfen und es zu erklären, wenn du jetzt nochmal mit deinem sch... Code anfängst? hast du meinen Beitrag einfach überlesen? Ich habe dir da Tipps gegeben, wie du deinen Code sauberer halten kannst, z.B. auch, dass Leerzeilen eher zu vermeiden als zu vermehren sind. Aber wenn ich mir jetzt deinen ALTEN!?! (OMG) Code wieder anschaue, hast überhaupt IRGENTETWAS angenommen, was ich geschrieben habe???

BH16


----------



## bone2 (26. Apr 2012)

[WR]*waehrung[/WR]

@Blackhole16, das habe ich gerade auch gedacht... hier sind keine fragen mehr offen, die letzten beiden posts bevor er wieder von vorne anfängt zeigen alles was er braucht


----------



## NovaCP (26. Apr 2012)

Abgesehen davon solltest du, wenn du realisieren willst dass jmd nochmals eine Eingabe machen darf, eine while Schleife mit einbauen. Ein Else ("Bitte neu eingeben" o.ä. nimmt dir da keine Arbeit ab)


----------



## coldstone (26. Apr 2012)

Blackhole16 hat gesagt.:


> mal eine kurze Frage: was hat es jetzt gebracht, dass ich mir fast 30 minuten ans Bein gebunden habe, um deinen Code zu tweaken, dir zu helfen und es zu erklären, wenn du jetzt nochmal mit deinem sch... Code anfängst? hast du meinen Beitrag einfach überlesen? Ich habe dir da Tipps gegeben, wie du deinen Code sauberer halten kannst, z.B. auch, dass Leerzeilen eher zu vermeiden als zu vermehren sind. Aber wenn ich mir jetzt deinen ALTEN!?! (OMG) Code wieder anschaue, hast überhaupt IRGENTETWAS angenommen, was ich geschrieben habe???
> 
> BH16



Nun bleib mal ganz locker, ich habe mich doch dafür bedankt. Finde es ja wirklich super das man versucht jemanden zu helfen, aber jemanden dann noch versuchen anzugreifen in dem mann sein code als sch.... bezeichnet (siehe sch....zitat) ist doch unter aller sau. Wie gesaggt ich habe mich auch immer für die hilfen von leuten bedankt, aber sowas ist schon armselig. 
Ja ich habe deinen Post zur kenntnis genommen und es war auch schon hilfreich nur hat es mich nicht zu meinem Ziel gebracht.
Eine Nachfrage von dir (Blackhole) ob es denn nicht geholfen hat und warum ich jetzt neu anfangen will, wäre angebrachter gewesen. 
Du scheinst wirklich Ahnung von dem Material zu haben, aber mit solchen Beiträgen hilfst du niemanden weiter. Es ist noch kein Meister vom Himmel gefallen.´
Aber ich gehe davon aus, dass du einen schlechten Tag hattest und nur deine Moral hier ausgelassen hast.


Ist schon traurig das Herr bone2 auch noch solche Aussagen unterstützt. Ich denke so ein Forum ist da um leuten zu helfen und nicht um leute zu erniedrigen. Also ganz locker bleiben und Tee trinken. SOll die Nerven wieder beruhigen.


----------



## Gast2 (26. Apr 2012)

> Ja ich habe deinen Post zur kenntnis genommen und es war auch schon hilfreich nur hat es mich nicht zu meinem Ziel gebracht.



Dann poste mit Beispiel wieso nicht...


----------



## Pippl (26. Apr 2012)

coldstone hat gesagt.:


> Ja ich habe deinen Post zur kenntnis genommen und es war auch schon hilfreich nur hat es mich nicht zu meinem Ziel gebracht.



warum hat er dich nicht zum ziel gebracht? was macht sein code nicht/falsch?
wobei hängst du noch?


----------



## AquaBall (26. Apr 2012)

Lieber coldstone.
Sei uns bitte nicht böse, dass wir nicht in der Lage sind dir zu helfen.
Aber es hat nicht den Eindruck, dass du irgendeinen Tip ernst nimmst.
Nach 20 Einträgen schreibst du:


coldstone hat gesagt.:


> Ich fange mal von vorne an!


Und wirfst dabei alle bisherigen Hinweise und "Erfolge" in den Müll.

Der Code den du dann präsentierst:


coldstone hat gesagt.:


> ```
> public class umrechner {
> private final double KURS = 1.29535;
> public static void main (String[] args) throws IOException {
> ...


macht nicht den Eindruck, dass du jemals ein Programm zum Laufen gebracht hast. 

Das wird durch den Nachtrag:

```
double betrag = Double.parseDouble(betrag);
```
nicht besser, sondern massiv schlimmer. (Schon diese Zeile zeigt, dass du dich noch nicht damit beschäftigt hast: 

Was ist ein String? 
Was ist ein double? 
Wie legt man fest, welchen Typ eine Variable hat.
Wann muss eine Variable definiert werden? 
Wann muss eine Variable instanziiert werden? 
Wann muss eine Variable initialisiert werden?
Wie kommt da ein Wert rein? 
Wann muss ich umwandeln? 
Was soll mit diesem Wert passieren? 
... Also stecken allein in dieser Zeile ca. 5 schwere Fehler, kaum zu glauben, dass das möglich ist.)

Klar, jeder muss irgendwie anfangen, und das Forum ist für Anfänger gedacht.
Und es wird auch nicht erwarte,t dass du alles kannst, (sonst wäre das Forum sinnlos), aber du musst dir 
 Grundlagen anschauen, in kleinen Schritten.
 Hilfe annehmen
 selbst Energie reinstecken und angebotene Tips durchdenken + recherchieren.

Und beim 1 Post schreibst du von "Lernziel: Unicode + Console". Klingt danach als als wolltest du von einem CodeTable auf eine andere übersetzen, oder gar mit japanischen Schriftzeichen arbeiten solltest. (Das ist auch der Grund, warum ich deine Eingabeart über stream gar nicht thematisiert habe, obwohl ich sie absolut unnötig finde. Mit SCANNER geht das viel lockerer. Gibt 1000de Tutorials dazu.) 
 Doch davon bist du anscheinend meilenweit entfernt. Und bist dabei so beratungsresistent, dass ich gut versteh, wenn da dann manche die Geduld verlieren ich hab mich auch schon ausgeklinkt.

Vielleicht solltest du mit VIIIEEEL kleineren Beispielen anfange. Einfach das Ergebnis einer Multiplikation in der Konsole anzeigen.

*Ich mein' das weder zynisch noch abwertend, sondern ich würde dir das WIRKLICH freundschaftlich dringend empfehlen, dass du mal kennenlernst, was Variablen sind / machen.

Viel Erfolg*


----------



## coldstone (26. Apr 2012)

Schade das man mehr Antworten darauf bekommt, das man "keine Ahnung" und "uninterressiert" und "lustlos" bei der Sache ist. 
Anscheinend werden erfahrene  Java Programmiere bevorzugt als Anfänger. 
Die könne sich anscheinend einige Ausdrücke mehr erlauben als unerfahrene.
Vielleicht erlange ich auch später bisschen mehr Erfahrung und darf dann auch Anfänger-Codes mit "sch... code" bezeichnen, da ja sowas anscheinend toleriert wird.

Nun, ich möchte das Thema nicht weiter ausdehnen.

Falls jemand noch Interesse hat zu helfen, ist jede Hilfe oder hinweis gerne willkommen.
Warum jetzt der code von Blackhole nicht zu meinem Ziel geführt hat, hat den Hintergrund das die komplette Aufgabenstellung so lautet:


```
Schreiben Sie ein Programm Eurorechner.java, mit dem Umrechnungen eines Euro-Betrages in einen US Dollar-Betrag und umgekehrt vorgenommen werden können.

Beginnen Sie dazu mit der folgenden Abfrage:

"Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar ? : "
                  

     Wird E oder e eingegeben, dann wird für den eingegebenen Wert der entsprechende US Dollar-Betrag ausgegeben.
     Wird U oder u eingegeben, dann wird für den eingegebenen Wert der entsprechende Euro-Betrag ausgegeben.

Testen Sie die Eingaben, ob auch wirklich Zahlenbeträge eingegeben worden sind und reagieren Sie gegebenenfalls darauf:

"Falsche Eingabe bitte nochmal! "
                  

Geben Sie dem Anwender die Möglichkeit, das Programm noch einmal zu wiederholen:

"Wollen Sie noch einmal j/n? : "
                  

Der Umrechnungswert (Stand März 2009) von Euro in US Dollar, der in die Berechnung mit eingeht lautet :

private final double KURS = 1.29535;
```

Soll nicht heißen das der code von Blackhole falsch war, sondern das ich mit dem code nicht an mein Ziel kommen konnte. (weil ich noch Anfänger bin)

Wie gesagt falls jemand noch helfen möchte bin ich sehr dankbar. Ansonsten allen die schon versucht haben zu helfen einen großen Dank!


----------



## Blackhole16 (27. Apr 2012)

Da du es ja einfach nicht lassen kannst: ich bin gerade in der Schule. Aber wenn du noch ein wenig Gedult zeigen kannst, werde ich dir das volstaendige Programm schreiben und dann kannst  du gerne deine Fehler suchen. Ich werde versuchen, auf Basis deines 



coldstone hat gesagt.:


> "sch... code"


s zu machen. Wenn dir dan noch nicht reicht, dann weiss ich leider auch nicht weiter...

BH16

PS: Trotz des Threads werde ich versuchen, es als Herausforderung zu sehen...


----------



## irgendjemand (27. Apr 2012)

i've got screwed xD

ne im ernst

ist ja richtig das das forum für anfänger gedacht ist und dafür bei problemen zu helfen ... aber wir sind nun mal nicht hier um dir die grundlagen beizubringen ...
wenn du private-nachhilfe möchtest meld dich mal in der jobbörse ...

auch ich kann mich nur noch mal wiederholen : lern erstmal die grundlagen und arbeite dich stück für stück durch tutorials bei denen auch muster-lösungen angeboten und diese zeile für zeile erklärt werden
es bringt dir doch auch nichts wenn wir dir jetzt was zusammenbasteln *was für viele hier kein problem sein sollte* das du dann aber nicht verstehst ...
aber wie erwähnt sind wir auch nicht dafür da dir dann unsere codes zeile für zeile zu erklären ... zu mal die meisten hier *mich eingeschlossen* sich auf grundlagen beschränken würden *so dieser static mist ... ihr wisst worauf ich hinauswill* ...

erst wenn es bei dir selber klickt macht und du weist wie das ganze abläuft hast du was gelernt ...

vielleicht mal eine möglichkeit mit der auch ich mal angefangen habe

1) du hast eine aufgabe ... gleich ob du sie dir selbst stellst oder gestellt bekommst
2) jetzt nimmst du erstmal ein blatt papier und einen bleistift und versuchst ganz grob aufzuschreiben was überhaupt zu tun ist und wie das ganze dann ganz grob ablaufen soll
3) nun versuchst du das ganze "abstrakt" darzustellen ... also z.b. anstatt speziell "währung und betrag einlesen" ganz allgemein und abstrakt "daten einlesen" ... das versuchst du nach möglichkeit mit allem so "abstrakt" wie möglich
4) jetzt brauchst du auch noch etwas wo du die eingelesenen daten "speichern" kannst ... und hier kommen wir schon zu "variablen" ... die sind ganz wichtiger grundlagen-stoff ...
5) nach dem du jetzt die daten eingelesen und in variablen verpackt hast arbeitest du damit weiter *z.b. halt von einer währung in eine andere umrechnen*
6) zum schluss musst du das ergebnis noch ausgeben *der einfachheit halber lassen wir mal speicherung und weitere verarbeitung weg*

so ... jetzt hast du das ganze erstmal ganz abstrakt auf deinem papier
weiter geht es jetzt hiermit

7) überlegen und vor allem in der doc nachlesen WIE du die einzelenen schritte praktisch in code umsetzen kannst ...
zum einlesen von daten von der console kannst du z.b. Scanner auf System.in verwenden
8) wenn du jetzt alles was du an klassen und methoden brauchst zusammen hast machst du dir einen plan wie du das ganze in einen sinnvollen ablauf bringst ... natürlich musst du hierbei die java-spezifische syntax beachten ...
auch auf sog. immutable data ... zu deutsch etwa "nicht veränderbare daten" musst du besonders achten ...
String ist z.b. ein solcher immutable datentyp ... das beutet das alle operationen die du auf einen string anwendest diesen selbst nicht verändern ... sondern dir einen neuen String zurück geben ... der ebenfalls wieder in einer variable gespeichert werden muss *ist einer der beliebtesten anfänger-fehler*
9) jetzt solltest du langsam ein fertiges programm haben in dem halt daten vom user abverlangt , eingelesen und in variablen gespeichert werden ... mit diesen rechnest du dann ... und gibst das ergebnis aus
10) fertig

wenn du jetzt NACH diesen 10 schritten an ganz bestimmten stellen noch ganz bestimmte probleme hast *z.b. deine IDE meckert irgendwas rum oder die eine code-zeile macht nicht das was sie soll* ... dann stellst du möglichst genau dazu deine frage ...
wichtig hierbei ist vor allem der betroffene code ... das was du erwartest ... und das was stattdessen passiert ...


das wäre jetzt EINE möglichkeit dein vorhaben umzusetzen ... und sie funktioniert wirklich ... auch ich hab wie gesagt mal so angefangen ... *gut .. heute mach ich mir grob gedanken was ich machen will und schreib drauf los ... da ich weis was ich wie verwenden muss ... und wenn dann halt was nich passt wird gedebugged bis der fehler raus is ... aber sowas kommt mit der zeit und erfahrung*

ich hoffe das klingt jetzt nicht zu hart ... aber wie ganz oben gesagt : eigeninitiative solltest du schon zeigen ... und du musst nun mal auch versuchen das eine oder andere problem selbst zu lösen ... um halt daraus zu lernen ... das können wir dir nicht abnehmen ... sondern höchstens hilfestellung bei der lösung geben ...

*wobei so ein kleines "tool" wirklich in ein paar minuten geschrieben ist .. selbst mit einfacher GUI*


----------



## Blackhole16 (27. Apr 2012)

1. Aufgabenstellung besagt Eurorechner.java, nicht Umrechner.java
2. Variablen double kurs (richtig gemacht), String nochmal (zum überprüfen ob nochmal) und eines Scanners!
3. begonnen wird mit einer while-schleife, die so lange ausgeführt wird, bis nochmal.equals("n")
4. nun wird die Währung abgefragt
5. nun wird eine lokale double geld erstellt.
6.1 wenn e eingegeben wurde, wird der Betrag abgefragt (dazu später) und das ergebnis ausgegeben.
6.2 Wenn u eingegeben wurde, wird...
6.3 sonst wird falsche eingabe ausgegeben und es geht weiter.
7. Wenn dies vorbei ist, wird abgefragt, ob nocheinmal soll und die Bedigung in der while Schleife wird kkontrolliert.
8. nun zur methode eingabe, die ist der eigentliche schwerpunkt.
8.1 Zuerstz wird "Betrag:" ausgegeben und 2 lokale variablen initialisiert: boolean richtig, welche anzeigt, ob das eingegebene ergebnis "richtig" also eine zahl war, und eine double geld.
8.2 solange die eingabe nicht richtig war, wird abgefragt:
8.2.1 ein try wird eröffnet (wenn du das noch nicht kennst, lies BITTE nach)
8.2.2 in deiesem try wird der double geld die eingabe des users las geparste double gegeben
8.2.3 und genau hier wird die NumberFormatException geworfen, wenn die eingabe KEINE zahl war.
8.2.4 wenn ohne probleme geparst wurde, wird die boolean richtig auf richtig gesetzt und die while-bedingung noch einmal überprüft, die nun aber falsch ist und es wird das geld zurück ans programm gegeben.
8.2.5 wenn die eingabe falsch war, wird dies ausgegeben und die variable richtig nicht verändert, sodass bei der darauffolgenden überprüfung der while-bedingung alles noch einmal wiederholt wird.

Ich hoffe, dass dies nun endlich alle probleme löst. Wenn du NOCH weitere Fragen hast, dann schreib einfach NACH DEM PRINZIP VON IRGENDJEMAND!!! und wir werden versuchen, dir trotz allem zu helfen (hoffe ich  )

hier nun ENDLICH der code:


```
import java.util.Scanner;


public class Eurorechner {
    private final static double KURS = 1.29535;
    private static String nochmal = "j";
    private static Scanner scan = new Scanner(System.in);
 
    public static void main (String[] args) {
    	while (nochmal.equalsIgnoreCase("j")) {
	        System.out.println("Eingabe der Ausgangswaehrung (E)uro oder (U)S Dollar? :");
	        String waehrung = scan.nextLine();
	        
	        double geld;
	        if(waehrung.equalsIgnoreCase("e") ) {
	        	geld = eingeben();
	            System.out.println(geld + " € = $" + geld*KURS);
	        } else if(waehrung.equalsIgnoreCase("u")) {
	        	geld = eingeben();
	            System.out.println("$" + geld + " = " + geld/KURS + "€");
	        } else {
	            System.out.println("Falsche Eingabe bitte nochmal");    
	        }
	        
	        System.out.println("Wollen Sie noch einmal j/n? : ");
	        nochmal = scan.nextLine();
    	}
    }
    
    public static double eingeben() {
    	System.out.println("Betrag:");
    	boolean richtig = false;
    	double geld = 0;
    	while (!richtig) {
	    	try {
	    		geld = Double.parseDouble(scan.nextLine());
	    		richtig = true;
	    	} catch (NumberFormatException e) {
	    		System.out.println("Falsche Eingabe bitte nochmal! ");
	    	}
    	}
    	return geld;
    }
}
```

mfg
BH16

PS. warum schreibst du waerung ohne h =?


----------



## AquaBall (27. Apr 2012)

Hey Leute!

Tolles Team!:applaus:
Ihr bringt ihn schon noch über den Berg. :toll:   (@BH16: Danke für deinen langen Atem!)


Ich hätte zwar begrüßt, wenn er mal selbst irgend ein selbstentwickeltes Progrämmchen postet, das er zum Laufen gebracht hat, aber so sind mal vorläufig alle Fragen geklärt, (wenn auch nicht alle Probleme gelöst).

Einen Vorschlag würde ich noch ergänzen:
Die "try/catch"-Konstruktion ist in Java natürlich esenziell, dennoch würde ich sie einem Anfänger noch nicht "aufs Aug drücken".
Insbesonders weil ja die Aufgabenstellung lautet: 
	
	
	
	





```
Testen Sie die Eingaben auf Zahlenbeträge
```

Deshalb würde ich die Eingaberoutine so schreiben:

```
public static double eingeben() {
        System.out.println("Betrag:");
        boolean korrekteZahl = false;
        String eingabe;
        while ( ! korrekteZahl) {
            // Von der Console holen
            eingabe = scan.nextLine();
            // prüfen ob Format "999.99";  (sieht nur komliziert aus; Details suche unter: "RegEx")
            korretekZahl = eingabe.matches("\\d*\\.?\\d+");  
            if (!korrekteZahl ) 
                 System.out.println("Keine gültige Zahl eingegeben! Bitte nochmal: ");
        }
        return Double.parseDouble(eingabe);
    }
```


----------



## Blackhole16 (27. Apr 2012)

na was bleibt mir denn übrig  

und gute idee  wieder einen neuen Befehl gelernt 

Ist natürlich auf jeden fall besser. [SARKASMUS]Ich hoffe, dass der TO deinen Code selbstständig mit meinem verbinden kann, oder soll ich das noch einmal machen?[/SARKASMUS] (Sry, aber das musste sein, nimms nicht zu ernst  )

mfg
BH16


----------



## coldstone (27. Apr 2012)

coldstone hat gesagt.:


> Hallo liebe JAVA Freunde;
> 
> muss einen Währungsrechner programmieren.
> 
> ...



Hätte nicht gedacht, das so ein Beitrag einigen solchen ärger abreichen kann. Aber trotzdessen danke für die Zeit und Mühe und den "sch... code", der zwar nie als Final erwünscht war, aber solch einer mühe sollte man schon danken. 
Und für das Theater ein grosses :applaus::applaus::applaus::applaus::applaus::applaus::applaus::applaus::applaus::applaus::applaus::applaus:


----------

