# Von Joule in Kalorien umrechnen mit switch und case



## Simon100 (18. Jan 2012)

Guten Abend,

habe morgen ein Praktikum und habe dafür ein Programm geschrieben was von Joul mach Kalorien umrechnet. 

Ich habe das Programm mit if und else geschrieben weil es für mich so am einfachsten ist, nun habe ich heute gehört das ich switch und case benutzen soll.

Habe damit sehr große Probleme.

Hier ist das Programm mit if und else. Darunter befindet sich meine Idee mit switch und case.

[JAVA=1]

import javax.swing.*;	

class Joule_Kalorien {

	public static double jink(double zahl)
		{
			double kalorie = zahl*0.238663;
			return kalorie;
		}


	public static double kinj(double zahl)
		{
			double joule = zahl/0.238663;
			return joule;
		}


	public static void ausgabe1(double kalorie, double zahl)
		{
			JOptionPane.showMessageDialog(null, zahl+" Joule enspricht "+kalorie+" cal!", "Joule in Kalorien", JOptionPane.PLAIN_MESSAGE);
		}


	public static void ausgabe2(double joule, double zahl)
		{
			JOptionPane.showMessageDialog(null, zahl+" cal enspricht "+joule+" Joule!", "Kalorien in Joule", JOptionPane.PLAIN_MESSAGE);
		}

	public static void main(String args[]) {

		int i=0;
		String str[] = {"J -> cal", "cal -> J"};

			i = JOptionPane.showOptionDialog(null,
				"Umrechnen von ... nach ...",
				"Umrechnen",
				JOptionPane.YES_NO_OPTION,
				JOptionPane.QUESTION_MESSAGE,
				null,
				str,
				JOptionPane.YES_OPTION);




	if(i==0)
		{
			String eingabe1 = JOptionPane.showInputDialog("Geben Sie den Wert in Joule an!");
			double zahl = Double.parseDouble(eingabe1);

				if(zahl<0)
					{
						JOptionPane.showMessageDialog(null, "Bitte geben Sie nur positive Zahlen ein!", "Warning", JOptionPane.WARNING_MESSAGE);
					}

				else
					{
						double kalorie=jink(zahl);
						ausgabe1(kalorie,zahl);	
					}
		}

	if(i==1)
		{	
			String eingabe2 = JOptionPane.showInputDialog("Geben Sie den Wert in Kalorien an!");
			double zahl = Double.parseDouble(eingabe2);

				if(zahl<0)
					{
						JOptionPane.showMessageDialog(null, "Bitte geben Sie nur positive Zahlen ein!" , "Warning", JOptionPane.WARNING_MESSAGE);
					}

				else
					{
						double joule=kinj(zahl);
						ausgabe2(joule,zahl);
					}
		}

		System.exit(0);
	}
}

[/code]



