マップと配列リストを使用してコードを実行するために、ここ2日間は試してみました。これは、ループが繰り返されるときにデータ構造体にデータを取り込もうとしているネストされたforループです。なんらかの理由で、最後のデータ構造(DataArrays2.getCinemaRowLayout2()というarrayListのarrayList)に最後の繰り返しの結果が入り込んでいます。これにより、追加されたすべてのarrayListsがFINAL反復のすべての重複であることを意味します。なぜこれが起こっているのか分かりません!java-forループの反復でarraylistが正しく設定されない
[[o、o、o、o]、[o、o、o、o]]ここでは、入力が異なる2つの繰り返しの例を示します。私はそれが使用するのに最適な構造ではないかもしれないことに感謝しますが、私は時間がないので、私の謝罪を受け入れてください。
ご迷惑をおかけして申し訳ありません。
for (int i=0; i<Screens.rows; i++){//for loop of screen rows
System.out.println("Please enter how many seats and blank spaces in this row");
Screens.columns = Integer.valueOf(scanInValue.next());
for(int j=0; j<Screens.columns; j++){//for loop of seats in row
System.out.println("Please enter 'o' for a seat or press enter for a space");
in = scanInValue.next();
DataArrays2.getCinemaRowLayout().add(j, in);//seats in a row arraylist
}
DataArrays2.getCinemaRowLayout2().add(i, DataArrays2.getCinemaRowLayout());//arraylist of row arraylists
DataArrays2.getCinemaRowLayout().clear();//clears seats arrayList
}
DataArrays2.getScreenMapLayout().put(showingName, DataArrays2.getCinemaRowLayout2());//map of arraylists
BookingSystem2.saveShowing(DataArrays2.getScreenMapLayout()); //saves map to file
感謝を助けることができます!あなたは「参照は通り過ぎている」ということをさらに説明できますか? CinemaRowLayoutのarrayListがクリアされ、それぞれの試みが異なるように設定されている場合、ループインデックス 'i'がすべての繰り返しで同じ結果を生成する方法は見当たりません...そして、それはすべての前回の反復の結果ちょうど私を困惑させる試み! – Dan
@ダンあなたはポインタに精通していますか? Javaでオブジェクトを渡すたびに、ポインタ(または参照)をメモリ内のそのオブジェクトの場所に渡しています。つまり、実際にマップに追加しているのは最後にarrayListへのポインタですが、マップに追加したすべてのポインタは同じ場所を指しています!だから、あなたが指示されている場所で何かを修正するときはいつでも、その修正はメモリ内の同じ場所を指しているので、その参照にアクセスするどこにでも表示されます – JRaymond
涼しい、それは今意味があります!ありがとう!毎回新しいインスタンスを作成する方法に関するアドバイスはありますか? – Dan