はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。
環境
言語:Java11、JDK13.0.2
動作環境:Windows10
演算子
前回は、加算と連結に使う+、代入に使う=を扱った。Javaの演算子はたくさんあるが、今回は代表的なものを扱う。以下リスト。
1.乗算(*),除算(/),剰余(%)
2.等価(==)と不等価(!=)
3.インクリメント(++)とデクリメント(--)、またその前置後置
乗算・除算・剰余
Javaにおいて(僕が知るに少なくともPythonも)、乗算の場合に×でなく*を使う。除算は÷でなく/、そして剰余(余りの数を出す)は%を使う。
除算と剰余において、0で割ることは許されていない(0除算)。コンパイルの際にはエラーとして出てこないが、実行のときに例外が送出され処理が止まるようになっている。
この問題について、Qiita内で0除算について記事を挙げている方がいるので、(3年以上前の記事だが)リンクを張らせていただく。
実際に僕が間違えた例も挙げる。
int dayInMonth = 0;
...
// ここまでの処理内でdayInMonthに値を入れ忘れた。
averageFeedCatFood =
totalFeedCatFood / dayInMonth;
猫に与える月の平均エサ量を算出するのに、合計エサ量から一か月の日数を割るだけの計算。初期値を0にしたのも悪いが、途中の処理でdayInMonthに値を入れるのを忘れたのがいけない。
等価と不等価
=が等価でなく代入として使われることは前回書いた。本来の等価として使う場合は==を、不等価を表す場合には!=を使う(=と!の間に空白を入れてはならない)。
等価と不等価はオペランド2項の関係を調べるものであり、関係演算子とも呼ばれる。
よく用いられるのは、if文の条件として等価・不等価を使う場合で、式の真偽値で判定するためである。
ex)
if( int lastDayInFeburary == 29){
totalPayment = totalPayment + dailyPayment;
}
else{
totalPayment = totalPayment;
}
//2月に29日がある場合、合計支払いに一日分の支払いを追加する処理。
以下間違え。
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 も同じ (代入演算子)
また、このインクリメント・デクリメントは変数の前に置くか後ろに置くかで処理が異なる。
例を挙げるが、どこのコメントが間違えか探してみてほしい。長すぎるので注意(クラス処理を丸ごと掲載する)。
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 + "円入っています。");
//
}
}
後置の場合、代入してから値に+1。
前置の場合、値を+1してから代入。
ここは要復習。
終わりに
等価・不等価はまだよく理解できていないと思う。2項演算の時に復習する。インクリメント・デクリメントで間違えることは多いはず。自分で作って練習するしかないだろう。
参考
今まで書いていなかったので、僕の参考書を挙げる。過去記事にも追記する。
出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。