# [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)



## niggom (4. Dezember 2012)

*[Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Hallo Leute,
Seit Anfang des Schuljahres befassen wir uns in Informatik mit Java.
Nun war die Aufgabe einen Währungsrechner mit Euro, Dollar und Yen zu programmieren.
Da ich leider mit dem Programm nicht weiterkomme bräuchte ich Eure Hilfe.
Schaut euch doch bitte mal den Quellcode an und gebt mir mal ne Rückmeldung ob das völliger Stuss ist oder ob man damit halbwegs was anfangen könnte:

import java.util.Scanner;
import java.io.IOException;

public class Währungsrechner
{   public static void main(String args[])
  { double Ek, Betrag, Ausgabewert;
    System.out.println ("Bitte für Eingabe von Euro 1, für Dollar 2 und für Yen 3 eingeben :");
    int zahl;
    zahl=Integer.valueOf(args[0]).intValue();

    //Eingabe Währung

    switch(zahl)
    {
      case 1://Euro
      Scanner  Eingabe = new Scanner (System.in);
      Betrag = Eingabe.nextDouble ();

      //Eingabe Endwährung
      System.out.println ("Bitte für Ausgabe in Euro 1, für Dollar 2 und für Yen 3 eingeben :");
      int zahl1;
      zahl1=Integer.valueOf(args[0]).intValue();


      switch(zahl)
      {
        case 1://Euro
        Ausgabewert = Betrag * 1;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;

        case 2://Dollar
        Ausgabewert = Betrag * 1.31;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;

        case 3://Yen
        Ausgabewert = Betrag * 107.212 ;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;

      } 


      break;

      case 2://Dollar
      Scanner  Eingabe2 = new Scanner (System.in);
      Betrag = Eingabe2.nextDouble ();

      //Eingabe Endwährung
      System.out.println ("Bitte für Ausgabe in Euro 1, für Dollar 2 und für Yen 3 eingeben :");
      int zahl2;
      zahl2=Integer.valueOf(args[0]).intValue();


      switch(zahl)
      {
        case 1://Euro
        Ausgabewert = Betrag * 0.763489;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;

        case 2://Dollar
        Ausgabewert = Betrag * 1;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;

        case 3://Yen
        Ausgabewert = Betrag * 81.8643  ;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;

      } 

      break;

      case 3://Yen
      Scanner  Eingabe3 = new Scanner (System.in);
      Betrag = Eingabe3.nextDouble ();

      //Eingabe Endwährung
      System.out.println ("Bitte für Ausgabe in Euro 1, für Dollar 2 und für Yen 3 eingeben :");
      int zahl3;
      zahl3=Integer.valueOf(args[0]).intValue();


      switch(zahl)
      {
        case 1://Euro
        Ausgabewert = Betrag * 0.00932548 ;              
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;

        case 2://Dollar
        Ausgabewert = Betrag * 1;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;

        case 3://Yen
        Ausgabewert = Betrag * 0.0122148;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;

      } 

      break;

    }


  } 
} 




Falls jemand da durchblickt würde ich mich über Hilfe sehr freuen.


----------



## CRY_OF_FE4R (4. Dezember 2012)

Oh Gott, Java und BlueJ machen wir auch grad 
Allerdings fürcht ich sind wir nicht so weit wie du ^^


----------



## niggom (4. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Hmmm, Habt ihr schon nen Währungsrechner oder sowas ähnliches geschrieben? 
Ich denke der Fehler liegt in Zeile neun, das hat mir auch mein Kumpel bestätigt, der informatikstudent ist.
Er konnte den Fehler leider auch nicht finden


----------



## DarkMo (5. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

du solltest diese code-tags nutzen:


niggom schrieb:


> Spoiler
> 
> 
> 
> ...


das liest sich dann besser ^^

gut, fangen wir mal an. du startest das programm und übergibst als startparameter die zahl, die über die währung entscheidet. dann kommt ein string, der dich zur zahleneingabe auffordert ^^ leicht unstimmig oder?  aber is ja erstma kein programmfehler, nur irgendwie komisch halt ^^ ich hätte als "bestätigung" dann wohl eher ausgegeben, in welchem "modus" das ding nu läuft. also sowas in der art: "Gib einen Euro-Betrag ein: " (oder eben dollar/yen).

gut, nu geht er in die erste switch-anweisung. ich hab jetz scho länger nix mehr mit java gemacht, aber mMn muss man das Case-zeugs in nen Block einschließen - sonst gilt nur der erste befehl. und nach dem ersten befehl würde er das nächste case, nen default oder garnix mehr (switch ende) erwarten. bei dir kommt dann aber die textausgabe ^^ -> error. is das der fehler, den er wirft?

wenn ja: dann einfach mal das ganze, was zum case gehört, in nen block {} packen.

```
switch(argument) {
  case wert1: {
    anweisung1();
    anweisung2();
  }
}
```
da fällt mir noch ein 2. fehler auf. copy&paste hates me too  schau mal, nach was du im "inneren" switch-case block schaltest ^^


----------



## Ahab (5. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Erzähl doch mal was das Problem ist!  Fehlemeldungen und so und wenn du schon dabei bist, nutze doch bitte den Code-Viewer für deinen Quell Code. Bsp: 
	
	



```
quellcode
```
 Bitte auch in Code-Snippets auf eine ordentliche, lesbare Struktur achten.

Ich sehe da persönlich keine Probleme, ich sehe nur zum ersten Mal mehrere ineinander geschachtelte switche/cases.


----------



## Wincenty (5. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Ich habe mal im Tutorium nebenbi meinen eigenen kleinen Währungsrechner gebastelt und dabei kam das raus: (Das Programm läuft in Schleife solange man will)


```
import java.util.Scanner;

public class Währungsrechner {
    
    public static void main(String[] args) {
        do {
        Scanner eingabe = new Scanner(System.in);
        System.out.println("Bitte geben Sie die Zahl ein, welche Währungstausch Sie durchführen wollen.\n1:Euro zu Yen\n2:Euro zu Dollar\n3:Yen zu Euro\n4:Yen zu Dollar\n5:Dollar zu Euro\n6:Dollar zu Yen");
        double einheit = eingabe.nextDouble();
        int währung = (int) einheit;
        if ((währung != 1)&&(währung != 2)&&(währung != 3)&&(währung != 4)&&(währung != 5)&&(währung != 6)) {
            System.out.println("Unzulässige Eingabe!");
        } else {
        Scanner wert = new Scanner(System.in);
        System.out.println("Nun geben Sie bitte an wieviel Sie umtauschen wollen:");
        double geld = wert.nextDouble();
        
        switch (währung) {
        case 1:
            System.out.println(geld + " Euro sind " + geld*107.2 + " Yen.");
            break;
        case 2:
            System.out.println(geld + " Euro sind " + geld*1.3 + " Dollar.");
            break;
        case 3:
            System.out.println(geld + " Yen sind " + geld*0.009 + " Euro.");
            break;
        case 4:
            System.out.println(geld + " Yen sind " + geld*0.012 + " Dollar.");
            break;
        case 5:
            System.out.println(geld + " Dollar sind " + geld*0.7 + " Euro.");
            break;
        case 6:
            System.out.println(geld + " Dollar sind " + geld*82.3 + " Yen.");
            break;
        }
        }
        Scanner ende = new Scanner(System.in);
        System.out.println("Möchten Sie das Programm beenden? Y-Ja/N-Nein");
        char endlauf;
        endlauf=ende.next().charAt(0);
        if (endlauf == 'Y') {
         break;
        }
        } while (true);
        }

}
```

EDIT:

Ich habe auch dieses Semester mit Java aber mit Eclipse angefangen. Wir hatten als erste Hausaufgabe einen Längenumrechner machen müssen.


----------



## niggom (5. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Ok, danke schon mal für die schnelle Hilfe, hab jetzt in der Schule mal weitergearbeitet an dem Programm und nochmal einiges verändert, so funktionierts schon ziemlich gut  
Hier nochmal der Verbesserte Quellcode

```
import java.util.Scanner;
import java.io.IOException;

public class Währungsrechner01
{   public static void main(String args[])
  { double Ek, Betrag, Ausgabewert;
    System.out.println ("Bitte für Startwährung eingeben: \n 1 für Euro \n 2 für Dollar \n 3 für Yen  ");
    int zahl;
    //zahl=Integer.valueOf(args[0]).intValue();
    
    //Eingabe Währung
    Scanner Eingabe = new Scanner (System.in);
    zahl = Eingabe.nextInt ();
    switch(zahl)
    {
      case 1://Euro
      System.out.println ("Bitte Betrag eingeben :");
      Scanner  Eingabe1 = new Scanner (System.in);
      Betrag = Eingabe.nextDouble ();
      
      //Eingabe Endwährung
      System.out.println ("Bitte für Ausgabewährung eingeben: \n 1 Euro \n 2 Dollar \n 3 Yen");
      int zahl1;
      //zahl1=Integer.valueOf(args[0]).intValue();
      Scanner Eingabe11= new Scanner (System.in);
      zahl1 = Eingabe.nextInt ();
      
      switch(zahl1)
      {
        case 1://Euro
        Ausgabewert = Betrag * 1;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;
        
        case 2://Dollar
        Ausgabewert = Betrag * 1.31;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;
        
        case 3://Yen
        Ausgabewert = Betrag * 107.212 ;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;
        
      } 
      
      
      break;
      
      case 2://Dollar
      System.out.println ("Bitte Betrag eingeben :");
      Scanner  Eingabe2 = new Scanner (System.in);
      Betrag = Eingabe2.nextDouble ();
      
      //Eingabe Endwährung
      System.out.println ("Bitte für Ausgabewährung eingeben: \n 1 Euro \n 2 Dollar \n 3 Yen");
      int zahl22;
      //zahl2=Integer.valueOf(args[0]).intValue();
      
      Scanner Eingabe22= new Scanner (System.in);
      zahl22 = Eingabe.nextInt ();
      
      switch(zahl22)
      {
        case 1://Euro
        Ausgabewert = Betrag * 0.763489;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;
        
        case 2://Dollar
        Ausgabewert = Betrag * 1;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;
        
        case 3://Yen
        Ausgabewert = Betrag * 81.8643  ;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;
        
      } 
      
      break;
      
      case 3://Yen
      System.out.println ("Bitte Betrag eingeben :");
      Scanner  Eingabe3 = new Scanner (System.in);
      Betrag = Eingabe3.nextDouble ();
      
      //Eingabe Endwährung
      System.out.println ("Bitte für Ausgabewährung eingeben: \n 1 Euro \n 2 Dollar \n 3 Yen");
      int zahl33;
      //zahl3=Integer.valueOf(args[0]).intValue();
      
      Scanner Eingabe33= new Scanner (System.in);
      zahl33 = Eingabe.nextInt ();
      
      switch(zahl33)
      {
        case 1://Euro
        Ausgabewert = Betrag * 0.00932548 ;              
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;
        
        case 2://Dollar
        Ausgabewert = Betrag * 1;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;
        
        case 3://Yen
        Ausgabewert = Betrag * 0.0122148;
        System.out.println ("Ausgabewert :" + Ausgabewert);
        break;
        
      } 
      
      break;
      
    }
    
    
  } 
}
```

So, funktioniert jetzt 

Hab bloß statt Zeile 9 nen Scanner eingefügt und es ein bisschen übersichtlicher gemacht 
Der Lehrer hat das Programm zwar nicht verstanden, aber jetzt da es funktioniert muss er das ja auch nicht 


@wincenty: Tolles Programm, aber wenn man nach der Frage ob man beenden möcht ja eingibt läuft es trotzdem weiter 
Sry, hab grad gesehn, dass man ein großes Y eingeben muss 
 Mein Fehler


----------



## Wincenty (5. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Du kannst probieren damit auch mit y das geht das müsste dann so aussehen:


```
if ((endlauf == 'Y')||(endlauf == 'y')) {
```

Hier kannst du auch gucken was ich anfangs für ein Monster von ifs geschaffen hab für den Längenumrechner


----------



## niggom (5. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Danke  Ich werds mal ausprobieren, muss aber heute noch Geschichte lernen


----------



## legedric (6. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Ich habe jetzt mal basierend auf der Logik von *niggom* mich auch mal dran gemacht. Da ich eher auf komplexere Strukturen stehe, schaut euch mal meine Lösung an 

Bin für konstruktive Kritik offen!


```
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class CurrencyCalcTest {	
	public static class Currency {
		private String label;
		private Map<Currency, Double> conversions = new HashMap<Currency, Double>();
		
		public Currency(String label) {
			this.label = label;
		}
		
		public Currency addConversion(Currency currency, double rate) {
			conversions.put(currency, rate);
			return this;
		}
		
		public double convert(Currency to, double amount) {
			return this != to && conversions.containsKey(to) 
					? amount * conversions.get(to) : amount;
		}
		
		public List<Currency> getConversions() {
			List<Currency> l = new ArrayList<Currency>();
			for (Currency c : conversions.keySet()) l.add(c);
			return l;
		}
		
		@Override
		public String toString() {
			return label;
		}
	}
	
	public static <T> T readTerminal(List<T> types, Scanner reader, String label) {
		int len = types.size();
		
		System.out.println(label);
		for (int i = 0; i < len; i++) {
			System.out.println((i + 1) + " für " + types.get(i));
		}
		
		int choice = -1;
		while (0 >= choice || choice > len + 1) {
			System.out.print("Eingabe: ");
			choice = reader.nextInt();
		}
		
		return types.get(choice - 1);
	}
	
	public static void main(String args[]) {
		List<Currency> currencies = new ArrayList<Currency>();
		
		Currency euro = new Currency("Euro");
		Currency dollar = new Currency("Dollar");
		Currency yen = new Currency("Yen");
		
		currencies.add(euro);
		currencies.add(dollar);
		currencies.add(yen);
		
		euro.addConversion(dollar, 1.31).addConversion(yen, 107.212);
		dollar.addConversion(euro, 0.763489).addConversion(yen, 81.8643);
		yen.addConversion(euro, 0.00932548).addConversion(dollar, 1);
		
		Scanner reader = new Scanner(System.in);
		boolean running = true;
		Currency from, to;
		double amount;
		
		while (running) {
			from = readTerminal(currencies, reader, "Bitte für Startwährung eingeben");
			to = readTerminal(from.getConversions(), reader, "Bitte für Ausgabewährung eingeben");
			System.out.print("Betrag eingeben: ");
			amount = reader.nextDouble();

			System.out.println("\nAusgabewert: " + from.convert(to, amount) + "\n");
			
			System.out.println("Erneut Abfragen? (Y/N)");
			running = reader.next().equals("Y");
			System.out.println("\n\n");
		}
	}
}
```


----------



## Nike334 (9. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Hey, wäre es nicht einfacher ein 2-dimensionales Array zu erstellen? Ich weiß zwar nicht wie weit du bist mit Java, aber das ist nicht allzu kompliziert.
bei dir würde das dann so angesetzt werden:


```
double[][] faktor = new double[3][3];
faktor[0][0] = 1.2;
faktor[0][1] = 0.9;
faktor[0][2] = 1.5;
faktor[1][0] = 1.3;
...
```
die linke Zahl steht dann quasi für die Währung, die vorliegt, und die Rechte für die Währung, in die Umgerechnet wird. In dieses Array kannste dann alle Umrechnungsfaktoren speichern und musst einfach nur fragen, von welcher Währung in Welche welcher Betrag umgerechnet werden muss. Dann den Betrag einfach mit dem Inhalt des Arrays an der jeweiligen Stelle multiplizieren und fertig^^

lg


----------



## Leandros (12. Dezember 2012)

*AW: [Java] Bräuchte Hilfe für bei einem Währungsrechner (für Schule)*

Java scheint ja sehr oft in der Schule als Stoff drangenommen zu werden ... und das ist alles so schön einfach.


----------



## retarDeD.aNiMaL (14. Dezember 2012)

@Leandros: womit quälst du dich denn?


----------

