# Frage zu Typecasting und Wrapper Klassen



## joschi2000 (6. Mai 2015)

Hallo, 
ich habe ein Problem  ich muss für die Schule diese Aufgabe lösen, aber ich komme einfach nicht auf die Lösung.

Aufgabenstellung:
In dieser Aufgabe geht es auch um die Division zweier Zahlen. Es gibt eine bereits implementierte Methode, die jedoch ein paar Fehler enthält. Diese Methode soll die als Zeichenkette übergebene Zahl a durch die ebenfalls als Zeichenkette übergebene Zahl b teilen. Das Ergebnis dieser Division soll dann noch durch 2 geteilt werden.

In der Main.java, darf ich nichts verändern, alles soll nur in Mathe.java umgesetzt werden.

```
public class Mathe {
  public double div(String a, String b){
    double ergebnis = 0.0;
    
    int aDouble = Integer.parseInt(a);
    int bDouble = (int) Double.parseDouble(b);
    
    int zwischenergebnis = (int) aDouble / bDouble;
    ergebnis = zwischenergebnis / (double) 2;
   
    return ergebnis;
  }
}

public class Main {
    public static void main(final String args[]) {
        Mathe mathe = new Mathe();
        System.out.println("a = 2, b = 3: "+mathe.div("2", "3"));
        System.out.println("a = 6.6, b = 2: "+mathe.div("6.6", "2"));
        System.out.println("a = 1.0, b = 1: "+mathe.div("1.0", "1"));
        System.out.println("a = 5, b = 2.5: "+mathe.div("5", "2.5"));
    }
}
```

Kann mir hier bitte jemand bei helfen?
Danke.


----------



## Joose (6. Mai 2015)

joschi2000 hat gesagt.:


> ich habe ein Problem  ich muss für die Schule diese Aufgabe lösen, aber ich komme einfach nicht auf die Lösung.



Gut wäre wenn du uns noch verratest wobei den Problem genau liegt. 
Verstehst du die Aufgabenstellung nicht? Verstehst du den Code nicht? .....

Kleiner Tipp:
"int" ist ein ganzzahliger Datentyp, "double" hingegen ein Fließkomma Datentyp
Bei dem Code wird teilweise hin und her gecastet dadurch verfälscht sich natürlich das Ergebnis.

Schreibe ein paar Konsolenausgaben zwischen dein einzelnen Zeilen der Methode "div" hin und lasse dir die Werte ausgeben, so kannst du nachvollziehen welche Variable welchen Wert hat. Überlege ob das Zwischenergebnis passt bzw. warum es vielleicht nicht passt.


----------



## joschi2000 (6. Mai 2015)

Hallo Joose, 

ja verstehe den code nicht.
Wir sollen den code glaube ich so korrigieren das die Ausgabe richtig ist, da sind ja extra fehler eingabaut.
Das ist mein problem.


----------



## Joose (6. Mai 2015)

```
int aDouble = Integer.parseInt(a);
    int bDouble = (int) Double.parseDouble(b);
```

Wandelt die String Parameter "a" und "b" um in Zahlen Datentypen


```
int zwischenergebnis = (int) aDouble / bDouble;
```

Sollte eigentlich selbst erklärend sein. Hier wird die eine Zahl durch die andere Zahl dividiert und das Ergebnis gespeichert


```
ergebnis = zwischenergebnis / (double) 2;
```

Hier wird das Zwischenergebnis nochmals durch 2 geteilt


```
return ergebnis;
```

Rückgabe des Ergebnis.

Und hier nochmal mein Tipp von oben:
"int" ist ein ganzzahliger Datentyp, "double" hingegen ein Fließkomma Datentyp
Bei dem Code wird teilweise hin und her gecastet dadurch verfälscht sich natürlich das Ergebnis.

Beispiel: 

```
double x = 0.2463;
int a = (int) x; // Alle ab dem Komma (rechts neben dem Komma) wird einfach abgeschnitten und geht verloren
System.out.println(a); // Ausgabe: 0
```


----------



## joschi2000 (6. Mai 2015)

Ah ok, danke, habe jetzt den Code verstanden.

Habe alles durch double ersetzt, jetzt habe ich beim zweiten String das Problem  6.6/2/2 da komt 1.5 raus müsste aber 1.65 sein, wenn ich nachrechne.


```
public class Mathe {
  public double div(String a, String b){
    double ergebnis = 0.0;
    
    double aDouble = (int) Double.parseDouble(a);
    double bDouble = (int) Double.parseDouble(b);  
    
    double zwischenergebnis = aDouble / bDouble;
    ergebnis = zwischenergebnis / (double) 2;
    
    return ergebnis;
  }
}
```


----------



## Joose (6. Mai 2015)

joschi2000 hat gesagt.:


> ```
> double aDouble = (int) Double.parseDouble(a);
> double bDouble = (int) Double.parseDouble(b);
> ```



Der String "a" wird auf einen double Wert geparsed, dieser wird auf ein int gecastet und dann wieder auf ein double.


----------



## joschi2000 (6. Mai 2015)

Achso,jetzt hab ichs verstanden, Vielen Dank für deine Hilfe.


----------

