第4回Java勉強会

概要

繰り返し処理

for文、while文、do~while文を使用した繰り返し処理について説明します。

変数のスコープ

変数のスコープ(可視範囲)について説明します。

配列

1つの変数に複数のデータを格納できる配列という構造について説明します。

詳細

繰り返し処理

プログラミングでは同じような処理を繰り返し処理(ループと呼んだりもします)を行うことがよくあります。
Java言語では、for文、while文、do~while文といった構文を使用して行います。(主にfor文を使用します)

  • for文
    • forの後ろの{ }(ブロック)の中の処理が繰り返し実行されます
      初期化処理:その繰り返しの初期化処理を行います。大体はループ用の変数(ループカウンタ)の初期化を行います。
      繰り返しの判定:条件式を記述します。ループが始まるときに判定が行われその結果がtrueであれば{ }(ブロック)内の処理が行われます。
      更新処理{ }内の処理が終わったときに行う処理を記述します。ここではループ用の変数を更新を行ったりします。
      for (初期化 ; 繰り返しの判定 ; 更新処理) {
          // 処理
      }
    • サンプルプログラム - 1から10までの数字を出力します
      for (int i = 1;i <= 10;i++) {
          // 繰り返し行う処理
          System.out.println("i=" + i);
      
      }
       
      上記の例の処理内容は以下のようになります。
       
      1. 初期化処理(int i = 1)が実行されます
      2. 「i=1」が表示されます(1回目の処理)
      3. 1周した後の処理(i++)が実行されて、iが2になります
      4. 条件判定(i <= 10)が行われ、条件を満たしているので・・
      5. 「i=2」が表示されます(2回目の処理)
      6. 1周した後の処理(i++)が実行されて、iが2になります
      7. 条件判定(i < 10)が行われ、条件を満たしているので・・
      8. 「i=3」が表示されます(3回目の処理)
      9. <<中略>>
      10. 「i=9」が表示される(10回目の処理)
      11. 1周した後の処理(i++)が実行される(i == 10)
      12. 条件判定(i < 10)が行われ、条件を満たしていないので・・
      13. for文の処理を終了する
         
  • while文
    • これも繰り返し処理を行うために使うことができます。
      条件式:この条件式の結果がtrueの場合{ }内の処理を行います。
      while (条件式) {
          // 繰り返し行う処理
      }
       
    • サンプルプログラム - 1から10までの数字を出力します
      int i = 1;
      
      while (i <= 10) {
          // 処理
          System.out.println("i=" + i);
          i++;
      }
       
      上記の例の処理内容は以下のようになります。
       
      1. 変数iの宣言(int i = 1)が実行される
      2. whileの条件判定(i <= 10)が行われ、条件を満たしているので・・
      3. 「i=1」が表示され、「i++」が実行されてiが2になる(1回目の処理)
      4. 条件判定(i <= 10)が行われ、条件を満たしているので・・
      5. 「i=2」が表示され、「i++」が実行されてiが3になる(2回目の処理)
      6. <<中略>>
      7. 「i=10」が表示され、「i++」が実行されてiが11になる(10回目の処理)
      8. 条件判定(i <= 10)が行われ、条件を満たしていないので・・
      9. while文の処理を終了する
         
  • do~while文
    while文との違いは、条件判定をする前に処理が実行されることです。
    (条件を満たしていなくても1回は処理が実行されます)
    • do{ }内の処理が行われてから判定がされます。
      do {
          // 処理
      }
      while (条件式);
       
    • int i = 1;
      
      do {
          // 処理
          System.out.println("i=" + i);
          i++;
      }
      while (i <= 10);
       
  • 二重ループ
    for文{}内でさらにfor文を記述するものです。
    • サンプルプログラム - 以下の例では二重ループで九九の計算結果を出力します。
      1×1、1×2、1×3 ・・・・ 9×7、9×8、9×9 といった形で繰り返し処理が実行されます。
      for (int dan = 1;dan <= 9;dan++) {
          System.out.println(dan + "の段");
      
          for(int i = 1;i <= 9;i++) {
              System.out.println(dan + " x " + i + " = " + dan * i);
          }
      }
       
      この二重ループでは、外側のループが1回実行されるうちに内側のループが9回実行されます。
      内側のループの9回が終わると外側のループが2回目に入ります。 上記の例では、dan=1→i=1→i=2→・・・→i=9→dan=2→i=1→i=2→・・・i=9→dan=3→・・・という処理順序になります。
       
  • 無限ループ
    コーディングミスなどにより、ループを抜け出せなくなってしまうことを言います。
    for文よりwhile文で起こりやすいと思います。
    無限ループにならないように気をつけてコーディングしましょう。

    • int i = 0;
      
      while (i == 10) {
          System.out.println("i=" + i); // i++;を書き忘れると無限ループになってしまいます
      }

