2011-06-29 7 views
0

私は文字列(文字列は文章です)を持つ2つの配列を取り、別の配列に保持されているクラスに割り当てます(以下に示すSentenceクラス配列コード)。配列内の最後のインデックスで上書きされる配列

だから私の問題です。 popList()が呼び出されると、forループは2回実行され、配列内の最初のクラスにaddStringsとaddTranslationの最初のインデックスを置きます。ただし、ループのインデックスが作成され、temp.sentence = addStrings [1]が再度実行されると、最初のクラスの.sentenceもオーバーライドされます。次に、temp.translations = addTranslations [1]が再び実行されると、最初のクラスの.translationをオーバーライドします。

ループの最後まで、すべての配列は同じもの、つまりaddStringsとaddTranslationの最後のインデックスで埋められます。ループするたびにインデックスの前にすべてのインデックスを上書きします。

誰でも問題が何であるか知っていますか?ありがとう!ループ内であなたが(新しい文を作成する必要が

public class Sentence { 
public String sentence; 
public String translation; 
Sentence() { 
    sentence = " "; 
    translation = " "; 
} 
} 

    private void popStrings() { 
    addStrings[0] = "我是你的朋友。"; addTranslations[0] = "I am your friend."; 
    addStrings[1] = "你可以帮助我吗?"; addTranslations[1] = "Could you help me?"; 
    addStrings[2] = "我不想吃啊!"; addTranslations[2] = "I don't want to eat!"; 
} 
//Fill Sentence array with string and translation arrays 
private void popList() { 
    int i = 0; 
    Sentence temp = new Sentence(); 
    for(i = 0; i < addStrings.length && i < addTranslations.length ; i++) { 
     temp.sentence = addStrings[i]; 
     temp.translation = addTranslations[i]; 
     sentences[i] = temp; 
    } 
} 

答えて

1

):

for(i = 0; i < addStrings.length && i < addTranslations.length ; i++) { 
    Sentence temp = new Sentence(); 
    temp.sentence = addStrings[i]; 
    temp.translation = addTranslations[i]; 
    sentences[i] = temp; 
} 

そうしないと、同じオブジェクトに連続した文と翻訳を設定します。

+0

これは私にとっては奇妙なことですが、すべてが索引付けされていて、一時的な値が変化していると思っていました...それ以前のインデックスにどのように影響しているのかはまだ分かりません。とにかく、それは今働きます。 – lespommes

+0

tempがインデックスに登録されていません.... temp.sentence = xxxxと書くと、オブジェクトtempの文章をxxxに設定してください。そして文章を[temp]に設定します。 javaオブジェクトでは参照があるので、実際には文中のすべての要素は同じオブジェクト(temp)を参照します。 –

+0

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

関連する問題