【読書】独習Java メモっぽいレポート　四枚目

#第４章　制御ステートメントと演算子（独習Java メモっぽいレポート三枚目の続き）

4.2 forループのバリエーション


```java
for(num = 100; num < 201; num++)
```
上記のような書き方以外にもforループは存在する。
例えば、初期化をするセクションは```for()```内で絶対というわけではなく、

```java
int num = 100;
for(; num < 201; num++)
```
と、いうようにfor分の外側だけでもできる。

また、インクリメントを行う部分も（）内ではなくfor文の内側で書くことができる。

```java
 for(num = 100; num < 201;){

    num++;

}
```

forループを回し続けることができる無限ループは下記のように書くと起こる。

```java
for( ; ; ){

  cnt++;

}
```

4.3 whileループ


whileループとは```while()```()中身の式が真（true）である時淡々と回り続ける。
これは```for( ; ; ) ```と同じ状態である。

while文の使用方法は以下のようにする。

```java
 while(total <= 20){

     total += Math.random();  
     System.out.println("合計" + total);
}
```
今回の場合は　totalが20以下であればループし続けるという条件になっている。
なので、totalが20以下の場合は真であるということになる。

4.4 doループ

doループとは以下のような書き方のことを指す。

```java
do{

}while();
```
doループの特徴としてdoの中に書かれている処理は必ず処理が行われる。
動きとしてはdoで処理を実行しWhileに入った時に```(i < 100)```（）内の条件を満たしているかどうか
をチェックし式の評価の結果、真であればまたdo戻り処理が行われ、真でなければ、ループを抜けるという形になる。


4.5 ループのネスト


ループのネストとは、ループの中にループがあって入れ子の状態にあることを指す。

```java
for(num = 100; num < 201; num++){

   for(i = 2; i < num; i++){

       if(num % i == 0){
           break;
       }
       else{
           System.out.println("素数" + num);
           break;
       }
   }
}
```

Javaでは他のループでも入れ子にし書くことができる。

「whileの場合」

```java
while(num < 201){

     while(i < num){
            
     }        
}
```

「do-whileの場合」

```java
do{a
  do{b
    do{c

    c}while();

  b}while();

a}while();
```

4.6 breakステートメント


このbreakステートメントを使うことによって
任意のタイミングでループを抜けることができる。

使用方法は以下のようになる。

```java

for(num = 100; num < 201; num++){
    if(num % i == 0){
        break;
    }
 }
```

この場合だとnumという変数をiで割ったとき余りが０になったときループを抜ける。

ループにラベルをつけることができ```break Label; ```で指定するとそのループを抜けることができる。

```java
Label:for(num = 100; num < 201; num++){
       if(num % i == 0){
          
      }
      for(num = 100; num < 201; num++){
         break Label;
      }
  }
```

また、多重ループでラベルを使用せずにbreakステートメントを使うとbreakステートメントを書いた直近のループを抜ける。

```java
for(num = 100; num < 202; num++){
　　　　　　　　　　　　　　　　　　　　　　　↑
    break;　　　↑のループを抜ける

   for(i = 2; i < num; i++){
     　          ↑
        break;　　　↑のループを抜ける
     for(n = 1; n <= 101; n++){
                  　↑
           break;　　　↑のループを抜ける
        for(i = 1; i < 10; i++){
                  　↑
           break;　　　↑のループを抜ける
        }
     }
   }
}
```

4.7 continueステートメント


このcontinueステートメントを使うと最後まで処理が行われなくても、continueに
きた場合強制的に次のループを行うことができる。

```java
int l;

(1)for(i = 100; num < 201; i++){
       if(num % i == 0){
    　　　　　　　　　　　continue;
      }
      (2)for(num = 100; num < ; num++){
         l++;
      }
  }
```
この場合だとnum % i == 0だった場合(2)のループには行わず(1)のループが処理される。

```java
for(int i = 0; i < 100; i++){

     if(i % 2 == 0){

         continue;
    }
      System.out.println("奇数::" + i);
}
```
何か特定の値を飛ばして表示させたいという時にも使用出来る。

4.8 switchステートメント

switchステートメントを使用すれば以下のようなif文を

```java
if(i == 1){
  System.out.println("SPADA");
}
if(i == 2){
  System.out.println("PENDUAL");
}
if(i == 3){
  System.out.println("COPULA");
}
```
下記のように書くことができる。

```
switch (i){

  case 1:System.out.println("SPADA");
      break;
  case 2:System.out.println("PENDUAL");
      break;
  case 3:System.out.println("COPULA");
      break;
}

```
switchの条件式には、char型、　byte型、　short型、int型の４つの型で動作し
floatやdoubleといった浮動小数点がつく型では動作しない。 
switchを使う時に注意しなければならないのは、```case```に```break```を書き忘れると
switchの最後まで、defaultに到達するまで、caceの中身の処理が行われる。

switchにもネストがあり下記のように書くことが出来る。

```java
switch (i){
  case 1:
       switch (j){
            
           case 0:System.out.println("GOLD");
                  break;
           case 1:System.out.println("SPADA");
       }
      break;
  case 2:System.out.println("PENDUAL");
      break;
  case 3:System.out.println("COPULA");
      break;
}
```

4.9 ビット演算子

ビット演算子を使うことにより文字や数値のビットを操作することができる。
switchステートメントのように制約があり、
「char型」、「byte型」、「short型」、「int型」、「long型」の５つの型で動作し、他の型では動作しない。
ビット演算子には条件式同様　ANd(&)、OR(|)、XOR(^)が用意されている。
またビット演算子にはビットシフト演算子があり値をシフトにより変えることができる。

```
short s = 0xff;
System.out.println( s << 2);
```
結果:1020

シフトの仕方は　左側にシフトする値、右側にシフトする回数を書く```シフトする値 <<　 シフトする回数 ```
ビット演算子にはビット代入演算子が用意されており、シフトと代入を一緒に行うことなどができる。

```java
x = x << 2
```
このようにビット演算子を扱うことによって聖数値をより詳細に扱うことができる。


今日はここまで。