1
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-04

はじめに

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

環境

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

演算子

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

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

乗算・除算・剰余

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

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

「0で割る」 @yamayasan

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

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日がある場合、合計支払いに一日分の支払いを追加する処理。

以下間違え。

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 も同じ (代入演算子)

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

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

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 + "円入っています。");
        //
    }
}

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

終わりに

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

参考

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

やさしいJava 第7版

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