Fehlersuche

Diskutiere Fehlersuche im Java Basics - Anfänger-Themen Bereich.
T

Thomaskloea

Hallo, ich soll die Fehler hier finden, tue mich aber schwer damit. Ich habe mal angemerkt, was meiner Meinung nach wie verbessert werden müsste. Gerne bin ich für Hilfe und Tipps offen.


Javascript:
public class HelloWorld
{
 
  public static void main(String[] args)
  {
    
    int a = 10;
    int b;  // 1. Fehler: int b nicht definiert?
if (a = 10) {
int c = a + b; //Folgefehler (deshalb geht die Rechnung nicht 
b = 2 * c;
a++;
}
    
else (a > 10) {
int a = -1;
}
int c = a > b ? a : "b"; // 2. Fehler: "b" funktioniert nicht, da c typ int ist.
    
  }

}
Liege ich richtig oder komplett falsch?
 
J

JustNobody

Das sind erste Dinge. Hast Du den Code denn einmal in eine Datei gepackt und übersetzt? Und geschaut, was der Compiler sagt?

Ansonsten was direkt ins Auge fällt: Vergleich ob a 10 ist, ist eine Zuweisung und kein Vergleich
Bei else fehlt noch ein if so das die Absicht ist,,,
 
T

temi

Bei int b; hast du zwar Recht, dass b zwar deklariert und nicht explizit definiert wird, aber b wird dennoch implizit den Wert 0 haben. Damit kann dann auch die folgende Rechnung ganz normal durchgeführt werden.

Ich würde allerdings den Tip von @JustNobody beherzigen und das einfach ausprobieren.
 
Zuletzt bearbeitet:
J

JustNobody

Bei int b; hast du zwar Recht, dass b zwar deklariert und nicht explizit definiert wird, aber b wird dennoch implizit den Wert 0 haben. Damit kann dann auch die folgende Rechnung ganz normal durchgeführt werden.
Nein, das ist so nicht ganz richtig. Das wird in der java Language Specification unter 4.12.5 definiert:

Bei Klassen- und Instanzvariablen sowie Array-Elementen ist das Verhalten, so wie von Dir beschrieben (Default Wert wird zugewiesen). Aber hier handelt es sich um eine lokale Variable: "A local variable (§14.4, §14.14) must be explicitly given a value before it is used"

Daher wird der Compiler das Konstrukt, so wie von @Thomaskloea beschrieben, anmeckern.
 
T

temi

Nein, das ist so nicht ganz richtig. Das wird in der java Language Specification unter 4.12.5 definiert:

Bei Klassen- und Instanzvariablen sowie Array-Elementen ist das Verhalten, so wie von Dir beschrieben (Default Wert wird zugewiesen). Aber hier handelt es sich um eine lokale Variable: "A local variable (§14.4, §14.14) must be explicitly given a value before it is used"

Daher wird der Compiler das Konstrukt, so wie von @Thomaskloea beschrieben, anmeckern.
Oh, danke für den Hinweis. Das war mir nicht bewusst. :):)
 
X

X5-599

Genaugenommen ist int b; kein Fehler. d.h. Der erste Fehler tritt in der Zeile: if (a = 10) { auf.
 
VfL_Freak

VfL_Freak

Moin,

so, mal etwas sauberer formatiert:
Java:
public static void main(String[] args)
{
    int a = 10;
    int b;

    if( a == 10 )   // SO wird verglichen! Du hattest hier eine Zuweisung
    {
        int c = a + b;
        b = 2 * c;
        a++;
    }
    else( a > 10 )
    {
        int a = -1;
    }

     int c = a > b ? a : "b";   // 2. Fehler: "b" funktioniert nicht, da c typ int ist
}
Du wirst NIE in Deinen ELSE-Fall kommen, da ja 'a' initial den Wert "10" hat - es sei denn, Du baust das Ganze in eine Schleife

Zur letzten Zeile hast Du den Fehler schon richtig erkannt!
Du versuchst ggf. einen String mit dem Inhalt 'b' auf die Integervariable 'c' zu schreiben, was natürlich so nicht funktionieren kann.
Zudem wird 'a' nie größer als 'b' sein, da Du ja wie gesagt Dein IF nur genau einmal durchläufst!

Aber der genaue Sinn des Ganzen erschließt sich mir auch nicht - selbst wenn das nur eine Übung sein sollte !!
Du solltest am Ende zumindest mal die Werte der Variablen ausgeben!

Noch ein Tipp: Du deklarierst 2x 'int c', was immer zu (Verständnis-)Problemen führt !!!

VG Klaus
 
M

Maliko

Wenn ich mir den Code so anschaue vermute ich mal, dass er den Code gar nicht selbst geschrieben hat, sondern das ne Hausaufgabe ist. Sprich der Lehrer hat den falschen Code geschrieben und er soll die Fehler finden. Hat unserer Ausbilder in der Ausbildung auch ganz am Anfang gemacht.

Der Else-Case ist richtig? Müsste der Teil nicht eigentlich so aussehen?
Java:
if( a == 10 )   // SO wird verglichen! Du hattest hier eine Zuweisung
{
    int c = a + b;
    b = 2 * c;
    a++;
}
else if( a > 10 )
{
    int a = -1;
}
Kann man das if im else-Case echt weglassen? Wäre mir persönlich neu.
 
X

X5-599

Nein, das kann man im ELSE nicht weglassen. Entweder man setzt das IF davor (wie von dir gepostet) oder man lässt die Überprüfung (a > 10) weg. Ich denke auch es ist eine Übungsaufgabe. Daher ist es unerheblich ob der Code Sinn ergibt oder nicht.
 
M

Maliko

Ich denke mal es geht in der Aufgabe nur um Syntaxfehler und nicht um Logikfehler. Von daher sollte man sich glaube ich über nicht erreichbare else-Fälle gar nicht erst irgendwelche gedanken machen.
 
X

X5-599

Denke ich auch. Syntaxfehler und andere Fehlerquellen. Falls ich nicht irre wurde z.B. noch nicht erwähnt, dass das int a = -1; selbst in einem korrekten else if(xxx) einen Compilerfehler gibt, da diese Variable bereits existiert. Ganz zu Anfang mit: int a = 10;.
 
Thema: 

Fehlersuche

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben