Javaの繰り返し文 – エンジニアの入り口 https://eng-entrance.com 「エンジニアの入り口」は、プログラミング入門やエンジニアリング入門の知識が満載の初心者のための勉強サイトです。プログラミングやサーバ、ネットワークの基礎知識や勉強方法を習得できます。 Wed, 08 Mar 2017 01:34:16 +0000 ja hourly 1 https://wordpress.org/?v=5.2.19 【初心者でもすぐわかる】Javaの拡張for文の使い方まとめ https://eng-entrance.com/java-for-expand https://eng-entrance.com/java-for-expand#respond Thu, 29 Dec 2016 11:18:42 +0000 http://eng-entrance.com/?p=3916 Javaには拡張for文と呼ばれる文法がある。Javaのfor文をより簡単に使えるようにした文法だ。

実際の使い方を確認してみよう。

拡張for文の使い方

Javaの繰り返し文にJ2SE 5.0(java 2 SEのバージョン 5.0)から拡張for文が加わった。それまでの基本的なfor文の書き方が、この拡張により特定の場面でよりコンパクトに書くことができるようになった。

書き方の基本はこうだ。

for ( 型 変数名 : 式 )
  文;
}

拡張for文を使う対象は、配列とコレクションのようなIterableのサブタイプである。このような対象の内容を、すべて取得してある操作を実行しようとするとき拡張for文が使える。

では、サンプルプログラムから実際のコードを見てみよう。

基本的なfor文を使ったサンプルプログラム

このサンプルプログラムは、配列に代入された初期値を基本的なfor文ですべて表示している。

public class BasicForArray {
    public static void main (String[] args){
        int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//[1]
        for (int index = 0; index < numbers.length; index ++) {//[2]
            System.out.println("[3] number = " + numbers[index]);
        }
    }
}

実行結果

[3] number = 1
[3] number = 2
[3] number = 3
[3] number = 4
[3] number = 5
[3] number = 6
[3] number = 7
[3] number = 8
[3] number = 9
[3] number = 10-

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 配列変数numbersに初期値を代入する。
  • [2] [3] numberに配列の値を代入し、配列の数だけnumberの表示を繰り返す。

配列のサンプルプログラム

このサンプルプログラムは、配列に代入された初期値を拡張for文ですべて表示している。

public class EnhancedForArray {
    public static void main (String[] args){
        int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//[1]
        for (int number : numbers) {//[2]
            System.out.println("[3] number = " + number);
        }
    }
}

実行結果

[3] number = 1
[3] number = 2
[3] number = 3
[3] number = 4
[3] number = 5
[3] number = 6
[3] number = 7
[3] number = 8
[3] number = 9
[3] number = 10-

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 配列変数numbersに初期値を代入する。
  • [2] [3] numberに配列の値を代入し、配列の数だけnumberの表示を繰り返す。

ArrayList(コレクション)のサンプルプログラム

このサンプルプログラムは、ArrayListのインスタンスに追加された値を拡張for文ですべて表示しいている。ArrayListがIterableのサブタイプであるので、拡張for文が使える。

import java.util.ArrayList;
import java.util.List;
public class EnhancedForCollection {
    public static void main (String[] args){
        List<Integer> numbers = new ArrayList<Integer>();//[1]
        for (int number = 1; number <= 10; number++) {//[2]
            numbers.add(number);//[3]
        }
        for (int number : numbers) {//[4]
            System.out.println("[5] number = " + number);
        }
    }
}

実行結果

[5] number = 1
[5] number = 2
[5] number = 3
[5] number = 4
[5] number = 5
[5] number = 6
[5] number = 7
[5] number = 8
[5] number = 9
[5] number = 10

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] ArrayList型の変数numbersを宣言しインスタンスを生成する。
  • [2] [3] numbersに1から10の値を追加する。
  • [4] [5] numbersに含まれるすべての値の表示を繰り返す。

まとめ

このページではJavaの拡張for文についてお伝えした。使い慣れると使い勝手がいい文法だ。ぜひサンプルプログラムを打って、動かしてみていただければと思う。

]]>
https://eng-entrance.com/java-for-expand/feed 0
3分で使えるようになる!Javaのdo-while文の使い方 https://eng-entrance.com/java-for-dowhile https://eng-entrance.com/java-for-dowhile#respond Wed, 28 Dec 2016 01:40:58 +0000 http://eng-entrance.com/?p=3911 Javaの繰り返し文のひとつが、「do while文」だ。

whileと似ているが、do-whileは一回実行してから条件を確認するので、少なくとも一度は実行されるのが特徴だ。

このページではサンプルプログラムも用意してdo whileの使い方を紹介した。

do while文の使い方

do while文が、他の繰り返し文と異なっているのは、繰り返しが一回は必ず実行されるという点だ。他の繰り返しは、式で表された条件が成り立たなければ一回も繰り返えしが実行されない。

for文のような初期化や更新はない。もし必要ならば、適切な場所にコードを追加することもできる。

do {
 文;
}  while (式);

書き方の基本はこうだ。

do while文の繰り返し

do while文による繰り返しがどのような順序で実行されていくのか、順を追って説明する。

  • ステップ1-文の実行:文が実行される。
  • ステップ2-実行が正常に終了すればステップ3へ進む。しかし、実行が中断されれば繰り返しは終わる。
  • ステップ3-式の評価:式がtrueであれば、ステップ1から繰り返す。式がfalseならば、繰り返しは終わる。

do while文の繰り返しを、いくつかのケースに分けてどんな動きをするか考えてみよう。最初に、式がtrueになるケースだ。

