Wiki内検索
カウンタ
メニュー
最近更新したページ
最新コメント
トップページ by awesome things!
トップページ by check it out
Generics(Java) by stunning seo guys
String(Java) by awesome things!
トップページ by check it out
PHPのページ by stunning seo guys
Tomcatのページ by stunning seo guys
トップページ by check it out
トップページ by awesome things!
タグ

繰り返し(Java)

繰り返し


はじめに

ここまでで、Javaプログラミングの基本についてイメージできてきたのではないかと思います。ここでは、プログラムの基本制御のひとつである。繰り返し処理について、例を作りながら説明します。

for文(配列を使った処理)

これまでの例題を作ってきたなかで、「このサンプルは、ループを使えば簡単にかけるな」と思われたがいらっしゃったと思います。まずは、配列をつかったfor文を書いてみましょう。test.basicパッケージに、配列の練習のときに作ったSample008をSample013という名前でコピーしてください。これを修正して実験してみましょう。

package test.basic;

public class Sample013 {

    public static void main(String[] args) {
        // int型の3の要素をもつ配列の宣言
        int[] i1 = new int[3];
        // 配列に代入
        i1[0] = 1;
        i1[1] = 2;
        i1[2] = 3;

        StringBuffer sb = new StringBuffer();
        sb.append("【int】;");
        // 配列要素の出力をループで行う。
        for(int j=0; j<i1.length ; j++){
            sb.append(Integer.toString(i1[j]));
            if(j < (i1.length-1)) sb.append(";");
        }
        System.out.println(sb.toString());

        // int型の3の要素をもつ配列の宣言
        int[] i2 = {100,200,300};
        sb.delete(0,sb.length());
        sb.append("【int】;");

        // 配列要素の出力をループで行う。途中でブレークする。
        for(int j=0; j<i2.length;j++){
            sb.append(Integer.toString(i2[j]));
            if(j == (i2.length-1)) break;
            sb.append(";");
        }
        System.out.println(sb.toString());

    }
}


これを実行してみてください。以下のような結果がでましたか?

【int】;1;2;3
【int】;100;200;300

for文の基本形は以下です(注;Java5.0では、この記述を簡単にする「拡張for文」が導入されました)。

for(初期化式 ; 終了条件 ; 増分){
    繰り返し処理する命令群
}


ポイントがあるとすれば、配列の先頭のインデックスが0であることと、終了条件として必要な配列の長さは「配列名.length」で取得できることです。ループが途中で嫌になったらbreak文でループを抜けることができます。

この例では、文字列の作成にStringBufferを使っています。ループを使うとappend()メソッドで文字列を追加していく方が、(+でStringを足していくよりも)簡単ですね。それに以前にお話しましたように、Stringを+でつなぐよりも、StringBufferを使った方が高速です。


for文とwhile文(ArrayListを使った処理)

次は、ArrayListをつかったfor文を書いてみましょう。また、繰り返しの制御にはfor文のほかにwhile文もあり、Collectionを扱う際にはこちらを使った方が簡単にです。test.basicパッケージに、ArryListの練習のときに作ったSample011をSample014という名前でコピーしてください。

package test.basic;

import java.util.ArrayList;
import java.util.Iterator;

import test.basic.bean.Actor;

public class Sample014 {

    public static void main(String[] args) {
        ArrayList aList1 = new ArrayList();
        ArrayList aList2 = new ArrayList();
        ArrayList aList3 = new ArrayList();

        // ArrayListに要素を追加する。
        // 基本型はラッパークラスに入れる。
        aList1.add(new Integer(1));
        aList1.add(new Integer(2));
        aList1.add(new Integer(3));

        // クラス型はそのまま入る。
        aList2.add(new Actor("宙返りをする"));
        aList2.add(new Actor("トンボがえりをする"));
        aList2.add(new Actor("月面宙返りをする"));

        StringBuffer sb = new StringBuffer();
        sb.append("【int】;");
        // 【1】ArrayList要素の出力をforループで行う。
        for(int j=0; j<aList1.size() ; j++){
            sb.append(((Integer)aList1.get(j)).toString());
            if(j < (aList1.size()-1)) sb.append(";");
        }
        System.out.println(sb.toString());

        sb.delete(0,sb.length());
        sb.append("【int】;");
        // 【2】 ArrayList要素の出力をIteratorを使い、whileループで行う。
        int j = 0;
        Iterator it = aList1.iterator();
        while(it.hasNext()){
            sb.append(((Integer)it.next()).toString());
            if(j < (aList1.size()-1)) sb.append(";");
            j++;
        }
        System.out.println(sb.toString());

        sb.delete(0,sb.length());
        sb.append("【Actor】;");
        // 【3】 ArrayList要素の出力をIteratorを使い、whileループで行う。
        j = 0;
        it = aList2.iterator();
        while(it.hasNext()){
            sb.append(((Actor)it.next()).action());
            if(j == (aList2.size()-1)) break;
            sb.append(";");
            j++;
        }
        System.out.println(sb.toString());

    }
}


これを実行してみてください。以下のような結果がでましたか?

【int】;1;2;3
【int】;1;2;3
【Actor】;宙返りをする;トンボがえりをする;月面宙返りをする

この例では【1】〜【3】の3つのループがありますが、【3】はbreak文が使えることを示しているだけです(ここでは本質的でないコード)。【1】では配列と同様にArrayListから要素を取得しています。【2】に注目してください。まず、while文の基本形は以下です。

while(真偽式){
    繰り返し処理する命令群
}


「真偽式」とは戻り値としてboolean(true|false)を返す式のことです。【2】のポイントはArrayListから.iterator()メソッドで、java.util.Iterator型のイタレータを取り出し、それを活用して処理を行っていることです。
ArrayList、LinkedList、VectorといったListからはこのiteratorを取得することが可能です。Listから要素をLoopで取り出す際にはこのイタレータを使用するのが定石です。また、java.util.Iteratorには、この例題でつかったhasNext()、next()とremove()というメソッドしかありませんが、 java.util.ListIteratorというイタレータも取得することができます。このListIteratorには、これらメソッドに加えて、hasPrevious()、previous()、nextIndex()、previousIndex()といったメソッドが用意されています(これを使えば、次だけではなく、戻ることができますね)。
2007年02月26日(月) 15:25:55 Modified by wanderingse




スマートフォン版で見る