Name
のリストを作成するはずのメソッドがあります。名前を含むデータセットのオブジェクトと、数十年にわたる名前の人気を表す11の整数。データのArrayListの値はループの終了後に最後の値に設定されます
例:
Zelda 436 420 468 526 789 961 938 0 0 0 0
Zulma 0 0 0 0 0 0 837 0 0 0 0
は、現在のデータセットは、正しく読み込まれ、私はforループ内からName
オブジェクトをチェックしたときにすべてが正しいです。ループの終了後、ArrayList
内のすべての値は、最後のエントリと同じ人気値を持ちますが、name
値は正しいままです。
Zelda 436 420 468 526 789 961 938 0 0 0 0
Zelda [436, 420, 468, 526, 789, 961, 938, 0, 0, 0, 0]
を実際に何が起こる:
Zelda 436 420 468 526 789 961 938 0 0 0 0
Zelda [0, 0, 0, 0, 0, 0, 837, 0, 0, 0, 0]
データと最後のエントリの出力:
Zulma 0 0 0 0 0 0 837 0 0 0 0
Zulma [0, 0, 0, 0, 0, 0, 837, 0, 0, 0, 0]
コード:
public static ArrayList<Name> createNameArray(String[] data) {
int nameLength;
String name;
String pops;
ArrayList<Name> names = new ArrayList<Name>();
int[] popsInts = new int[11];
for (int i = 0; i < data.length; i++) {
// Checking data array, no missing data here
System.out.println(data[i]); //returns correctly
nameLength = data[i].indexOf(' ');
name = data[i].substring(0, nameLength);
pops = data[i].substring(nameLength + 1);
for (int k = 0; k < 11; k++) {
popsInts[k] = Integer.parseInt(pops.split(" ")[k]);
}
names.add(new Name(name, popsInts));
// Checking if Name object added to names is correct which it always is
System.out.println(names.get(i)); //returns correctly
}
// If I print out values of the ArrayList here, everything is wrong
return names;
}
私は、メインメソッドから呼び出していますどのように10
:
ArrayList<Name> list = createNameArray(data);
// Printing out ArrayList, all values are wrong except last one
// Using a regular for loop produces same results
for(Name n : list) {
System.out.println(n);
}
私はName[]
を使用して試してみましたが、同じことが起こります。
私は間違って何をしていますか?エラーを解決するために何ができますか?
ループ**で 'int [] popsInts = new int [11];' **を作成します。つまり、 'List'に複数回追加する配列があります。 –
'Name'の実装は何ですか? –
@ElliottFrischはうまくいきましたが、なぜ機能するのか分かりません。 popIntsはループごとに新しい値に変更され、ArrayListに追加された後にそれぞれの名前オブジェクトが印刷されていて、正しい値が出力されました。ループの外側でint配列を作成すると、ループ内で完璧に動作するにもかかわらず、ループが終了した後に何が起こるかにどのように影響しますか?方法で迅速な応答をありがとう:)編集:ジャックは彼らの答えで説明した。 –