number = 1;
do {
    number ++;
} while (number < 5);

このケースでは、numberがwhile文の中でインクリメントされて、5に到達するとdo while文の繰り返しから抜け出す。では、number = 4のケースはどうだろう。

number = 4;
do {
    number ++;
} while (number < 5);

まだ、while文の中でインクリメントされ、5になると繰り返しを終える。では、number = 5はどうだろうか。

number = 5;
do {
    number ++;
} while (number < 5);

numberが5を超えても、do while文の中の繰り返し一回は実行される。

では、この点をサンプルプログラムで確認してみよう。

繰り返しの実行を確認するサンプルプログラム

このサンプルプログラムは、numberに代入する初期値を変え、do while文の中でnumberの値を表示することによって繰り返しの様子を確認できるようにしたものだ。

public class DoWhileFromOneToFive {
    public static void main(String[] args) {
        int number = 1;//[1]
        do {
            number ++;//[2]
            System.out.println("[3] number = " + number);
        } while (number < 5);//[4]

        number = 4;//[5]
        do {
            number ++;//[6]
            System.out.println("[7] number = " + number);
        } while (number < 5);//[8]

        number = 5;//[9]
        do {
            number ++;//[10]
            System.out.println("[11] number = " + number);
        } while (number < 5);//[12]
    }
}

実行結果

[3]は2から5まで表示されているので、numberが1から始まると5になったとき繰り返しが終わることが分かる。[7]も同じで、5になったとき繰り返しが終わっている。[11]は、numberの値が5を超えた6でも表示されている。つまり、繰り返しが一回は必ず行われることが分かる。

[3] number = 2
[3] number = 3
[3] number = 4
[3] number = 5
[7] number = 5
[11] number = 6

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1]変数numberを宣言し、初期値の1を代入する。
  • [2][3][4]numberを5になるまでインクリメントし、numberの表示を繰り返す。
  • [5]変数numberに4を代入する。
  • [6][7][8]numberを5になるまでインクリメントし、numberの表示を繰り返す。
  • [9]変数numberに5を代入する。
  • [10][11][12]number5を5になるまでインクリメントし、numberの表示を繰り返す。

do whileを使うべきケースのサンプルプログラム

このサンプルプログラムは、どんなケースでwhileよりdo whileを使うべきかを示している。どんな条件であっても必ず実行したい文がある場合は、do whileを使うべきだ。

たとえば、どんな条件であっても必ず繰り返しの中でnumberをインクリメントしたいなら、do whileを使って、その繰り返しの中にnumberのインクリメントを書けばよい。

他方、whileを使った場合は、条件によっては実行されない場合がある。

public class IncrementNumberInWhileOrDoWhile {
    public static void main (String[] args){
        int number = 7;//[1]
        while (number < 5) {//[2]
            number ++;//[3]
            System.out.println("[4] while -> number = " + number);
        }
        number = 7;//[5]
        do {//[6]
            number ++;//[7]
            System.out.println("[8] do while -> number:" + number);
        } while (number < 5);//[9]
    }
}

実行結果

実行結果は、do whileが条件:「numberが5より小さい場合に繰り返す」であっても、numberの値が8を表示している。これは、条件の範囲を超えて、numberのインクリメントと表示を行われたことを示している。

他方、whileはインクリメントしたnumberの値を表示していない。

[8] do while -> number:8

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 変数numberを宣言し、1を代入する。
  • [2] numberが5以下なら、[2]-[5]を繰り返す。
  • [3] numberをインクリメントする。
  • [4] numberを表示する。
  • [6] numberに7を代入する。
  • [7] numberをインクリメントする。
  • [8] numberを表示する。
  • [9] numberが5以下なら、[7]-[9]を繰り返す。

まとめ

このページではJavaのdo-while文についてお伝えした。使い勝手のいい繰り返し文だ。ぜひ使いこなせるようにしておこう。

]]>
https://eng-entrance.com/java-for-dowhile/feed 0
3分で理解する!Javaのwhile文の使い方 https://eng-entrance.com/java-for-while https://eng-entrance.com/java-for-while#respond Tue, 27 Dec 2016 12:50:40 +0000 http://eng-entrance.com/?p=3907 Javaのwhile文は、forと同じように繰り返しで使う文法だ。whileはforよりもシンプルな構造をしており、使い易い文法になっている。

このページではwhile文についてまとめてみた。参考にしてほしい。

while文の基本

while文はJavaだけではなく色々なプログラミング言語に用意されている文法だ。「条件を満たす間、処理を繰り返してくれる」という単純な構造になる。

例えば次のような処理はwhile文の典型だ。

フローチャート08

残金が100円以上ある限り、おでんを買い続けるという処理になる。

Javaのwhile文の使い方

while文が他の繰り返し文と異なっているのは、式で表された条件が成り立っている間は繰り返しが続くという点だ。

for文のような初期化や更新はない。もし必要ならば、適切な場所にコードを追加することもできる。

while (式) {
  文;
}

while文の繰り返し書き方の基本はこれだけだ。とても簡単なのがわかる。

while文による繰り返しがどのような順序で実行されていくのか、順を追って説明する。

  • ステップ1-式の評価:式がtrueであれば、ステップ2が実行される。式がfalseならば、繰り返しは終わる。
  • ステップ2-文の実行:文が実行される。
  • ステップ3-実行が正常に終了すればステップ1から繰り返す。しかし、実行が中断されれば繰り返しは終わる。

