第4章 制御ステートメントと演算子(独習Java メモっぽいレポート三枚目の続き)
4.2 forループのバリエーション
for(num = 100; num < 201; num++)
上記のような書き方以外にもforループは存在する。
例えば、初期化をするセクションはfor()
内で絶対というわけではなく、
int num = 100;
for(; num < 201; num++)
と、いうようにfor分の外側だけでもできる。
また、インクリメントを行う部分も()内ではなくfor文の内側で書くことができる。
for(num = 100; num < 201;){
num++;
}
forループを回し続けることができる無限ループは下記のように書くと起こる。
for( ; ; ){
cnt++;
}
4.3 whileループ
whileループとはwhile()
()中身の式が真(true)である時淡々と回り続ける。
これはfor( ; ; )
と同じ状態である。
while文の使用方法は以下のようにする。
while(total <= 20){
total += Math.random();
System.out.println("合計" + total);
}
今回の場合は totalが20以下であればループし続けるという条件になっている。
なので、totalが20以下の場合は真であるということになる。
4.4 doループ
doループとは以下のような書き方のことを指す。
do{
}while();
doループの特徴としてdoの中に書かれている処理は必ず処理が行われる。
動きとしてはdoで処理を実行しWhileに入った時に(i < 100)
()内の条件を満たしているかどうか
をチェックし式の評価の結果、真であればまたdo戻り処理が行われ、真でなければ、ループを抜けるという形になる。
4.5 ループのネスト
ループのネストとは、ループの中にループがあって入れ子の状態にあることを指す。
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の場合」
while(num < 201){
while(i < num){
}
}
「do-whileの場合」
do{a
do{b
do{c
c}while();
b}while();
a}while();
4.6 breakステートメント
このbreakステートメントを使うことによって
任意のタイミングでループを抜けることができる。
使用方法は以下のようになる。
for(num = 100; num < 201; num++){
if(num % i == 0){
break;
}
}
この場合だとnumという変数をiで割ったとき余りが0になったときループを抜ける。
ループにラベルをつけることができbreak Label;
で指定するとそのループを抜けることができる。
Label:for(num = 100; num < 201; num++){
if(num % i == 0){
}
for(num = 100; num < 201; num++){
break Label;
}
}
また、多重ループでラベルを使用せずにbreakステートメントを使うとbreakステートメントを書いた直近のループを抜ける。
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に
きた場合強制的に次のループを行うことができる。
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)のループが処理される。
for(int i = 0; i < 100; i++){
if(i % 2 == 0){
continue;
}
System.out.println("奇数::" + i);
}
何か特定の値を飛ばして表示させたいという時にも使用出来る。
4.8 switchステートメント
switchステートメントを使用すれば以下のようなif文を
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型の4つの型で動作し
floatやdoubleといった浮動小数点がつく型では動作しない。
switchを使う時に注意しなければならないのは、case
にbreak
を書き忘れると
switchの最後まで、defaultに到達するまで、caceの中身の処理が行われる。
switchにもネストがあり下記のように書くことが出来る。
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型」の5つの型で動作し、他の型では動作しない。
ビット演算子には条件式同様 ANd(&)、OR(|)、XOR(^)が用意されている。
またビット演算子にはビットシフト演算子があり値をシフトにより変えることができる。
short s = 0xff;
System.out.println( s << 2);
結果:1020
シフトの仕方は 左側にシフトする値、右側にシフトする回数を書くシフトする値 << シフトする回数
ビット演算子にはビット代入演算子が用意されており、シフトと代入を一緒に行うことなどができる。
x = x << 2
このようにビット演算子を扱うことによって聖数値をより詳細に扱うことができる。
今日はここまで。