Zu dem muss ich noch sagen das J nach cal (entsricht Yes.Option) und von cal nach J (entsricht NO.Option.

Das Programm funktoniert so nicht wie ich es geschrieben habe und ich  muss das auch so machen das wenn eine negative zahl in das eingabefeld eingegeben wird das der eine warnung rausgibt wie das obere Programm. Da hatte ich aber gar keine idee wie ich das machen soll.

Ich hoffe ihr könnt mir helfen.


```
switch (i)
		{
		case JOptionPane.YES_OPTION : String eingabe1 = JOptionPane.showInputDialog("Geben Sie den Wert in Joule an!");
			double zahl = Double.parseDouble(eingabe1);
			
				
				double kalorie=jink(zahl);
				ausgabe1(kalorie,zahl);	
			break;
			
		case JOptionPane.NO_OPTION : String eingabe2 = JOptionPane.showInputDialog("Geben Sie den Wert in Kalorien an!");
			double zahl = Double.parseDouble(eingabe2);
		
				
					double joule=kinj(zahl);
					ausgabe2(joule,zahl);
			
			}
```


----------



## lukas93 (18. Jan 2012)

```
switch (i) {
     case 1: //QUELLCODE
                break;
     case 2: //QUELLCODE
                break;
}
```

so in etwa sollte dein switch-case funktionieren
Das break; ist wichtig, weil sonst bei i=1 die fälle 1 und alle folgenden bis zum nächsten break durchlaufen werden


hoppla, das passiert wenn man nicht richtig liest, sry
Lukas


----------



## Simon100 (18. Jan 2012)

Kann ich den alles in eine switch und case bedingung schreiben ??

Oder muss ich das auch zwei mal machen ??


und wie soll ich das schreiben das bei negativen zahlen eine meldung kommt ?

würde ja das mit default machen aber wie sage ich dem programm alle negativen zahlen ?


----------



## HimBromBeere (18. Jan 2012)

Schreib doch VOR deinen Switch die Überprüfung, ob die Zahl positiv ist, dann musst du das nicht in jedem der beiden Fälle machen...

dann musst du in deinem Switch nur noch die jeweilige Funktion aufrufen


----------



## Simon100 (18. Jan 2012)

Das ist eine gute Idee.

Kann man die auch mit switch und case machen oder nur mit if ??


----------



## HimBromBeere (18. Jan 2012)

Können schon, ist nur die Frage, das notwendig ist... (außerdem sieht´s doof aus, das s-Wort darf ich ja nicht mehr sagen;()

EDIT: Aber in die gleiche Switch wird´s auf keinen Fall gehen, du brauchst hin wie her zwei Fallunterscheidungen..


----------



## Simon100 (18. Jan 2012)

So ein wunder ist geschehen ich habe das jetzt endlich mit switch und case hinbekommen. 

Aber wo setze ich nur das abfragen der negativen zahl hin ? hatte es für dem switch mit if versucht aber der konnte nichts mit der variablen a anfangen. Hatte geschrieben:


```
if (a<0) JOptionPane.showMessageDialog(null, "Bitte geben Sie nur positive Zahlen ein!", "Warning", JOptionPane.WARNING_MESSAGE);
```



So sieht es jetzt normal aus.


```
switch (i)
		{
		case JOptionPane.YES_OPTION :		String eingabe1 = JOptionPane.showInputDialog("Bitte geben Sie einen Wert in Joule ein.");
											double a = Double.parseDouble(eingabe1);
										
											double kalorie=jink(a);
						                    ausgabe1(kalorie,a);
											break;
					
		case JOptionPane.NO_OPTION :		String eingabe2 = JOptionPane.showInputDialog("Bitte geben Sie einen Wert in Cal ein.");
											double b = Double.parseDouble(eingabe2);		

											double joule=kinj(b);
						                    ausgabe2(joule,b);
											break;
											
					
											
											
				}
```


----------



## HimBromBeere (18. Jan 2012)

Stimmt, war ein Denkfehler meinerseits, das vorherige Prüfen geht natürlich nicht. In diesem Fall muss es (so hässlich das auch aussieht) wohl IN den Switch mit rein. Zu allem Übel müsstest du ja auch noch eine Schleife einbauen, die so lange läuft, bis der gute Nutzer auch endlich eine positive Zahl eingibt (auf andere Zeichen außer Ziffern musst du auch noch achten, in dem Fall sollte .parseDouble() eine entsrechende Exception werfen. Sieht dann wirklich eklig aus, aber wat mut, dat mut


----------



## Andi_CH (20. Jan 2012)

Na ja - üblicherweise kapselt man das in eine Methode, weil es ja immer dasselbe ist und was nicht gleich ist, wird per Parameter übergeben ....

Nicht nur wer mehrmals denselben Fehler macht ist blöd, sondern auch wer denselben Code mehrmals schreibt 

(Nicht böse sein - es überkam mich gerade. Zu viel Frust vor dem Wochenende schädigt den Charakter)


----------



## parabool (20. Jan 2012)

Nein Eclipse verändert den Character


----------

