2016-04-24 13 views
1

私はこの件に関してたくさんの質問をしましたが、私はまだ以下が意味論的なものか論理的なものかを知ることができませんでした。
は、私は次のJavaコードを持って言う:意味または論理エラー?

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

あなたはすでに私はおそらく==代わりの=を書き留めたいと思っ見るかもしれないが、:プログラムがうまくコンパイルし、エラーなしで実行されます。しかし、意図した結果が得られません。

私は、意味論的なエラーがいつも(コンパイル時または実行時に)エラーを起こしていることがわかりました。したがって、これは論理エラーでなければなりません。しかし、別のテキストによると、意味エラーは必ずしもエラーを出すとは限りません。したがって、疑問があります:上記の例は意味論的または論理的なエラーを含んでいますか?

+0

これらは同じものではありませんか?私がこれらの用語について読んだところでは、両方の定義は、プログラムが構文的に有効である(つまり有効なプログラムです)が、プログラマーが意図したことをしないということです。 –

+0

@ LasseV.Karlsen私は最初、同じことを考えましたが、それは事実ではありません。また、例えば、 'a'が' String'であった場合、これはセマンティックエラーとみなされます。 – SWdV

+0

@ LasseV.Karlsen(私が理解する限り、これは_pattern_が正しいため、状況(変数型)はありません)。 – SWdV

答えて

-1

a = falseを書くことによって、基本的には正常に動作し、成功した操作としてtrueを返す変数falseを変数に割り当てているため、常にコンソールに「yes」と表示されます。

+1

あなたは彼の質問に答えなかっただけでなく、 = false) 'はまた間違っています。代入式が成功したため結果は 'true'ではなく、Javaの代入式の値が代入されているので' false'です。したがって 'false'です。 –

+0

@ LasseV.Karlsenはそうです、私はそれを知っていました。もう一度質問を読むことができますが、もっと慎重に考えてください。 – SWdV

関連する問題