while文の繰り返しを、いくつかのケースに分けてどんな動きをするか考えてみよう。最初に、式がtrueになるケースだ。

number = 1;
while (number < 5) {
  number ++;
}

このケースでは、numberがwhile文の中でインクリメントされて、5に到達するとwhile文の繰り返しから抜け出す。では、number = 4のケースはどうだろう。

number = 4;
while (number < 5) {
  number ++;
}

まだ、while文の中でインクリメントされ、5になると繰り返しを終える。では、number = 5はどうだろうか。

number = 5;
while (number < 5) {
  number ++;
}

numberが5を超えると、もうwhile文の中の繰り返しは実行されない。

では、この点をサンプルプログラムで確認してみよう。

while文の動作を確認するサンプルプログラム

このサンプルプログラムは、numberに代入する初期値を変え、while文の中でnumberの値を表示することによって繰り返しの様子を確認できるようにしたものだ。

public class WhileFromOneToFive {
    public static void main(String[] args) {
        int number = 1;//[1]
        while (number < 5) {//[2]
            number ++;//[3]
            System.out.println("[4] number = " + number);
        }
        number = 4;//[5]
        while (number < 5) {//[6]
            number ++;//[7]
            System.out.println("[8] number = " + number);
        }
        number = 5;//[9]
        while (number < 5) {//[10]
            number ++;//[11]
            System.out.println("[12] number = " + number);
        }
    }
}

実行結果

[4]は2から5まで表示されているので、numberが1から始まると5になったとき繰り返しが終わることが分かる。[8]も同じで、5になったとき繰り返しが終わっている。[12]は表示されていない。つまり、繰り返しは一度も起きていないことが分かる。

[4] number = 2
[4] number = 3
[4] number = 4
[4] number = 5
[8] number = 5

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 変数numberを宣言し、初期値の1を代入する。
  • [2][3] numberを5になるまでインクリメントする。
  • [4] numberを表示する。
  • [5] 変数numberに4を代入する。
  • [6][7] numberを5になるまでインクリメントする。
  • [8] numberを表示する。
  • [9] 変数numberに5を代入する。
  • [10][11] numberを5になるまでインクリメントする。
  • [12] numberを表示する。

まとめ

このページではJavaのwhile文について簡単にお伝えした。非常にわかりやすく使い易い文法なので、使い方を覚えてしまおう。

]]>
https://eng-entrance.com/java-for-while/feed 0
【java入門】簡単理解!2重のfor文の使い方 https://eng-entrance.com/java-for-2roop https://eng-entrance.com/java-for-2roop#respond Mon, 26 Dec 2016 11:10:14 +0000 http://eng-entrance.com/?p=3904 for文を2重で組み合わせて使う場面は非常によくある。例えば、多次元配列を出力する際などによく使われる。

実際に動きがどうなるか、確認してみよう。

for文を組み合わせて2重で使う

Javaのfor文は他のfor文と組み合わせて用いることもできる。for文を並べて書いたり、for文の中にもうひとつfor文を書いたりして組み合わせて利用することができる。

では、さっそくサンプルを見てみよう。

for文を並べて書くサンプルプログラム

このサンプルプログラムは、初期値が異なるfor文を並べて書いて、九九のそれぞれの桁を個別に表示している。

public class MultiplicationTablesUsingFor {
    public static void main(String[] args) {
        for (int number1 = 1, number2 = 1; number2 <= 9; number2++){//[1]
            System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[2]
        }
        System.out.println("");//[3]
        for (int number1 = 2, number2 = 1; number2 <= 9; number2++){//[4]
            System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[5]
        }
        System.out.println("");//[6]
        for (int number1 = 3, number2 = 1; number2 <= 9; number2++){//[7]
            System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[8]
        }
        System.out.println("");//[9]
        for (int number1 = 4, number2 = 1; number2 <= 9; number2++){//[10]
            System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[11]
        }
        System.out.println("");//[12]
        for (int number1 = 5, number2 = 1; number2 <= 9; number2++){//[13]
            System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[14]
        }
        System.out.println("");//[15]
        for (int number1 = 6, number2 = 1; number2 <= 9; number2++){//[16]
            System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[17]
        }
        System.out.println("");//[18]
        for (int number1 = 7, number2 = 1; number2 <= 9; number2++){//[19]
            System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[20]
        }
        System.out.println("");//[21]
        for (int number1 = 8, number2 = 1; number2 <= 9; number2++){//[22]
            System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[23]
        }
        System.out.println("");//[24]
        for (int number1 = 9, number2 = 1; number2 <= 9; number2++){//[25]
            System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[26]
        }
    }
}

実行結果

