Java②
真偽値と比較演算子
真偽値
真偽値の値には「true」と「false」という2つの値しか存在せず、trueは真(正しい)、falseは偽(間違っている)を意味する。真偽値のデータ型は「boolean型」。true, falseにはダブルクォーテーションは付けない。
boolean 変数名 = 値;
boolean bool = true;
真偽値は出力可能。
System.out.println(true); //trueが出力される
System.out.println(6 + 4 == 10); //trueが出力される
比較演算子
値を比較するための記号で、比較した結果は真偽値(trueかfalse)になる。
「x == y」はxとyが同じかどうかを比較。同じであればtrue、違っていればfalse。また「x != y」はその逆。
代入の「=」と比較の「==」を混同しない。
x == y //xとyが等しければtrue、等しくなければfalse
x != y //xとyが等しくなければtrue、等しければfalse
<, >は数学でも用いる大小比較の記号。x < yはxがyより小さければtrue, 大きければfalse。x > yはその逆。
数学で同様に用いる≦, ≧という記号(以上や以下を表します)は、<=, >=と記述する。
x < y //xがyより小さければtrue、大きければfalse
x <= y //xがy以下であればtrue、未満でfalse
論理演算子
「かつ」「または」「~でない」を表現する記号。
「かつ」は&&で表現し。「条件1 && 条件2」は「条件1がtrueかつ条件2もtrue」であれば結果もtrueになり、どちらか一方でもfalseであれば結果はfalse。
//X = 5の時
x >= 10 && X <= 20 //false
「または」は「||」で表現する。「条件1 || 条件2」は、「条件1または条件2のどちらか一方でもtrue」であれば結果はtrueになる。
//x = 5の時
x <10 || x >30 //true
!を用いると、「〜でない」を表現できる。例えば、!(x >= 30)は「xが30以上でない(つまり30より小さい)」ときtrueになり、「xが30以上」のときfalseになる。
条件分岐
if文
「もし〜なら」。この「〜」に当たる部分が、ifの後の()の部分です。これを条件式と呼びます。条件式がtrueなら{}内の処理を行い、反対に条件式がfalseなら何もしない。
if (条件式) {
//処理の内容
}
int x = 20;
if (int == 20) {
System.out.println("xは20です");
}
trueで行われる処理は、{}で囲まれたブロックの中にまとめて記述する。
int x = 20;
if (x == 20) { //{}の中をブロックと言う
System.out.println("条件はtrue");
System.out.println("xは20です");
}
「else」と「else if」
「そのほかの」というような意味。ifとelseを組み合わせると、「もし〜なら◯◯、そうでなければ△△」という条件分岐が可能になる。
int x = 20;
if (x < 30) {
System.out.println("xは30より小さい");
} else {
System.out.println("xは30より以上");
}
//trueなので「xは30より小さい」が出力される
if文ではelse ifを用いて、さらなる条件分岐が可能。ifとelse if、elseを組み合わせると、「もし〜なら◯◯、そうではなくてもし××なら△△、どちらでもない場合は□□」という条件分岐を実現できる。
int x = 35;
if (x >= 40) {
System.out.println("xは40以上");
} else if (x > 30) {
System.out.println("xは30より大きく、40より小さい");
} else {
System.out.println("xは30以下");
}
//x > 30でtrueになり、「xは30より大きく、40より小さい」が出力される
else ifは必要なだけ並べることができるが、複数の条件に合致しても、実行されるのは最初に合致した条件だけ。
switch文
条件分岐にはswitch文という構文もある。
switch (条件の値) {
case 値1:
処理;
break;
case 値2:
処理;
break;
case 値3:
処理;
break;
}
int n = 1;
switch (n) {
case 1:
System.out.println("大吉です");
break;
case 2:
System.out.println("吉です");
break;
}
if文だと
int n = 1;
if (n == 1) {
System.out.println("大吉です");
} else if (n == 2) {
System.out.println("吉です");
}
switch文ではbreakが非常に重要。breakとはswitch文を終了する命令。breakがないと、合致したcaseの処理を行った後、その次のcaseの処理も実行してしまう。
switch文では、どのcaseとも一致しなかったときに実行する処理を、defaultに指定することができる。if文のelseのようなもの。
int n = 0;
switch (n) {
case 1:
System.out.println("大吉です");
break;
case 2:
System.out.println("吉です");
break;
default:
System.out.println("凶です");
break;
}
if文では
int n = 1;
if (n == 1) {
System.out.println("大吉です");
} else if (n == 2) {
System.out.println("吉です");
} else {
System.out.println("凶です");
}
繰り返し処理
繰り返し処理とは、一定の処理を自動で繰り返し行う処理のこと。たとえば、1~100までの数字をコンソールに出力する場合、「System.out.println」を100まで記述するのは大変なので構文を利用する。
while文
whileとは「〜の間」という意味の英語。「条件がtrueの間、{ }内の処理を繰り返す」ことができる。
while (条件) {
//処理
}
int i = 1;
while (i <= 5) {
System.out.println(i);
i++
}
while文を繰り返すかどうか判断するため、変数 iを定義し初期化する
条件式をチェックする
処理を行う
変数iの値が更新される
変数iに1を足し忘れると変数iは1のまま変わらず、条件が永遠にtrueになってしまうので、繰り返し処理が無限に行われてしまう(無限ループ)。無限ループはコンピュータに異常な負荷をかけることになるので、必ずどこかで条件がfalseになるように実装する。
for文
for文では、forの後の()内に、「変数の初期化、条件式、変数の更新」の3つを記述する。それぞれはセミコロン(;)で区切るが、最後の変数の更新にはセミコロン(;)をつけない。while文の内容をfor文で書き換えと以下のようになる。
for (i = 1; i <= 5; i++) { //変数の初期化、条件式、変数の更新
System.out.println(i);
}
「break」と「continue」
繰り返し処理を終了するためには、条件をfalseにする以外に、breakを使って強制的に終了させる方法がある。
for (i = 1; i <= 5; i++) {
if (i > 5) {
break;
}
System.out.println(i);
}
//変数iが6になると処理が終了する
continueはその周の処理だけをスキップして、次の周を実行することができる。continueもif文などと組み合わせて利用するのが一般的。
for (i = 1; i <= 5; i++) {
if (i % 3 == 0) {
continue;
}
System.out.println(i);
}
//変数iが3の倍数の時、その周の処理をスキップし次の周の処理を行う
配列
変数が1つしか値を扱えないのに対し、配列は複数の値をまとめていれておくことができる。配列は仕切りのある箱のようなもので、それぞれのスペースに値が入っている。配列に入っているそれぞれの値のことを要素と呼ぶ。
配列の変数定義
配列を扱う場合には、配列型の変数に配列を代入する。配列型は、「int型の要素を持つ配列型」「String型の要素を持つ配列型」などと指定する。
//int型の要素を持つ配列型
int[]
//String型の要素を持つ配列型
String[]
配列は{}の中に「,」で区切りながら値を入れていく。
int[] numbers = {1, 2, 3, 4, 5};
String[] names = {"太郎", "二郎", "三郎"};
配列の要素にはインデックス番号といい、前から順に「0, 1, 2・・・」と数字が割り振られている。インデックス番号は0から始まる。
配列の各要素は、配列名[インデックス番号]とすることで取得することができる。
String[] names = {"太郎", "二郎", "三郎"};
System.out.println("私の名前は" + names[2] + "です");
//「私の名前は三郎です」が出力される
配列の要素を上書きする
String[] names = {"太郎", "二郎", "三郎"};
System.out.println("私の名前は" + names[2] + "です");
//「私の名前は三郎です」が出力される
names[2] = "五郎";
System.out.println("私の名前は" + names[2] + "です");
//「私の名前は五郎です」が出力される
配列と繰り返し
配列namesの要素を全て出力するために繰り返し処理をすることをができる。
String[] names = {"太郎", "二郎", "三郎"};
for (int = 1; i <= 3; i++) {
System.out.println("私の名前は" + names[i] + "です");
}
配列には、要素の数を数えるlengthという機能が備わっており、「配列.length」で配列の要素の数を取得できる。条件式「i < 3」を下図のように書き換えることができ、配列の要素数を気にする必要がなくなる。
String[] names = {"太郎", "二郎", "三郎"};
for (int = 1; i <= names.length; i++) {
System.out.println("私の名前は" + names[i] + "です");
}
拡張for文
for文は配列用に特別な「拡張for文」を用意しており、for文をよりシンプルに書くことができる。
for (データ型 変数名: 配列名) {
//繰り返し処理
}
拡張for文では、配列の各要素の値を順に代入する変数を用意する(String name)。下記では、繰り返しの度に変数nameに配列namesの要素が順に代入されていく。拡張for文では要素の数だけ自動的に繰り返しが行われる。通常のfor文よりもシンプルな記述ができる。
String[] names = {"太郎", "二郎", "三郎"};
for (String name: names) {
System.out.println("私の名前は" + name + "です");
}