1.演算子とは
Java言語で足し算等の計算をする場合、演算子を使います。
演算子はJavaだけでなく様々なプログラム言語で使用されます。下の表にまとまますので暗記してください!
①単項演算子 (++,——)
「++」をインクリメントと呼び、「——」をデクリメントという。
要は1を足す。1を引くという処理をします。
簡単だが1つ落とし穴がある。
ex1) i++ (処理後にインクリメントする)
ex2) ++i (処理前にインクリメントする)
上記、どちらの記載もOKですが、意味が変わってきます。
「何か問題でも?」とお思いでしょうから、下記例を見て下さい。
ex3)
i = 5;
System.out.println (++i);
上記をやった場合、表示されるのは・・・6です。
「++i」は処理前に+1をして、その後printlnで表示されるので6になります。
i = 5;
System.out.println(i++);
上記をやった場合、表示されるのは・・・5です。
printfでiに格納されている5を表示した後、++で6になっています。
②複合演算子 (+=,-=,..)
簡単です。
a = b ・・・これは aにbを代入する。でしたが、
ex1) a += b ・・・この場合、a+bをaに代入する。なのです。
その他にも
ex2) a -= b ・・・a-bをaに代入する。
ex3) a *= b ・・・a×bをaに代入する。
③関係演算子 (==,!=,…)
関係演算子は、2つの値を比較し、その結果をboolean値のtrueかfalseで返します。
ex)
int a = 1, b = 1;
a == b; //イコールかどうかなので、true
a != b; //notイコールかどうかなので、false
a > b; //aはbより大なりかどうかなので、false
a >= b; //aはb以上かどうかなので、true
④論理演算子 (&&,||,…)
論理演算子とは・・・説明するよりも例えた方が分かりやすいです。
・性別が男かつ年齢が20歳以上 →この「かつ」が&&
→A && B // AとB、どちらもtrueならtrue
・性別が男もしくは年齢が20歳以上 →この「もしくは」が||
→A || B // AとB、どちらかがtrueならtrue
ex)
int a = 1, b = 1, c = 2, d = 3 ;
(a == b) && (c != d) →true
//[a=1]と[b=1]は同じ、[c=2]と[d=3]は違う。
//どちらも満たしているのでtrue(a != b) || (c != d) →true
//[a=1]と[b=1]は違う、[c=2]と[d=3]は違う。
//[c=2]と[d=3]は違う。を満たしているのでtrue(a != b) && (c != d) →false
//[a=1]と[b=1]は違う、[c=2]と[d=3]は違う。
//[a=1]と[b=1]は違う。を満たしてないのでfalse
2.分岐
プログラムで大きな役割を持つ分岐!
この分岐については、Javaのみではなく全てのプログラム言語に使われています。
ここではif文とswitch文というものがあるので、必ず覚えましょう。
①if文
最もメジャーな分岐文。まずは構文を暗記!
構文
if (条件式1 ※boolean(true/false)で判定){
処理文1; //条件式1がtrueなら実行
} else if (条件式2) {
処理文2; //条件式1がfalseで条件式2がtrueなら実行
} else {
処理文3; //条件式1,2,どちらもfalseなら実行
}
上記構文の意味はわかりますよね?
例えば、遊園地の割引システムがあったとして・・・
ex)
条件文1→女性の方であるかどうか
処理文1→1000円割引条件文2→学生の方
処理文2→2000円割引それ以外→割引なし
のような分岐を施すことができるのです。
【テストに出る引っ掛け】
またif文の構文は{ }カッコを省略することができます。つまり・・・
ex1)
if (num > 10)
System.out.printfln(“aaa”);
上記例の際に、numが11でtrueだった場合、aaaが表示されます。
逆に、numが1でfalseだった場合、何も表示されません。
では・・・
if (num > 10)
printf (“aaa”); //{}が省略されているif文は最初の一文のみ条件式が効く
printf (“bbb”);
上記例文だと、
[numが10より大きい場合→aaa][[numが10より小さい場合→bbb]
が表示されるように見えます。が、違います!
{}を省略したif文の条件式が適用されるのは最初の処理文1行のみ!なのです。
なので、上記例文の場合、
numが11の場合→aaa、bbb、が表示。
numが1の場合→bbb、が表示。
つまり、printf (“bbb”);という処理はifが効いていない為、常に実行されてしまうのです。
【3項演算子】
この章の頭の表に記載された3項演算子の説明をします。
この3項演算子を使ってif文みたいなものを作れるのです。
構文
条件式 ? 式1 : 式2
構文だけだと良く分からないので例文も。
ex)
str = num < 10 ? ”1桁” : ”2桁” ;
上記例文の場合、
numが10未満の場合→”1桁”
numが10より大きい場合→”2桁”
となり、正にif文と同じ使い方ができるのです。
②switch文
if文と同じようなことができるのだが、分岐が多い場合はswitch文を使う方がベターです。
またif文との大きな違いとして、一度caseに入るとそれ以降は全ての処理を通ります。それだと困るのでbreakがある。のですが、まぁその辺の説明は追ってしましょう。
まずは構文から。
構文
switch (式){
case 定数1: //式の結果が定数1と一致した場合、以下の処理文を実行
処理1;
case 定数2: //式の結果が定数2と一致した場合、以下の処理文を実行
処理2;
・・・・
default : //どのcaseにも一致しなかった場合、以下の処理文を実行
処理 default
}
ここも例文がないと分かり辛いと思うので・・・
ex1)
switch (i) { //iに入っているデータ型はbyte,char,shot,int,Stringのみ
case 1 :
System.out.println(“1です。”);
case 2 :
System.out.println(“2です。”);
default :
System.out.println(“1でも2でもありません。”) ;
}
上記例文の場合、i=1だった場合・・・
結果は[1です。]が表示されると思いますが・・・実際は違います!
[1です。2です。1でも2でもありません。]と表示されます。
これだと意図した動きではないですよね。そんなときに使うのがbreak文です。
※break文とは
break文とは、switch文を抜けられる処理のことです。
さっきの例文で紹介します。
switch (i) { //iに入っているデータ型はbyte,char,shot,int,Stringのみ
case 1 :
System.out.println(“1です。”);
break ;
case 2 :
System.out.println(“2です。”);
break ;
default :
System.out.println(“1でも2でもありません。”) ;
}
上記例文の場合、先程と同じように、i=1だった場合・・・
[1です。]と表示されます。
このように違いはありますが、if文とswich文は分岐の処理をすることができます。
※elseとdefaltの違い
else →不一致の時のみ実行
defalt →全ての分岐に対して実行。実行させたくない場合はbreakが必要!
ちなみにdefaltは、例文では最後に記述していましたが、どこに書いても有効です。