1x1=1 1x2=2 1x3=3 1x4=4 1x5=5 1x6=6 1x7=7 1x8=8 1x9=9
2x1=2 2x2=4 2x3=6 2x4=8 2x5=10 2x6=12 2x7=14 2x8=16 2x9=18
3x1=3 3x2=6 3x3=9 3x4=12 3x5=15 3x6=18 3x7=21 3x8=24 3x9=27
4x1=4 4x2=8 4x3=12 4x4=16 4x5=20 4x6=24 4x7=28 4x8=32 4x9=36
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 6x7=42 6x8=48 6x9=54
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 7x8=56 7x9=63
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 8x9=72
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] [変数number1を宣言し、初期値の1を代入する。変数number2を宣言し、初期値の1を代入する。number2を9になるまでインクリメントする。
  • [2] number1 * number2の表示を繰り返す。
  • [3] 改行する。
  • [4] 変数number1を宣言し、初期値の2を代入する。変数number2を宣言し、初期値の1を代入する。number2を9になるまでインクリメントする。
  • [5] number1 * number2の表示を繰り返す。
  • etc

あとは繰り返しだ。

for文の中にfor文を書いたサンプルプログラム

このサンプルプログラムは、for文の中にさらにもうひとつfor文を書くことによって、掛け算の九九を表示している。

public class MultiplicationTablesUsingNestedFor {
    public static void main(String[] args) {
        for (int number1 = 1; number1 <= 9; number1++ ){//[1]
            for (int number2 = 1; number2 <= 9; number2++){//[2]
                System.out.print("" + number1 + "x" + number2 + "=" + (number1 * number2) + " ");//[3]
            }
            System.out.println("");//[4]
        }
    }
}

実行結果

「for文を並べて書くサンプルプログラム」と同じ結果になる。

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 変数number1を宣言し、初期値の1を代入する。number1を9になるまでインクリメントする。
  • [2] 変数number2を宣言し、初期値の1を代入する。number2を9になるまでインクリメントする。
  • [3] number1 * number2の表示を繰り返す。
  • [4] 改行する。

まとめ

 このページでは2重のfor文についてお伝えした。for文の中にfor文が登場するのはプログラムではよくあるので、慣れてしまおう。

]]>
https://eng-entrance.com/java-for-2roop/feed 0
【Java】for文の複数変数の初期化と更新の方法! https://eng-entrance.com/java-for-plural https://eng-entrance.com/java-for-plural#respond Sun, 25 Dec 2016 04:51:51 +0000 http://eng-entrance.com/?p=3843 Javaのfor文の初期化と更新はひとつの変数を宣言し初期化し更新するだけでなく、複数の変数に対しても同じことができる。

その書き方を見てみよう。

初期化と更新の使い方

 

初期化での変数宣言と代入を使う

初期化の書き方はふたつある。ひとつはローカル変数の宣言と代入だ。

型 変数名1[= 初期値], 変数名2[= 初期値], … , 変数名n[= 初期値]

たとえば、for文で使う3つのint型の変数を宣言する場合はカンマで区切って次のように書く。変数を宣言することに加えて、それぞれに初期値を代入することができる。

for (int x = 0, y = 1, z = 2; x < 10; x ++,) {
                ….
}

初期化で式を使う

また、初期化に式も書ける。初期化に複数の式を書くときは、カンマで区切って並べる。

これが、基本的な式の書き方だ。

式1, 式2 … 式n

たとえば、既に宣言された変数の値を初期化してfor文で使いたいなら、次のように書ける。

int a = 0, b = 0, c = 0;
    ….
for (a = 1, b ++, c = y + 2; a < 10; a ++,) {
                ….
}

注意しなければならないのは、ローカル変数の宣言と式の両方を初期化に書くことはできない。

では、更新についても書き方を見てみよう。更新に複数の式を書くときはカンマで区切って並べる。

更新

基本的な書き方はこうだ。

式1, 式2 … 式n
for (int x = 0, y = 1, z = 2; x < 10; x ++, y = 1, z = x + 1) {
                ….
}

複数の変数を扱う初期化のサンプルプログラム

このサンプルプログラムは、for文の繰り返しの中で初期化にある3つのローカル変数宣言と式がどのような働きをするかを示している。式と値の変化を比較して確認してみよう。

public class ComplexForInitialization {
    public static void main (String[] args){
        System.out.println("[1] 初期化:x = 1, y = 2, z = 3");
        for(int x = 1, y = 2, z = 3; x <= 5; x ++){//[2]
            System.out.print("[3]-" + x + "," + y + "," + z + " ");
        }
        System.out.println("");//[4]
        int a = 0, b = 0, c = 0;//[5]
        System.out.println("[6] 初期化:a = 1, b ++, c = a + 2");
        for (a = 1, b ++, c = a + 2; a < 5; a ++) {//[7]
            System.out.print("[8]-" + a + "," + b + "," + c + " ");
        }
    }
}

実行結果

[1] 初期化:x = 1, y = 2, z = 3
[3]-1,2,3 [3]-2,2,3 [3]-3,2,3 [3]-4,2,3 [3]-5,2,3
[6] 初期化:a = 1, b ++, c = a + 2
[8]-1,1,3 [8]-2,1,3 [8]-3,1,3 [8]-4,1,3

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 「初期化:x = 1, y = 2, z = 3」を表示する。
  • [2] 変数x, y, zを宣言し、xに1、yに2、zに3の初期値を代入する。xを1から5までインクリメントする。
  • [3] x, y, zの値を表示する。
  • [4] 改行する。
  • [5] 変数a, b, cを宣言し、aに0、bに0、cに0の初期値を代入する。
  • [6] 「初期化:a = 1, b ++, c = a + 2」を表示する。
  • [7] aに1を代入する。bをインクリメントする。a + 2をcに代入する。aを1から5までインクリメントする。
  • [8] a, b, cの値を表示する。
  • [9] 改行する。

複数の変数を扱う更新のサンプルプログラム

このサンプルプログラムは、for文の繰り返しの中で更新にある3つの式がどのようなそれぞれの値を変化させるかを表示する。式と値の変化を比較して確認してみよう。

public class ComplexForUpdate {
    public static void main (String[] args){
        System.out.println("更新:x ++, y = 1, z = x + 1");//[1]
        for (int x = 0, y = 1, z = 2; x < 5; x ++, y = 1, z = x + 1) {//[2]
            System.out.print("[3]-" + x + "," + y + "," + z + " ");
        }
    }
}

