Java Silver 4章 繰り返し文と繰り返し制御文
while文
while(条件式){
処理文(条件式がTrueであり続ける間繰り返される)
}
{}を省略する場合、処理文は下1行のみ
public static void main(String[] args) {
int num = 0;
while(num > 0){
System.out.print(num + " "); //なにも出力されない
num--;
}
}
do-while文
do{
処理文;
}while(条件式);
{}を省略する場合、処理文は下1行のみ
public static void main(String[] args) {
// while の場合
int count = 5;
while(count != 5 && count > 0){
System.out.println("while : count = " + count);
count--;
}
// do-while の場合
count = 5;
do{
System.out.println("do-while : count = " + count);
count--;
}while(count != 5 && count > 0);
}
whileの場合、条件式によっては一度も処理文が実行されない
while と do-whileの違いは処理文と判定式の順序
for文
for(式1; 式2; 式3;){
処理文;
}
式1~3のそれぞれは省略可能
ただし式2を省略すると、条件が常にTrueとなり無限ループ
public static void main(String[] args) {
int count1 = 0;
for(; count1 < 5 ; count1++){ // 式1を省略した例
System.out.print(count1 + " ");
}
System.out.println(); //改行
for(int count2 = 0 ; count2 < 5 ; ){ // 式3を省略した例
System.out.print(count2++ + " "); // 処理文内でカウンタ変数の更新
}
}
for文・条件式のルール
for(初期化文; 条件文; 更新文){}
初期化文
・カンマ区切りの宣言でない2つまでの文
・宣言式は1つ
条件文
・複数の式を記載できない
更新文
・処理が終わった後に実行される
・カンマ区切りの宣言でない2つまでの文
・メソッドの呼び出しも可能
拡張for文
配列の全要素を順番に取り出して処理ができる
for(変数宣言: 参照変数名){
処理文;
}
public static void main(String[] args) {
// 配列の宣言
char[] array = { 'a', 'b', 'c', 'd', 'e' };
// 配列arrayの全要素を順番に取り出し、出力する
for(char c : array){ // 拡張for文で処理する場合
System.out.print(c + " ");
}
System.out.println(); //改行
// for文で処理する場合
for(int count = 0; count < array.length ; count++){
System.out.print(array[count] + " ");
}
}
制御文のネスト
ネスト(入れ子):制御文の内部に制御文を設置することも可能
//外部のfor文にて0からループの度に+1づつ増える変数iに対し
//内部のif文にて4で割った余りが0の場合のみprintlnで出力している
public static void main(String[] args) {
// 外側の制御文 for
for(int i = 1; i < 10 ; i++){
// 内側の制御文 if
if((i % 4) == 0){
System.out.println(i + " は 4 の倍数です。");
}
}
}
繰り返し制御文
繰り返し文の中で判定条件がtrueでも特定の条件下で繰り返し処理から抜けい場合
・break文
・continue文
を使用する
break文
public static void main(String[] args) {
for(int i = 0; ; i++){ //式2が省略されているので無限ループ
if(i == 3){
break; // breakによりfor文から抜ける
}
System.out.println("i = " + i);
}
System.out.println("for文の後の処理");
}
breakのポイントをif文の条件式で判定している
cntinue文
public static void main(String[] args) {
for(int i = 1; i < 10 ; i++){
if((i % 3) == 0){
System.out.println("処理をスキップします");
continue; // continueによりfor文の式3へ制御を移す
}
System.out.println("i = " + i);
}
System.out.println("for文の後の処理");
}
continue文は残りの処理をスキップし、次のループを続ける。
breakはループの全行程を抜け
continueはその1度だけ処理ループを抜ける
ラベル
ネスト構造の繰り返し文から抜けたいときに使用
public static void main(String[] args) {
loop1: // ラベルloop1を指定
for(int x = 0; x < 3 ; x++){
for(int y = 0; y < 3; y++){
System.out.println("x = " + x + " y = " + y);
if(x == 1 && y ==1){
System.out.println("break文の実行");
break loop1; // ラベルloop1にbreak
}
}
}
System.out.println("------------------------------");
loop2: // ラベルloop2を指定
for(int x = 0; x < 3 ; x++){
for(int y = 0; y < 3; y++){
System.out.println("x = " + x + " y = " + y);
if(x == 1 && y ==1){
System.out.println("continue文の実行");
continue loop2; // ラベルloop2にcontinue
}
}
}
}
x = 0 y = 0
x = 0 y = 1
x = 0 y = 2
x = 1 y = 0
x = 1 y = 1
break文の実行
------------------------------ //breakで全てのループから抜けfor文に戻ることはない
x = 0 y = 0
x = 0 y = 1
x = 0 y = 2
x = 1 y = 0
x = 1 y = 1
continue文の実行
//continuで全てのループから抜けた後、再び外側のfor文の判定式へ
//x,yの値も継続しており、結果的にcontinue以下の内側ループをスキップした形
x = 2 y = 0
x = 2 y = 1
x = 2 y = 2
第4章の感想
なじみのある構文はjavaでも複雑なルールがなくてよかった
Author And Source
この問題について(Java Silver 4章 繰り返し文と繰り返し制御文), 我々は、より多くの情報をここで見つけました https://qiita.com/naitoyuma/items/38a88225b3ecdf21f5b1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .