web-dev-qa-db-ja.com

可変長配列を反復処理する

可変長のJava配列を反復処理するにはどうすればよいですか。

Whileループを設定すると思いますが、配列の最後に到達したことをどのように検出しますか。

私はこのようなものが欲しいと思う[myArray.notEndofArray()を表現する方法を理解する必要がある]

index = 0;
while(myArray.notEndofArray()){
  system.out.println(myArray(index));
  index++;
}
21
Ankur
for(int i = 0; i < array.length; i++)
{
    System.out.println(array[i]);
}

または

for(String value : array)
{
    System.out.println(value);
}

2番目のバージョンは「for-each」ループで、配列とコレクションで機能します。おそらく実際のインデックスを気にしないので、ほとんどのループはfor-eachループで実行できます。実際のインデックスを気にする場合は、最初のバージョンをご覧ください。

完全を期すために、次のようにwhileループを実行できます。

int index = 0;

while(index < myArray.length)
{
  final String value;

  value = myArray[index];
  System.out.println(value);
  index++;
}

ただし、サイズがわかっている場合は、whileループではなくforループを使用する必要があります(サイズがわかっている可変長配列でも...毎回異なるだけです)。

51
TofuBeer

配列には、長さを保持する暗黙的なメンバー変数があります。

for(int i=0; i<myArray.length; i++) {
    System.out.println(myArray[i]);
}

または、> = Java5を使用する場合は、for eachループを使用します。

for(Object o : myArray) {
    System.out.println(o);
}
5

質問の中で「可変長配列」について具体的に言及しているので、既存の2つの答え(私が書いているように)はどちらもまったく正しくありません。

Javaには「可変長配列」という概念はありませんが、この機能を果たすコレクションがあります。コレクション(技術的にはコレクションのスーパータイプである「Iterable」)は、次のように簡単にループできます。

Collection<Thing> things = ...;
for (Thing t : things) {
  System.out.println(t);
}

編集:「可変長」の意味を誤解した可能性があります。彼は単に固定長であることを意味していたかもしれませんが、すべてのインスタンスが同じ固定長であるとは限りません。その場合、既存の回答は問題ありません。どういう意味なのか分かりません。

4

ループの実行中に配列の長さが変更される例を次に示します

import Java.util.ArrayList;
public class VariableArrayLengthLoop {

public static void main(String[] args) {

    //create new ArrayList
    ArrayList<String> aListFruits = new ArrayList<String>();

    //add objects to ArrayList
    aListFruits.add("Apple");
    aListFruits.add("Banana");
    aListFruits.add("Orange");
    aListFruits.add("Strawberry");

    //iterate ArrayList using for loop
    for(int i = 0; i < aListFruits.size(); i++){

        System.out.println( aListFruits.get(i) + " i = "+i );
         if ( i == 2 ) {
                aListFruits.add("Pineapple");  
                System.out.println( "added now a Fruit to the List "); 
                }
        }
    }
}
1
cjonas