2

何らかの理由で、配列の最終値のみに値が割り当てられます...これはなぜですか?

public void openFrameScores() {
    int x = 0;
    int y = 0;
    int total = 0;

    for(int i = 0; i < framesToBowl; i++) {
        scores = new int[2][framesToBowl];
        x = (int)(Math.random() * 9);
        if(x == 0) y = (int)(Math.random() * 9);
        else y = (int)(Math.random() * (9 - x));
        scores[0][i] = x;
        scores[1][i] = y;
    }

    for(int i = 0; i < framesToBowl; i++) {
        total = total + scores[0][i] + scores[1][i];
        System.out.println("Frame: " + i + ", ball 1 = " + scores[0][i] +
        ", ball 2 = " + scores[1][i] + ", total score = " + total);
    }

}



------------------------------------------------

Frame: 0, ball 1 = 0, ball 2 = 0, total score = 0  
Frame: 1, ball 1 = 0, ball 2 = 0, total score = 0  
Frame: 2, ball 1 = 0, ball 2 = 0, total score = 0  
Frame: 3, ball 1 = 0, ball 2 = 0, total score = 0  
Frame: 4, ball 1 = 0, ball 2 = 0, total score = 0  
Frame: 5, ball 1 = 0, ball 2 = 0, total score = 0  
Frame: 6, ball 1 = 0, ball 2 = 0, total score = 0  
Frame: 7, ball 1 = 0, ball 2 = 0, total score = 0  
Frame: 8, ball 1 = 0, ball 2 = 0, total score = 0  
Frame: 9, ball 1 = 6, ball 2 = 1, total score = 7  
4

3 に答える 3

7

各反復で配列を再宣言しているためです。

for(int i = 0; i < framesToBowl; i++) {
        scores = new int[2][framesToBowl];   // Here!!!

各反復で、スコアは新しい完全にゼロ化されたベクトルを受け取ると言います。そのため、最後の反復の値しか確認できません。

ループの外でスコアの初期化を行うことで、この問題を解決できます。

scores = new int[2][framesToBowl];
for(int i = 0; i < framesToBowl; i++) {
    x = (int)(Math.random() * 9);
    if(x == 0) y = (int)(Math.random() * 9);
    else y = (int)(Math.random() * (9 - x));
    scores[0][i] = x;
    scores[1][i] = y;
}
于 2012-10-23T05:30:49.903 に答える
0

for ループから配列の初期化を取り出します。

public void openFrameScores() {
    int x = 0;
    int y = 0;
    int total = 0;
scores = new int[2][framesToBowl];
    for(int i = 0; i < framesToBowl; i++) {

        x = (int)(Math.random() * 9);
        if(x == 0) y = (int)(Math.random() * 9);
        else y = (int)(Math.random() * (9 - x));
        scores[0][i] = x;
        scores[1][i] = y;
    }

    for(int i = 0; i < framesToBowl; i++) {
        total = total + scores[0][i] + scores[1][i];
        System.out.println("Frame: " + i + ", ball 1 = " + scores[0][i] +
        ", ball 2 = " + scores[1][i] + ", total score = " + total);
    }

}
于 2012-10-23T05:32:03.007 に答える
0

ループの開始時に配列をリセットします。

スコア = 新しい int[2][framesToBowl];

これにより、スコア配列がリセットされ続けます。そのため、一番下に移動して読み取ると、最後のインスタンスのみが呼び出されます。

for ループの外側で宣言するだけで、問題が解決するはずです。

于 2012-10-23T05:33:17.717 に答える