# Datentypen und Fehler finden



## Java_Azubi (26. Jan 2014)

(a) In einem Java-Programm befinden sich die folgenden Zeilen:

```
int a = 4;
int b = -1;
int c = 0;
boolean w = true;
```
Übersetzen Sie die folgenden Bedingungen in Java:
• a und b sind kleiner als 0 und c ist gleich 0.
// (a&b < 0) & c=0; 
• a und b haben unterschiedliche Vorzeichen.
// weiß ich leider nicht => benötige einen Tip
• w ist wahr oder b ist ungleich 0.
// w= true I b!=0;
(b) Was ist der Datentyp der folgenden Ausdrücke in Java:
13 / 2  //die Werte sind int und das Ergebnis wäre double
17.0 / 5 //der erste Wert ist double und der zweite int und das Ergebnis wäre double
13 / 2 + 17.5 / 5 //Wert 1 und Wert 2 sind int Wert 3 ist double und Wert 5 ist int das Ergebnis ist double
16 >= 3 || 7 < 12 //boolean

Gegeben ist der folgende Programmtext:

```
public class FehlerSuche{
public static void main(){ //public static void main (String[] args) Syntaxfehler
int [] a = { 28, -6, 32.2}; //32 da int Laufzeitfehler
a[3] = 45;
double x = 2;
x = 45.2 * x;
System.out.println( "x " = x ); //+x Laufzeitfehler
}
}
```

• Welche Fehler finden Sie im obigen Programm? Erläutern Sie die Fehler! Geben Sie auch an, ob es sich um Syntax-Fehler oder Laufzeitfehler handelt.
• Korrigieren Sie die Fehler im Programm sinnvoll, ohne Anweisungen vollständig aus dem Programm zu streichen.


----------



## Gucky (27. Jan 2014)

a[3] ist nicht vorhanden.
1. a&b<0 ist eine und Verknüpfung der beiden erste Werte und dqnn wird geguckt, ob das Verknüpfte kleiner ist als 0. Also nicht das, was du willst.
2. a>>15 != b>>15
3. = ist eine Zuweisung, der senkrechte Strich ein Bitoperator. Vergleiche sind doppelt. (==)
Der Rest stimmt, soweit ich das erkennen kann.


----------



## JavaMeister (27. Jan 2014)

Leider ist das andere nicht richtig.

Int durch int ist int.

bei der Fehlersuche sind nicht alle Fehler gefunden  

Der erste gefundene ist kein Syntax Fehler.

Der letzte gefundene kein Laufzeitfehler.


----------



## Java_Azubi (27. Jan 2014)

```
public class FehlerSuche{
    public static void main(){ //public static void main (String[] args) Laufzeitfehler
    int [] a = { 28, -6, 32.2}; //32 da int Laufzeitfehler
    a[3] = 45; //es gibt nur a[0] bis a[2] Laufzeitfehler
    double x = 2;  
    x = 45.2 * x; 
    System.out.println( "x " = x ); //+x Syntaxfehler
    }
    }
```
So läuft mein Programm, was habe ich übersehen?


----------



## Gucky (27. Jan 2014)

Der zweite gefundene Fehler ist eigentlich keiner. Es werden nur die Nachkommastellen abgeschnitten aber das ist dem Compiler und Java egal. Es gibt weder eine Fehlermeldung, noch eine Warnung oder eine Exception.


----------



## JavaMeister (27. Jan 2014)

Die Aussage von Gucky ist falsch. :autsch:


----------



## Gucky (27. Jan 2014)

Wieso? Wenn ich einen double Wert an eine int Variable zuweise, werden die Nachkommastellen abgeschnitten. Oder ist das in der Mengenschreibweise anders, was ich mir nicht vorstellen kann?


----------



## JavaMeister (27. Jan 2014)

Probiere es einfach aus. :idea:

BTW:



> Oder ist das in der Mengenschreibweise anders,



Ist nicht anders ;D


----------



## Gucky (27. Jan 2014)

Er hat nicht gecastet. Das wars. :bloed:
hätte er gecastet, wäre meins richtig aber da er es nicht getan hat...
Mein Fehler


----------

