初心者から始めるJava、式と演算子 2

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

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

#演算子
前回は、加算と連結に使う＋、代入に使う＝を扱った。Javaの演算子はたくさんあるが、今回は代表的なものを扱う。以下リスト。

**1.乗算(*),除算(/),剰余(%)**
**2.等価(==)と不等価(!=)**
**3.インクリメント(++)とデクリメント(--)、またその前置後置**

#乗算・除算・剰余
Javaにおいて(僕が知るに少なくともPythonも)、乗算の場合に×でなく*を使う。除算は÷でなく/、そして剰余(余りの数を出す)は%を使う。

除算と剰余において、0で割ることは許されていない（0除算）。コンパイルの際にはエラーとして出てこないが、実行のときに例外が送出され処理が止まるようになっている。
この問題について、Qiita内で0除算について記事を挙げている方がいるので、（3年以上前の記事だが）リンクを張らせていただく。

[「0で割る」](http://https://qiita.com/yamayamasan/items/bfb2078bb899349b45ac) @yamayasan

実際に僕が間違えた例も挙げる。

```Java:ZeroDivisionError.java
int dayInMonth = 0;
...
// ここまでの処理内でdayInMonthに値を入れ忘れた。
averageFeedCatFood = 
totalFeedCatFood / dayInMonth;
```
猫に与える月の平均エサ量を算出するのに、合計エサ量から一か月の日数を割るだけの計算。初期値を0にしたのも悪いが、途中の処理でdayInMonthに値を入れるのを忘れたのがいけない。

#等価と不等価
＝が等価でなく代入として使われることは前回書いた。本来の等価として使う場合は==を、不等価を表す場合には!=を使う（=と!の間に空白を入れてはならない）。
等価と不等価はオペランド2項の関係を調べるものであり、**関係演算子**とも呼ばれる。
よく用いられるのは、if文の条件として等価・不等価を使う場合で、式の真偽値で判定するためである。

ex)
if( int lastDayInFeburary == 29){
totalPayment = totalPayment + dailyPayment;
}
else{
totalPayment = totalPayment;
}
//2月に29日がある場合、合計支払いに一日分の支払いを追加する処理。

以下間違え。

```Java:WrongRerational.java
boolean judge = True;
int judgementDay = 30;

if(judgementDay != 30){
    judge = False;
}
else{
    judge = True;
}
System.out.println("今日のお告げは" + judge + "なので、裁きの日ではない。")
//単純にjudgeがどちらなのか勘違いして、
//文章を助かる文にしてしまった。
```
もっと難しい条件式になるとき、ifに頼っていると、思っていたのと違う結果が量産されて困ることになりそうだ。

#インクリメント・デクリメント
インクリメント(++)は変数の値を1増やして代入する、デクリメント(--)は変数の値を1減らして代入する。
書き方はこうなる。
ex)
int day++;
//これはint day = day + 1;　と同じ処理になる。
// int day += 1　も同じ **（代入演算子）**

int couponTickets--;
//これはint couponTickets = couponTickets - 1;　と同じ。
//couponTickets -= 1　も同じ **(代入演算子)**

また、このインクリメント・デクリメントは**変数の前に置くか後ろに置くかで処理が異なる**。

例を挙げるが、どこのコメントが間違えか探してみてほしい。長すぎるので注意（クラス処理を丸ごと掲載する）。

```Java:piggyBank.java
class piggyBank
{
    public static void main(String[] args)
    {
        int piggyBank = 99;
        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //99

        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //99

        piggyBank = piggyBank++;
        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //99

        piggyBank = piggyBank++;
        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //99

        piggyBank = ++piggyBank;
        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //100

        piggyBank = ++piggyBank;
        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //101

        piggyBank = piggyBank--;
        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //100?

        piggyBank = piggyBank--;
        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //100

        piggyBank = --piggyBank;
        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //99

        piggyBank = --piggyBank;
        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //99

        System.out.println("今の貯金箱は" + piggyBank + "円入っています。");
        //
    }
}
```

後置の場合、代入してから値に＋１。
前置の場合、値を＋１してから代入。
ここは要復習。

#終わりに
等価・不等価はまだよく理解できていないと思う。2項演算の時に復習する。インクリメント・デクリメントで間違えることは多いはず。自分で作って練習するしかないだろう。

#参考
今まで書いていなかったので、僕の参考書を挙げる。過去記事にも追記する。
出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。

[やさしいJava 第7版](http://mana.on.coocan.jp/yasaj.html)