実行結果

初更新:x ++, y = 1, z = x + 1
[3]-0,1,2 [3]-1,1,2 [3]-2,1,3 [3]-3,1,4 [3]-4,1,5

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 「更新:x ++, y = 1, z = x + 1"」を表示する。
  • [2] for文初期化:変数x, y, zを宣言し、xに0、yに1、zに2の初期値を代入する。
  • [2] for文条件:x < 5がtrueであれば[3]に進み、繰り返しを続ける。そうでなければ、繰り返しを終わる。
  • [3] x, y, zの値を表示する。
  • [2] for文更新:xをインクリメントする。yに1を代入する。zにx + 1を代入する。そして、[2] for文条件に戻り繰り返しを続ける。

まとめ

Javaのfor文の変数初期化について詳しいところをまとめてきた。少々複雑になるが、意味はお分かりになっただろうか?

出番は少ないかもしれないが、できるということだけでも知っておくと良いだろう。

]]>
https://eng-entrance.com/java-for-plural/feed 0
【Javaのfor文】ブロック内の変数の扱い方 https://eng-entrance.com/java-for-block https://eng-entrance.com/java-for-block#respond Sat, 24 Dec 2016 06:49:42 +0000 http://eng-entrance.com/?p=3840 Javaのfor文では、ブロック内で扱う変数をどこでも宣言できる。どこでもというのは、for文の初期化位置、ブロック内、for文の外、いずれでもだ。

サンプルプログラムを見ながら確認しておこう。

forのブロック内変数の扱い方

Javaのfor文のブロック内で使う変数がどこで宣言できるかというと、for文の初期化、for文のブロック内、for文の外で宣言できる。

[for文の外]
for ( [for文の初期化] ;  ;  ) { ← 「{」がブロックの始まり
    [for文のブロック内]
} ← 「}」がブロックの終わり

まず、for文の初期化で宣言された変数を考えてみよう。次のfor文はnumberを1から10までインクリメントして、最後のnumberの値をlastNumberに残すようにいている。

for (int number = 1, lastNumber = 0; number <= 5; number++) {
  int lastNumber = number;
  System.out.println("lastNumber:" + lastNumber);
}

この場合、変数lastNumberは初期化で宣言した後0が代入され、ブロック内で変数として使われる。この使い方は問題ない。しかし、lastNumberをfor文の繰り返しが終わった後、for文のブロックの外で使おうとするとエラーが起きる。

for (int number = 1; number <= 5; number++) { 
int lastNumber = number;
}
System.out.println("lastNumber:" + lastNumber); // この文は、エラーになる。

では、次のfor文のブロック内で宣言された変数lastNumberはどうだろう。もちろん、ブロック内で使うことは可能だが、for文の外で使うことはできない。次のコードではエラーが起きるはずだ。変数lastNumberが有効な範囲は変数が宣言されたブロック内の残りの部分なのである。

for (int number = 1; number <= 5; number++) { 
int lastNumber = number;
}
System.out.println("lastNumber:" + lastNumber); // この文は、エラーになる

では、for文のブロックの中で設定された値の変数をfor文の外で使うには、どうすればよいのだろう。その方法は、for文が始まる前で宣言すればよいのだ。

int lastNumber = 0;
for (int number = 1; number <= 5; number++) {
lastNumber = number;
}
System.out.println("lastNumber:" + lastNumber);

このように、for文の前で変数lastNumberを宣言して、for文のブロック内で設定する。こうすれば、for文内の値をfor文の外に持ち出せる。

for文内で宣言された変数のサンプルプログラム

このサンプルプログラムは、for文内で宣言された変数の有効範囲がどこまであるのかを示している。最初は、初期化で宣言された変数lastNumber、次はfor文の繰り返しのブロック内で宣言された変数lastNumberだ。どちらも、for文の繰り返しが終わった後で使うことはできない。使うとエラーになる。

public class VariableDeclarationInInsideOfForStatement {
    public static void main (String[] args){
        for (int number = 1, lastNumber = 0; number <= 5; number++) {//[1]
            lastNumber = number;//[2]
            System.out.println("[3] lastNumber:" + lastNumber);
        }
        System.out.println("");//[4]
        // System.out.println("[5] lastNumber:" + lastNumber); // この文は、エラーになる。
        for (int number = 1; number <= 5; number++) {//[6]
            int lastNumber = number;//[7]
            System.out.println("[8] lastNumber:" + lastNumber);
        }
        // System.out.println("[9] lastNumber:" + lastNumber); // この文は、エラーになる。
    }
}

実行結果

[3] lastNumber:1
[3] lastNumber:2
[3] lastNumber:3
[3] lastNumber:4
[3] lastNumber:5

[8] lastNumber:1
[8] lastNumber:2
[8] lastNumber:3
[8] lastNumber:4
[8] lastNumber:5*

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 変数numberを宣言し、初期値に1を代入する。変数lastNumberを宣言し、初期値に0を代入する。numberを1から10回インクリメントする。
  • [2] lastNumberにnumberを代入する。
  • [3] numberを表示する
  • [4] 改行する。
  • [5] numberを表示する
  • [6] 変数numberを宣言し、初期値に1を代入する。numberを1から10回インクリメントする。
  • [7] 変数lastNumberを宣言し、初期値にnumber を代入する。
  • [8] numberを表示する
  • [9] numberを表示する

for文の外で宣言された変数のサンプルプログラム

このサンプルプログラムは、for文内で代入された変数の値を、for文の外で使うに方法を示している。

