可変長のJava配列を反復処理するにはどうすればよいですか。
Whileループを設定すると思いますが、配列の最後に到達したことをどのように検出しますか。
私はこのようなものが欲しいと思う[myArray.notEndofArray()を表現する方法を理解する必要がある]
index = 0;
while(myArray.notEndofArray()){
system.out.println(myArray(index));
index++;
}
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ループを使用する必要があります(サイズがわかっている可変長配列でも...毎回異なるだけです)。
配列には、長さを保持する暗黙的なメンバー変数があります。
for(int i=0; i<myArray.length; i++) {
System.out.println(myArray[i]);
}
または、> = Java5を使用する場合は、for eachループを使用します。
for(Object o : myArray) {
System.out.println(o);
}
質問の中で「可変長配列」について具体的に言及しているので、既存の2つの答え(私が書いているように)はどちらもまったく正しくありません。
Javaには「可変長配列」という概念はありませんが、この機能を果たすコレクションがあります。コレクション(技術的にはコレクションのスーパータイプである「Iterable」)は、次のように簡単にループできます。
Collection<Thing> things = ...;
for (Thing t : things) {
System.out.println(t);
}
編集:「可変長」の意味を誤解した可能性があります。彼は単に固定長であることを意味していたかもしれませんが、すべてのインスタンスが同じ固定長であるとは限りません。その場合、既存の回答は問題ありません。どういう意味なのか分かりません。
ループの実行中に配列の長さが変更される例を次に示します
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 ");
}
}
}
}