変数のスコープ

変数は宣言する場所によって、その変数を使用できる有効範囲というものがあり変数のスコープといいます。

  • for文の初期化部で宣言した変数
    はfor文の中でしか使うことができません。
     
  • 変数のスコープによって変数を参照できる箇所が違うことを確認してください。
    for (int i = 0;i < 10;i++) {
    // 処理
    System.out.println("i=" + i);
    }
    
    //System.out.println("i=" + i); //  変数 iはfor文で宣言されているのでforの{ }内ででしか使用することはできません
     

配列

1つの変数に複数のデータ(同じ型)を格納する構造の1つです。

 
  • 配列の変数宣言
    型名[] 変数名 = new 型名[要素数];
     
    newは、ここでは配列を初期化する命令という風に思ってくれれば良いです。
     
    「型名[] 変数名」と「型名 変数名[]」のどちらでもOKなんですが意味的には
     
    「型名[] 変数名」→「○○配列型の変数です」
    「型名 変数名[]」→「○○型の配列変数です」
     
    となり、前者の方が良いとされています(?)
     
    newを使用して初期化した配列の中身は
    基本型の配列の場合→0
    String型などオブジェクト型の場合→null
    になります。
     
  • 配列の宣言・初期化・代入
     
    int型の要素が2つの配列を宣言・初期化する場合
     
    ※[] の中に指定する要素番号(index)は0から始まります。
     
     つまり、配列の最後の要素を指定したい場合は[]の中に配列の要素数 - 1を指定しなければなりません。
    // int型の配列の宣言と初期化を行う
    int[] intArray = new int[2];
    
    // 配列に値を代入する
    intArray[0] = 100;
    intArray[1] = 200;
    
    // 配列の中身を確認する
    System.out.println("intArray[0]の値→" + intArray[0]);
    System.out.println("intArray[1]の値→" + intArray[1]);
     
    宣言・初期化・代入を1文で行う場合
    // 宣言→初期化→代入まで行う
    // 各要素の区切りは「,」を使用します
    int[] intArray = new int[] {100, 200};
    
    // 省略すると以下のようにもかけます。
    int[] intArray = {100, 200};
     
  • length
    配列の要素数を取得するには
    配列の変数名.length;
     
    length使用例
    // 配列を宣言・初期化する
    int[] intArray = new int[] {100, 200, 300};
    
    // 配列の要素数を確認するため、出力します。
    System.out.println("配列の要素数=" + intArray.length);
    
    // 配列の要素数分ループします。
    for (int i = 0;i < intArray.length;i++) {
        // 配列「i」番目の要素を表示します。
        System.out.println("intArray[" + i + "]=" + intArray[i]);
    }
     
  • 二次元配列
    以下のように[ ]をひとつ増やすことで、二次元の配列を作ることもできます。
     
  • 変数宣言の構文の例
    型名[][] 変数名 = new 型名[要素数1][要素数2];
     
    Javaの場合、二次元の配列というよりは
    「配列の中に配列が入っている」イメージでしょうか。
    配列の中に要素数の違う配列を入れることもできますが、あまり使わないと思います。
     
  • 2次元配列の使用例
            int[][] intArray = new int[2][3];
            intArray[0][0] = 10;
            intArray[0][1] = 40;
            intArray[0][2] = 50;
            intArray[1][0] = 88;
            intArray[1][1] = 66;
            intArray[1][2] = 44;
     
    こんな風に書くよりも、以下のように書くほうがわかりやすいと思います。
     
            int[][] intArray = new int[][] 
            {
                {10, 40, 50},    //intArray[0] の初期化
                {88, 66, 44}    //intArray[1] の初期化
            };
     

練習問題

  1. 画像のような三角形を表示をするプログラムを、for文を使って作ってみましょう。
    添付ファイルの画像
     
  2. 上の画像三角形とは逆向きに表示されるプログラムを作ってみましょう。
     
  3. 画像のような表示をするプログラムを、for文を使って作ってみましょう。
    添付ファイルの画像
     
  4. 指定した値までの間で、素数のみ表示されるプログラムを作ってみましょう。

Java勉強会カリキュラムに戻る


添付ファイル: fileupturnTriangle.jpg 512件 [詳細] filefor.JPG 444件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-10-30 (木) 00:58:54 (678d)