2017-02-06 5 views
0

文字列を2D配列に文字列として追加しようとしています。従ってobject [17]endState[0][0]に行きます。 [18]endState[0][1]などが挙げられる。配列のイテレータのような関数(または回避策)はありますか?

私が持っている問題は、行列のすべてのセルに[32]にオブジェクトを追加するだけのoutside forループです。通常、私はイテレータを使用して他のコレクションを使用するときにこれを処理しますが、配列に関しては私が知っている限りは不可能です(私はあなたが推測したように初心者です)。

String [][] endState = new String[4][4];   
for(int i1=17;i1<33;i1++){   
    for(int r=0;r<endState.length;r++){ 
     for(int c=0;c<endState.length;c++){ 
     endState[r][c] = config.split("")[i1]; 
     } 
    }      
} 

どのように私がこれを克服することができますか?

多くのありがとうございます。

答えて

2

このようなものが必要ですか?

String[] configs = config.split(""); 
String [][] endState = new String[4][4];   
int i = 17;   
for(int r=0;r<endState.length;r++){ 
    for(int c=0;c<endState.length;c++){ 
     endState[r][c] = configs[i++]; 
    } 
} 
+0

BOOM!ありがとうございました! –

+1

これは最も簡単な方法の1つですが、私は@Peter Lawreyの最初の解決策が好きです – iMysak

0

は、Java 8を使用する場合は、次のように、あなたがそれを行うことができます。

Arrays.asList(someArray).foreach(item -> {}); 

または

Arrays.asList(someArray).stream().ANY_STREAM_FUNCTION_HERE 

あなた2dim配列反復処理したい場合:

Arrays.asList(someArray).foreach(item -> { 
    Arrays.asList(item).foreach(item2 -> {[Do your job here]}) 
}); 

をあなたが行うことができますそれ以上のJava 7の方法:

for(item : Arrays.asList(someArray)) { 
    ... 
} 

とにかく、いつもArrays.asList(someArray)を使って配列からリストを得ることができます。

+0

感謝を行うことができますが、私は簡潔でいいですが、このルートを行くことにまだ機能側に十分に快適ではありませんよ。 –

+0

私は非機能的な方法(Java 7)を追加しました – Piotrowy

+0

ありがとう、私の2回目のパスの代わりにこれを検討します。今、上記の解決策が私のために働いた。 –

2

文字をガードに変えたい場合はできます。

String[] letters = config.substring(17).split(""); 
String[][] endState = new String[4][]; 
for (int i = 0; i < endState.length; i++) 
    endState[i] = Arrays.copyOf(letters, i * 4, 4); 

またはあなたが答えを

String[][] endState = IntStream.range(0, 4) 
           .mapToObject(i -> Arrays.copyOf(letters, i * 4, 4)) 
           .toArray(s -> new String[s][]); 
+1

ありがとう、@ iMysakソリューションは、私が大きな変更なしに持っていたコードブロックに既に適合していたので選ばれました。 2回目のパスでこれを見て、改善できるかどうかを見ていきます。 –

関連する問題