0
1

More than 3 years have passed since last update.

初心者から始めるJava、論理演算子・条件演算子

Last updated at Posted at 2020-03-06

追記 2020/3/6 @shiracamusさんより大幅な編集リクエストをいただきましたので、そちらに差し替えさせていただきます。
(旧記事は本当に自分用の備忘録として、限定投稿の方に残しました)
追記 2020/3/6
条件演算子の末尾にセミコロンが必須と書いた内容について、ご指摘いただいたので訂正。いつもありがとうございます。

はじめに

この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

環境

言語:Java11、JDK13.0.2
動作環境:Windows10

論理演算子

論理演算子(Logical Operator)とは、前回挙げた条件や関係演算子を使いつつ、より複雑な条件の記述を行う場合に用いられる演算子。今回は「オペランド(項)をいくつとる演算子なのか」を書く。オペランドを2つとる演算子を二項演算子、オペランドを一つしかとらないものを単項演算子という。オペランドには式を書く。

  • && : 右項 && 左項
    論理積。二項演算子。
    右項と左項の式を評価し、いずれもtrueのときtrueを返す。
    ただし、まず右項を評価してから左項を評価する。右項がfalseのときは左項を評価しない。これを短絡評価という。
  • || : 右項 || 左項
    論理和。二項演算子。
    右項と左項の式を評価し、どちらかがtrueのときtrueを返す。
    ただし、まず右項を評価してから左項を評価する。右項がtrueのときは左項を評価しない。&&同様に短絡評価である。
  • ! : ! 単項
  • 論理否定。単項演算子。
    単項の式の評価結果がfalseのときtrueを返し、trueのときfalseを返す。

数学の「集合」でよく見かけたベン図を用いると、真理値がどうなっているか分かるだろう。下手で申し訳ないが、一応用意した。(最重要課題:作図能力)
ベン図(仮).png

緑 && 赤 :trueは青
緑 || 赤:trueは灰を除いてすべて
!(灰):赤青緑

となる。
(本当は青はゆがんでいるのではないかなどのご指摘は、すみません)

論理演算子の間違い実践

digitForture.java
import java.io.*;
class digitForture
{
    public static void main(String[] args) throws IOException
    {
      System.out.println("好きな一桁の数字を入力してください。");

      BufferedReader br =
        new BufferedReader(new InputStreamReader(System.in));

      String str = br.readLine();
      int digit = Integer.parseInt(str);

      if(digit > 10 && digit <= -1){
          System.out.println("一桁までの数字を入力してください。");
          //ん?
        }
      else{
          System.out.println("あなたの数字は" + digit + "ですね?");
          System.out.println("今から調べますので少々お待ちください...。");
    }
}
...//以降省略。占いに用いる、一桁の数字と紐づいた運勢表を用意したとする。

このままだと、せっかく用意した論理演算が有効でないので、ちゃんと&&||しなければならない。
自分が論理積を扱っているのか、論理和を扱っているのか。思考を整理するためにもベン図を(見やすく)作る練習がとても必要だと感じた。

条件演算子

条件演算子とは、オペランドを3つとり、条件式の評価結果に対して trueのときの式falseのときの式 を書くことができ、どちらかの式の評価結果を返す。もう一方の式は評価しない。
「条件式」のあとに、「?」と「trueのときの式」を書き、そのあとに「:」と「falseのときの式」を書く。

条件演算子の基本形
条件式 ? trueのときの式 : falseのときの式 

注意点が一つ。引用文では末尾の;(セミコロン)がない。
必ず入れなければならない。

2020/3/6追記:文中で条件として使うこともできるため、かならずしも入れる必要はない。
本当にセミコロンが必要なのは文末。これはこの演算子に限らない。
(コンパイルエラーで弾かれるのでさほど恐れる必要もない。最初の頃はよく弾かれることにいら立っていた。今は「弾いてくれて助かる」と感じている)

おわりに

パンかケーキかを判別する「pancakeSearch.java」を思いついたが、以下の問題を抱えている。


  • パンかケーキかを判別する根拠として、そのためのリストを作る必要がある。

  • 入力を受け付けたあと、リストをサーチして結果をだす機構について調べる必要がある。

  • そもそもパンケーキは「パン+ケーキ」ではなく、「pan(英語の鍋)+cake」であり、多分ケーキ。

参考

出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。

やさしいJava 第7版

0
1
6

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
0
1