見出し画像

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 (条件の値) {
  case1:
     処理;
    break;
  case2:
    処理;
    break;
  case3:
    処理;
    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++
}
  1. while文を繰り返すかどうか判断するため、変数 iを定義し初期化する

  2. 条件式をチェックする

  3. 処理を行う

  4. 変数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 + "です");
}