public class VariableDeclarationInOutsideOfForStatement {
    public static void main (String[] args){
        int lastNumber = 0;//[1]
        for (int number = 1; number <= 5; number++) {//[2]
            lastNumber = number;//[3]
            System.out.println("[4] lastNumber:" + lastNumber);
        }
        System.out.println("[5] lastNumber:" + lastNumber);
    }
}

実行結果

[4] lastNumber:1
[4] lastNumber:2
[4] lastNumber:3
[4] lastNumber:4
[4] lastNumber:5
[5] lastNumber:5

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 変数lastNumberを宣言し、初期値に0 を代入する。
  • [2] 変数numberを宣言し、初期値に1を代入する。numberを1から10回インクリメントする。
  • [3] lastNumberにnumberを代入する。
  • [4] numberを表示する
  • [5] numberを表示する

まとめ

このページではforのブロック内の変数について詳しく確認してみた。どこでも宣言できるというのは知っておいて損はないだろう。

]]>
https://eng-entrance.com/java-for-block/feed 0
【初心者でもわかる!】Javaのfor文の使い方 https://eng-entrance.com/java-for-for https://eng-entrance.com/java-for-for#respond Wed, 14 Dec 2016 02:13:39 +0000 http://eng-entrance.com/?p=3684 Javaで同じ動作を繰り返したいときにはfor文を使っていく。

プログラムを組むときに常に使う文法で、必ず覚えなければいけないものの一つだ。

このページではJavaでのfor文の使い方について初心者の方向けにわかりやすく解説した。参考にしていただければと思う。

for文の基本

for文のような繰り返し文は次のようなときに使う。

コンビニに行き、残金が100円以上あったらおでんを買い続けるような処理だ。「残金が100円以上か」を判定し、あれば「おでんを買う」という繰り返しの処理になる。

こういった例だとwhileという文法の方が適しているが、要は繰り返しの処理にfor文やwhile文などの繰り返し文が使えるというのをまずは掴んでいただければと思う。

フローチャート08

Javaのfor文の使い方

再確認にはなるが、Javaの繰り返し文のひとつが、「for文」だ。

for文が他の繰り返し文と異なっているのは、繰り返しのための初期化、条件、更新が書き方で明確にされている点だ。

また、初期化された値が繰り返しごとのどのように更新されるかも明確にする書き方になっている。書き方の基本はこうだ。

for (初期化; 条件式; 更新) {
  文;
}

実際のコードは次のようになる。1から10までの数字を順番に表示するコードだ。

for (int number = 1; number <= 10; number++) {
  System.out.println(number + "回目");
}

  • 「int number = 1;」でnumberという変数を初期化している(numberに1を代入)
  • 「number <= 10;」が条件だ
  • 「number++」は1ループごとに1ずつ加える(更新する)ことを意味している

このように書くのがfor文だ。図で表すと次のようになる。

for

もう少し詳しくご説明しよう。

for文の繰り返し

for文による繰り返しがどのような順序で実行されていくのか、順を追ってみてみよう。最初に初期化が行われ、その後繰り返しとなる。

初期化

初期化のコードが最初に1回だけ実行される。基本的に、for文の中で使われる変数の初期化を行う。

  • 複数の変数の宣言を書くことができる。
  • 複数の初期化のための式を書くこともできる。式は、左から右に実行される。
  • 初期化が必要でなければ、何も書かなくてもよい。

繰り返し

初期化コードが実行された後、ステップ1からステップ4までの繰り返しが開始される。

  • ステップ1-式の評価:式がtrueであれば、ステップ2が実行される。式がない場合もステップ2が実行される。しかし、式がfalseならば、繰り返しは終わる。
  • ステップ2-文の実行:文が実行される。この時、中断が起きれば繰り返しは終わる。
  • ステップ3-更新:複数の更新のための式を書くことができる。この場合の式は、主に繰り返しの中で使われるカウンターなどの変数を更新する式である。式は、左から右に実行される。また、何も書かないこともできる。この場合は、何も更新されない。
  • ステップ4-次の繰り返しを行う。つまり、ステップ1から繰り返す。

 

例として、for文で1から10までの数の合計を求めるコードを取り上げて、ステップごとに何が起きているかをみてみよう。

int sum = 0;
for (int number = 1; number <= 10; number++) {
    sum += number;
}

最初は、sumが0で初期化される。その後からfor文が始まる。繰り返しの1回目だけ初期化が行われ、式の評価、文の実行、更新と続く。最後は繰り返しが11回目のとき、式のnumberが10を超えるので評価がfalseになり、繰り返しは終了する。

for

では、この点をサンプルプログラムで確認してみよう。

forを使って、1から10までの合計を求めるサンプルプログラム

このサンプルプログラムは1から10までの数の合計を求める実際のプログラムだ。

public class SumFromOneToTen {
    public static void main (String[] args){
        int sum = 0;//[1]
        for (int number = 1; number <= 10; number++) {//[2]
            sum += number;//[3]
        }
        System.out.println("sum:" + sum);//[4]
    }
}

実行結果

[1] sum:55

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 変数sumを宣言し、0を代入する。
  • [2] 変数numberを宣言し、初期値の1を代入する。numberを10になるまでインクリメントする。
  • [3] sumにsum + numberを代入する。
  • [4] sumを表示する。

初期化の値を変化させたサンプルプログラム

このサンプルプログラムは、numberに代入する初期化の値を1から3まで変化させたとき繰り返しはどのようになるかを示している。

