ひき続き、Java言語セミナーを受講してのメモをしていきます。
演算子の優先度と結合規則
演算子とは
各種の演算をあらわす記号・符牒のことである。演算が作用する対象のことを被演算子(operand; オペランド、被演算数、引数)という。たとえば、n と 3 との和を表す式 "n + 3" において、"+" は演算子であり、その被演算子は "n" と "3" である。
優先度は、1行の式の中に複数の演算子があった場合にどの演算子から処理するかということで、結合規則は 、優先度が同じ演算子がある場合に、左から右に処理していくか(左結合)、右から左に処理していくか(右結合)を決めるものです。
演算子の一覧
まぎらわしい単項演算子
++演算子(インクリメント演算子)と --演算子(デクリメント演算子)、この2つは特徴がありまして、前置と後置で 動作が変わってきます。
例
aの初期値 | 式 | 実行後のaの値 | 実行後のbの値 |
---|---|---|---|
10 | b = ++a; | 11 | 11 |
10 | b = a++; | 11 | 10 |
10 | b = --a; | 9 | 9 |
10 | b = a--; | 9 | 10 |
実際にプログラムで確認
class sample_test{ public static void main(String[] args){ int a = 10; int b = 10; int c = 10; int d = 10; System.out.println(a++); // 10 System.out.println(++b); // 11 System.out.println(c--); // 10 System.out.println(--d); // 9 a = 10; b = 10; c = 10; d = 10; b = ++a; //前置 System.out.println("a = " + a + "b =" + b); // a = 11 b = 11 d = c++; //後置 System.out.println("c = " + c + "d =" + d); // c = 11 d = 10 } }
複合代入演算子
演算子 | 記述例 | 説明 | 分解した形 |
---|---|---|---|
+= | a += b | aにbを加えた値をaに代入する | a = a + b |
-= | a -= b | aからbを引いた値をaに代入 | a = a - b |
*= | a *= b | aにbを乗じた値をaに代入する | a = a * b |
/= | a /= b | aをbで割った値をaに代入する | a = a / b |
%= | a %= b | aをbで割ったあまりをaに代入する | a = a % b |
関係演算子
2つの値を比較し、結果をboolean値(trueかfalse)で返します。
演算子 | 記述例 | 説明 |
---|---|---|
== | a==b | aとbの値が等しければtrue、異なればfalse |
!= | a!=b | aとbの値が異なればtrue、等しければfalse |
> | a>b | aの値がbの値より大きければtrue、小さければfalse |
>= | a>=b | aの値がbの値以上ならばtrue、小さければfalse |
< | a<b | aの値がbの値より小さければtrue、大きければfalse |
<= | a<=b | aの値がbの値以下ならばtrue、大きければfalse |
論理演算子
Javaでは、and条件に「&」と「&&」、or条件に「|」と「||」の2つがあります。
演算子 | 記述例 | 説明 |
---|---|---|
& | a & b | aとbの両方がtrueのときtrue、そうでなければfalse aがfalseであったとしてもbは評価される |
&& | a && b | aとbの両方がtrueのときtrue、そうでなければfalse aがfalseならbは評価されず結果がfalseになる aがtrueならbも評価され結果を返す |
| | a | b | aとbいずれかがtrueならtrue、そうでなければfalse aがtrueであったとしてもbは評価される |
|| | a || b | aとbいずれかがtrueならtrue、そうでなければfalse aがtrueならbは評価されず結果がtrueとなる aがfalseならbも評価され結果を返す |
^ | a ^ b | aとbの値が異なるときtrue、そうでなければfalse |
! | !a | aの値がtrueのときfalse、falseのときtrue |
組み合わせ | &、&& | |、|| |
---|---|---|
true - true | true | true |
true - false | false | true |
false - true | false | true |
false - false | false | false |
プログラムの流れをコントロールする制御文
Javaには、3種類の制御文があります。
条件により処理を変えたり、同じ処理を繰り返したりするときに制御文が使われます。
- 条件文
- 繰り返し文
- 繰り返し制御文
条件文
Javaの条件文は大きく分けてif文とswitch文に分けられます。
if文
条件式をboolean値(trueかfalse)で判定し、処理をするかどうかを決めます。
if(条件式){ 処理文; //条件式の結果がtrueなら実行 }
例:if文のイメージ図
if文の処理文が一行のときは{ }が省略される場合があります。
class sample_test02 { public static void main(String[] args){ int num = 5; //if文{}ありの場合 if(num < 10){ System.out.println("numの値は10未満です。"); } num = 20; //if文{}無しの場合 if(num >= 100) System.out.println("numの値は100以上です。"); System.out.println("2つ目のif文の後の処理"); } }
11行目の処理は10行目のif文の条件式がfalseになるので処理されず、その後12行目の処理が実行されます。
if - else文
falseの時の処理も記述したい場合は、if - else文を使います。
if(条件式){ 処理文1; //条件式の結果がtrueのときに実行 }else{ 処理文2; //条件式の結果がfalseのときに実行 }
else if文
多分岐処理を実行したい場合は、else if文を使います。
if(条件式1){ 処理文1; //条件式1の結果がtrueのときに実行 }else if(条件式2){ 処理文2; //条件式2の結果がtrueのときに実行 }else{ 処理文3; //条件式1および条件式2の結果がfalseのときに実行 }
条件演算子
条件演算子は3つの項目からなるので3項演算子に分類されるようです。
条件式がtrueのときは式1を、条件式がfalseの時は式2を実行します。
条件式? 式1 : 式2 ;
class sample_test03{ public static void main(String[] args){ int num = 20; String str = "numの値は"; str += num < 10 ? "10未満" : "10以上"; System.out.println(str); } }
条件式がfalseを返すので、式2が実行され「10以上」という文字列が返され、+=演算子でstr変数の文字列と結合され、改めてstr変数に代入されます。
ifのネスト(入れ子)
if文の中に別のif文を記述することができます。条件文の中に別の条件文を記述することをネスト(入れ子)と呼ぶようです。
class sample_test04 { public function static void main(String[] args){ int a = 10; if(a > 0){ System.out.println("aのは正の値です。"); if(a % 2 == 0){ System.out.println("aは偶数です。"); } }else{ if(a == 0){ System.out.println("aは0です。"); }else{ System.out.println("aは負の値です。"); } } } }
ネストの階層はあまり深くすると可読性が落ちるので、3階層ぐらいまでに留めるのが良いようです。
switch文
式の評価結果とcaseで指定した定数を比較し、一致した場合に処理文を実行します。
式の評価結果のデータ型はbyte、char、short、int、enum、Stringのいずれかの値でなければなりません。
default:はswitch文内のどこに記述してもOKで、記述を省略してもOKです。
break文を記述しない場合は、次のcaseに記述した処理文も続けて実行されます。
switch(式){ case 定数1: //式の結果が定数1と一致したら、処理文1を実行 処理文1; break; case 定数2: //式の結果が定数2と一致したら、処理文2を実行 処理文2; break; case 定数3: //式の結果が定数3と一致したら、処理文3を実行 処理文3; break; ・・・ default : //式の結果がどのcaseとも一致しなければ、処理文nを実行 処理文n; }
実際にプログラムでswitch文を試します。
class sample_test05{ public static void main(String[] args){ String str = "abcdeghijklmn"; char c = str.charAt(7); switch(c){ case 'f': System.out.println("f"); break; case 'g': System.out.println("g"); break; case 'h': System.out.println("h"); break; case 'i': System.out.println("i"); break; } } }
StringクラスのcharAt()メソッドは引数で指定した位置にある文字を取り出すので、「abcdefghimn」からcharAt(7)で取り出される文字は「h」となりhが表示されます。
ここまでの流れは、下記の書籍が詳しいです。
続きは、『Java言語セミナーを受講して 4章』に受講した時のことをメモしてきたいと思います。
今回はこのへんで。