15
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ポケモン×Java】知識編 ERROR #4 論理エラーって何?

Posted at

ここまでで、

  • 書き方が間違っていると止められる(コンパイルエラー)
  • 状態が危険だと途中で止められる(実行時エラー)

というエラーを見てきました。

でも、プログラミングにはもう一つ、
少し厄介なケースがあります。

エラーは出ない
プログラムも最後まで動く
でも、結果がどこかおかしい

このときに起きているのが、論理エラーです。

論理エラーとは

論理エラーは、
Java的には正しいが、人間の期待と結果がズレている状態です。

  • 文法は正しい
  • 実行もできる
  • 例外も出ない

それでも、
想定と違う結果」になります。

Javaはルールどおりに、
とても素直に動いています。

ズレているのは、
人間側の前提や考え方です。

よくある論理エラーの例

例1:ループ回数の思い込み

for (int i = 1; i < 5; i++) {
    System.out.println("れんぞくこうげき!");
}

このコードは、
攻撃を 4回 行います。

でも、人間の感覚では、

1~5回だよね?って考えてしまいがちです。

例2:条件分岐の思い込み

int hp = 0;

if (hp >= 0) {
    System.out.println("こうげき!");
} else {
    System.out.println("バトル終了");
}

このコードでは、
HPが 0のときでも攻撃 できます。

仕様としては、

HPが0以上だったら攻撃可能って考えてしまいがちです。

なぜ論理エラーは止められないのか

Javaが判断できるのは、

  • 文法が正しいか
  • 型が合っているか
  • 実行できるかどうか

までです。それが、正しい仕様なのか
判断できません。
だから、
止める理由がないのです。


あとがき

ここまで読んでくれて、本当にありがとうございました。

「プログラミングって難しい…」って思ってた人も、
「ちょっと楽しいかも…!」って思ってもらえたらうれしいな。

次の投稿も、よろしくおねがいします。

💬 コメント・フィードバック歓迎!

「この章わかりやすかった!」
「これ表現まちがってない?」
「次は○○をやってほしい!」などなど、
お気軽にコメントで教えてくださいね!


15
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?