public class ForStatementChangingInitialization {
    public static void main (String[] args){
        System.out.println("[1] 初期化:number = 1");
        for(int number = 1;number <= 10;number ++){//[2]
            System.out.print("[2]-" + number + " ");
        }
        System.out.println("");//[3]
        System.out.println("[4]初期化:number = 2");
        for(int number = 2 ;number <= 10;number ++){//[5]
            System.out.print("[5]-" + number + " ");
        }
        System.out.println("");//[6]
        System.out.println("[7] 初期化:number = 3");
        for(int number = 3;number <= 10;number ++){//[8]
            System.out.print("[9]-" + number + " ");
        }
        System.out.println("");//[10]
    }
}

実行結果

[1] 初期化:number = 1
[2]-1 [2]-2 [2]-3 [2]-4 [2]-5 [2]-6 [2]-7 [2]-8 [2]-9 [2]-10
[4] 初期化:number = 2
[5]-2 [5]-3 [5]-4 [5]-5 [5]-6 [5]-7 [5]-8 [5]-9 [5]-10
[7] 初期化:number = 3
[9]-3 [9]-4 [9]-5 [9]-6 [9]-7 [9]-8 [9]-9 [9]-10

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 初期化:number = 1を表示する。
  • [2] 変数numberを宣言し、初期値の1を代入する。numberを10になるまでインクリメントし、numberの表示を繰り返す。
  • [3] 改行する。
  • [4] 初期化:number = 2を表示する。
  • [5] 変数numberを宣言し、初期値の2を代入する。numberを10になるまでインクリメントし、numberの表示を繰り返す。
  • [6] 改行する。
  • [7] 初期化:number = 3を表示する。
  • [8][9] 変数numberを宣言し、初期値の3を代入する。numberを10になるまでインクリメントし、numberの表示を繰り返す。
  • [10] 改行する。

式の値を変化させたサンプルプログラム

このサンプルプログラムは、numberの最大値を決める式の値を8から10まで変化させたとき、繰り返しはどのようになるかを示している。

public class ForStatementChangingExpression {
    public static void main (String[] args){
        System.out.println("[1] 式:number <= 8");
        for(int number = 1;number <= 8;number ++){//[2]
            System.out.print("[2]-" + number + " ");
        }
        System.out.println("");//[3]
        System.out.println("[4] 式:number <= 9");
        for(int number = 1;number <= 9;number ++){//[5]
            System.out.print("[5]-" + number + " ");
        }
        System.out.println("");//[6]
        System.out.println("[7] 式:number <= 10");
        for(int number = 1;number <= 10;number ++){//[8]
            System.out.print("[9]-" + number + " ");
        }
    }
}

実行結果

[1] 式:number <= 8
[2]-1 [2]-2 [2]-3 [2]-4 [2]-5 [2]-6 [2]-7 [2]-8
[4] 式:number <= 9
[5]-1 [5]-2 [5]-3 [5]-4 [5]-5 [5]-6 [5]-7 [5]-8 [5]-9
[7] 式:number <= 10
[9]-1 [9]-2 [9]-3 [9]-4 [9]-5 [9]-6 [9]-7 [9]-8 [9]-9 [9]-10  

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 式:number <= 8を表示する。
  • [2] 変数numberを宣言し、初期値の1を代入する。numberを8になるまでインクリメントし、numberの表示を繰り返す。
  • [3] 改行する。
  • [4] 式:number <= 9を表示する。
  • [5] 変数numberを宣言し、初期値の1を代入する。numberを9になるまでインクリメントし、numberの表示を繰り返す。
  • [6] 改行する。
  • [7] 式:number <= 10を表示する。
  • [8][9] 変数numberを宣言し、初期値の1を代入する。numberを10になるまでインクリメントし、numberの表示を繰り返す。
  • [10] 改行する。

更新の値を変化させたサンプルプログラム

このサンプルプログラムは、更新のnumberに加算する値を1から3まで変化させたとき繰り返しはどのようになるかを示している。

public class ForStatementChangingUpdate {
    public static void main (String[] args){
        System.out.println("[1] 更新:number += 1");
        for(int number = 1;number <= 8;number += 1){//[2]
            System.out.print("[2]-" + number + " ");
        }
        System.out.println("");//[3]
        System.out.println("[4] 更新:number += 2");
        for(int number = 1;number <= 8;number += 2){//[5]
            System.out.print("[5]-" + number + " ");
        }
        System.out.println("");//[6]
        System.out.println("[7] 更新:number += 3");
        for(int number = 1;number <= 8;number += 3){//[8]
            System.out.print("[9]-" + number + " ");
        }
        System.out.println("");//[10]
    }
}

実行結果

[1] 更新:number += 1
[2]-1 [2]-2 [2]-3 [2]-4 [2]-5 [2]-6 [2]-7 [2]-8
[4] 更新:number += 2
[5]-1 [5]-3 [5]-5 [5]-7
[7] 更新:number += 3
[9]-1 [9]-4 [9]-7

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 更新:number += 1を表示する。
  • [2] 変数numberを宣言し、初期値の1を代入する。numberを8になるまで1ずつ増して、numberの表示を繰り返す。
  • [3] 改行する。
  • [4] 更新:number += 2を表示する。
  • [5] 変数numberを宣言し、初期値の1を代入する。numberを8になるまで2ずつ増して、numberの表示を繰り返す。
  • [6] 改行する。
  • [7] 更新:number += 3を表示する。
  • [8][9] 変数numberを宣言し、初期値の1を代入する。numberを8になるまで3ずつ増して、numberの表示を繰り返す。
  • [10] 改行する。

