2016-04-24 11 views
1

Ich habe eine Menge Fragen zu diesem Thema gesehen, aber ich konnte immer noch nicht herausfinden, ob das Folgende ein semantischer oder logischer Fehler ist.
sagen, dass ich den folgenden Java-Code haben:Semantischer oder logischer Fehler?

boolean a = false; 
if (a = false) System.out.println("yes"); 
else System.out.println("no"); 

Sie schon wollte ich kann sehen, wahrscheinlich == statt = aufzuschreiben, aber: das Programm ganz gut kompiliert und läuft ohne Fehler. Es gibt mir jedoch nicht das beabsichtigte Ergebnis.

Ich habe irgendwo gefunden, dass semantische Fehler immer einen Fehler (zur Kompilier- oder Laufzeit) geben, also muss das ein logischer Fehler sein. Ein anderer Text besagt jedoch, dass semantische Fehler nicht immer einen Fehler ergeben. Die Frage ist also: Enthält das obige Beispiel einen semantischen oder logischen Fehler?

+0

Sind das nicht die gleichen Dinge? Jedes Mal, wenn ich über diese Begriffe lese, scheint die Definition von beiden, dass das Programm syntaktisch gültig ist (dh es ist ein gültiges Programm), aber es tut nicht, was der Programmierer beabsichtigt hat. –

+0

@ LasseV.Karlsen Ich dachte zuerst das Gleiche, aber das ist nicht der Fall. Zum Beispiel würde dies als ein semantischer Fehler betrachtet werden, wenn "a" ein "String" wäre. – SWdV

+0

@ LasseV.Karlsen (Soweit ich das verstehe, liegt das daran, dass _pattern_ korrekt ist, die Umstände (Variablentyp) sind es jedoch nicht.) – SWdV

Antwort

-1

Indem Sie den folgenden Ausdruck schreiben: a = false Sie grundsätzlich zuweisen eine Variable mit dem Wert false, die gut funktioniert und True als erfolgreiche Operation zurückgegeben und das ist, warum Sie immer "Ja" in der Konsole drucken.

+1

Nicht nur hast du seine Frage nicht beantwortet, deine Interpretation von was? If (a = falsch) 'ist auch falsch. Das Ergebnis ist nicht "wahr", weil die Zuweisung erfolgreich war, es ist "falsch", weil der Wert eines Zuweisungsausdrucks in Java dem zugewiesenen Wert entspricht, also "falsch" ist. –

+0

@ LasseV.Karlsen hat Recht, das wusste ich. Könnten Sie die Frage ein anderes Mal lesen, aber sorgfältiger? – SWdV

Verwandte Themen