3章 講義

1.演算子とは

Java言語で足し算等の計算をする場合、演算子を使います。
演算子はJavaだけでなく様々なプログラム言語で使用されます。下の表にまとまますので暗記してください!

enzanshi

①単項演算子 (++,——

「++」をインクリメントと呼び、「——」をデクリメントという。
要は1を足す。1を引くという処理をします。
簡単だが1つ落とし穴がある。

ex1) i++ (処理後にインクリメントする)
ex2) ++i (処理前にインクリメントする)

上記、どちらの記載もOKですが、意味が変わってきます。
「何か問題でも?」とお思いでしょうから、下記例を見て下さい。

ex3)

i = 5;
System.out.println (++i);

上記をやった場合、表示されるのは・・・です。
++i」は処理前に+1をして、その後printlnで表示されるので6になります。

i = 5;
System.out.println(i++);

上記をやった場合、表示されるのは・・・です。
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値のtruefalseで返します。

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は、例文では最後に記述していましたが、どこに書いても有効です。

以上!3章講義はここまで。問題にチャレンジしてください!