書き方の注意点

ブロックを用いない書き方

for文の繰り返しは、基本的にブロック内に書かれる。しかし、ブロックを用いないで、繰り返しの式を書くこともできるように設計されている。このため、次のコード1とコード2は同じになる。

コード1:ブロックを用いた書き方

for (int number = 1; number <= 10; number ++) {
    sum += number;
}

コード2:ブロックを用いない書き方

for (int number = 1; number <= 10; number ++)
    sum += number;

しかし、ブロック内の文はすべて繰り返されるが、ブロックを用いない場合は最初の式しか繰り返されない。このため、コード3とコード4は同じにならない。

コード3:ブロックを用いた書き方

for (int number = 1; number <= 10; number ++) {
    sum1 += number;
    sum2 += number;
}

コード4:ブロックを用いない書き方

for (int number = 1; number <= 10; number ++)
    sum1 += number;
    sum2 += number; // この行はエラーになる。

無限ループ

初期化、式、更新に何も書かないでおくこともできる。そうすると、for文は無限ループになる。つまり、条件が何もないので無限に繰り返されることになる。無限ループの繰り返しを中断する方法は、「break」や「return」だ。これらについては後で学ぶ。

for (  ;  ;  ) {
  // 実行コードをここに書く
}

ブロックを用いない繰り返しのサンプルプログラム

このサンプルプログラムは、1から10までの数の合計を求めている。この時、ブロックを用いないで繰り返しのコードは書かれる。

publipublic class SumFromOneToTenWithoutBlock {
    public static void main (String[] args){
        int sum = 0;//[1]
        for (int number = 1; number <= 10; number++) //[2]
            sum += number;//[3]
        System.out.println("sum:" + sum);//[4]
    }
}

実行結果

[1] sum:55

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 変数sumを宣言し、0を代入する。
  • [2] 変数numberを宣言し、初期値の1を代入する。numberを10になるまでインクリメントする。
  • [3] sumにsum + numberを代入する。
  • [4] sumを表示する。

まとめ

このページではJavaのfor文の使い方について、必ず知っておきたい部分を中心にまとめてご紹介した。

必ず使う文法なので、実際に打ってプログラムを動かしてみていただければと思う。

]]>
https://eng-entrance.com/java-for-for/feed 0
【Java入門】1分理解!繰り返し文の基礎の基礎 https://eng-entrance.com/java-for-repeat https://eng-entrance.com/java-for-repeat#respond Tue, 13 Dec 2016 01:46:32 +0000 http://eng-entrance.com/?p=3680 コンピュータは同じことを繰り返すのが得意だ。その特性は、プログラミングをしていく上でとても役にたつ。

このページではJavaの繰り返し文を使う上での概要をお伝えする。詳細はまた別のページでご紹介するが、まずはここから掴んでおこう。

Javaの繰り返し文の使い方

Javaの繰り返し文は、繰り返される処理をコンパクトにする。たとえば、ひとつの星「*」を5回表示させるコードを書こうとした場合を考えてみよう。もし繰り返し文なしで書いたとするとどうなるだろう。次のようなプログラムになるはずだ。

System.out.println("*");
System.out.println("*");
System.out.println("*");
System.out.println("*");
System.out.println("*");

繰り返し文を知らないならば、5回星を表示するコードを書くことにそれほど抵抗を感じないかもしれない。しかし、もし100個の星を表示するコードとなるとどうだろう。一行一行書く以外に、何か他にいい方法がないか調べ始めるだろう。

そして、行き着くのが繰り返し文なのだ。たとえば、繰り返し文のひとつであるfor文を使って100個星を表示させるコードを書いたら次のようになる。

for ( int number = 1;number <= 100;number ++){
      System.out.println("*" );
}

このように、100行のプログラムを書かなくても3行で済む。表示する数が10,000になったとしても、for文の中の100を10,000にして繰り返す条件を変更するだけだ。繰り返し文は、繰り返される処理を非常にコンパクトにする仕組なのだ。

繰り返し文を使わないサンプルプログラム

このサンプルプログラムは、繰り返し文を使わないで5個の星を表示する。

public class PrintFiveStars {
     public static void main (String[] args){
         System.out.println("[1]*");
         System.out.println("[2]*");
         System.out.println("[3]*");
         System.out.println("[4]*");
         System.out.println("[5]*");
     }
}

実行結果

[1]*
[2]*
[3]*
[4]*
[5]*

サンプルプログラムの説明

一応、そのままだが、簡単にプログラムの解説をしてゆこう。

  • [1] *を表示する。
  • [2]*を表示する。
  • [3]*を表示する。
  • [4]*を表示する。
  • [5]*を表示する。

繰り返し文を使ったサンプルプログラム

このサンプルプログラムは、繰り返し文を使って100個の星を表示する。

public class Print100Stars {
    public static void main (String[] args){
        for(int number = 1;number <= 100;number ++){//[1]
            System.out.println("[2] * " );
        }
    }
}

実行結果

[2] *
[2] *
[2] *
[2] *

・・・・・・・・

[2] *
[2] *
[2] *(100個目の表示)

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] for文を使って表示を100回繰り返す。
  • [2] 「*」を表示する。

まとめ

このページではJavaの繰り返し文の基礎の基礎だけお伝えしてきた。for文の詳細な使い方や、他のループ処理については下記のページでまとめている。引き続き参考にしてほしい。

]]>
https://eng-entrance.com/java-for-repeat/feed 0