Fehler in Java Code finden und Klassifizieren

OlafScholz

Mitglied
Hallo zusammen, Ich möchte gerne folgende Klausuraufgabe Lösen.

Leider komme ich nicht wirklich weiter.
Meine Notizen stehen seitlich, sind aber sehr Wahrscheinlich falsch :D

Leider verstehe ich nicht wann es sich um einen Lexikalischen oder um ein Syntaktischen Fehler handelt.
 

Anhänge

  • PSETEST.pdf
    1,5 MB · Aufrufe: 3

KonradN

Super-Moderator
Mitarbeiter
Deine Hinweise sind doch soweit erst einmal korrekt würde ich auf den ersten Blick sagen. Was Du nicht gesehen hast: Du hast angemeckert, dass s und n keine sinnvollen Bezeichner sind. Dabei hast Du übersehen, dass n nicht deklariert wurde und daher einfach unbekannt ist.

Die Definition der einzelnen Fehlertypen müsste man dann noch einmal schauen. Lexikalische Fehler sind ja Tippfehler. Da kann man ungültige Bezeichner drunter fassen. Aber diese "default" Methode - da ist ja nichts falsch geschrieben worden, daher ist das ein syntaktischer Fehler (= Grammatik falsch und das ist ja hier gegeben. Das default hat da einfach nichts verloren!).
 

KonradN

Super-Moderator
Mitarbeiter
Ach und, findet hier auch jemand 2 Semantische Fehler (Statisch Semantisch)? die sollte ich auch finden. Weiß aber nicht wo
Ein semantischer Fehler ist z.B. wenn eine Variable nicht deklariert wurde - das wäre also bei dem n der Fall.

Zeile 44 ruft feed auf ohne Parameter. Da ist die Frage, wie eure Definitionen genau sind. Die Java Syntax ist ja richtig nur eben gibt es diese Methode nicht.
 

OlafScholz

Mitglied
Vielen Dank KonradN,

In wie weit sind Syntaktische Fehler dann zu unterscheiden zu Lexikalischen? Klammern vergessen oder Komma statt Semikolon zählt dann nicht zu vertippt (Lexikal) sondern zu Syntax.

dieses Leerzeichen zwischen Objekt und Instruktion ist aber schon Lexikalischer Fehler

EDIT
 

OlafScholz

Mitglied
Ein semantischer Fehler ist z.B. wenn eine Variable nicht deklariert wurde - das wäre also bei dem n der Fall.

Zeile 44 ruft feed auf ohne Parameter. Da ist die Frage, wie eure Definitionen genau sind. Die Java Syntax ist ja richtig nur eben gibt es diese Methode nicht.
Das wäre bei uns dann glaube ich ein Statische Semantischer Fehler :D
 

KonradN

Super-Moderator
Mitarbeiter
Also das Leerzeichen nach dem Punkt ist kein Fehler. Das ist also maximal ein Verstoß gegen Styling Guides. Aber Java erlaubt dies.

Es ist aber möglich vor und nach dem Punkt Whitespace einzufügen. Wobei es nach dem Punkt in meinen Augen unüblich ist.

Ansonsten habe ich zu Fehlertypen dies gefunden:
 

KonradN

Super-Moderator
Mitarbeiter
Wenn Du mir sagst, das dynamisch semantische Fehler sind. Semantik ist ja die Bedeutung vom Code. Das wäre also etwas wie im Konstruktor, dass da n verwendet wurde aber n ist nicht deklariert worden. Aber was bedeutet das dynamisch? Ist dieser Semantische Fehler ein dynamisch semantischer fehler?

Da sind also die verwendeten Begriffe einfach nicht klar.

Und wie wird z.B. bewertet, dass payFee von Visitor eine Rückgabe hat und diese im Code ignoriert wird. Das wäre da auch noch ein Punkt, der noch nicht erwähnt wurde.
 

OlafScholz

Mitglied
Wenn Du mir sagst, das dynamisch semantische Fehler sind. Semantik ist ja die Bedeutung vom Code. Das wäre also etwas wie im Konstruktor, dass da n verwendet wurde aber n ist nicht deklariert worden. Aber was bedeutet das dynamisch? Ist dieser Semantische Fehler ein dynamisch semantischer fehler?

Da sind also die verwendeten Begriffe einfach nicht klar.

Und wie wird z.B. bewertet, dass payFee von Visitor eine Rückgabe hat und diese im Code ignoriert wird. Das wäre da auch noch ein Punkt, der noch nicht erwähnt wurde.
Also, das Fehlen des Rückgabetyps bei payFee ist ein Statisch Semantischer Fehler. Uns wurde es so gesagt das Statisch semantische Fehler, die sind, die der Compiler erkennen kann (Syntax ist aber richtig), also gerade sowas wie das weglassen von rückgabewerten oder das dynamische binden von Objekten die nicht konform sind. Dynamische Fehler werden erst zu Laufzeit auffallen, sowas wie Division durch 0 bei Benutzer Eingabe.
 

schlaui

Mitglied
Der dynamisch-semantische Fehler ist in Zeile 9: falsche Klammersetzung ...

Beispiel:

Java:
    public static void main(String[] args) {
        System.out.println(true || false == false);
        System.out.println((true || false) == false);
    }

Gibt true und false aus. Du möchtest hierbei aber, dass false ausgegeben wird.
 

OlafScholz

Mitglied
Der dynamisch-semantische Fehler ist in Zeile 9: falsche Klammersetzung ...

Beispiel:

Java:
    public static void main(String[] args) {
        System.out.println(true || false == false);
        System.out.println((true || false) == false);
    }

Gibt true und false aus. Du möchtest hierbei aber, dass false ausgegeben wird.
Stimmt Vielen Dank!

Damit ist das gröbste wohl geschafft, ich hoffe dann nur mal meine Klassifizierung der restlichen Fehler war richtig
 

KonradN

Super-Moderator
Mitarbeiter
Ah, ok. Aber der Aufruf ist ja korrekt. Nur weil eine Methode etwas zurück gibt musst Du damit ja nichts machen.

Der dynamisch-semantische Fehler ist in Zeile 9: falsche Klammersetzung ...
Das sehe ich nicht so. Der Code in Zeile 9 ist:
if ( s== null || s.equals("") == true)

Was da als Fehler angegeben werden könnte wäre das == true. Das wäre aber ein reiner Styleguide Verstoß. Syntaktisch ist es richtig.

Es soll in der Zeile ja ganz offensichtlich abgeprüft werden:
- ist s null?
oder
- ist s.equals("") == true
Und das ist genau das, was der Code auch macht. Denn in der Rangfolge kommt == vor ||.
Siehe https://www.programmierenlernenhq.de/java-grundlagen-rangfolge-der-java-operatoren/
 

schlaui

Mitglied
Du musst mir solche Links nicht geben, ich kenne die Präzedenzen ...

== true ist redundant, ein dynamisch-semantischer Fehler.

Die anderen Erklärungen habe ich bislang noch nicht vollständig gelesen.

Wie viel Minuten Zeit sind pro Aufgabe angedacht?
 

KonradN

Super-Moderator
Mitarbeiter
@mrBrown: Meine Frage ist: Wolltet Ihr Tobias nicht einfach bannen, wenn er aufschlägt? Es ist ja toll, wenn er sich beteiligen möchte, aber diese Entgleisungen wird er wohl nie sein lassen....
 

Neue Themen


Oben