2017-01-25 10 views
-4

私は現在、いくつかの助けに感謝しているJava宿題を持っています。チーム記録シナリオを計算します。
我々は、以下の番号を付している。
Team1は{23,45,65,20}配列から数値を引き出す方法

相手ポイント {20,30,20,18}

Iアレイにそれらを投げたポイント。私はまた、公開ブール値を作成しました。基本的には、これらの点を配列からブール値に引っ張る必要がありますか?そしてブールはどのチームが勝つのか決定しますか?チーム1が勝ったのは明らかですが、我々は人間にではなくコンピュータに決定させることになっています。ここで

は私のコードです:

public class TeamScore { 

public static boolean Winner(int team1Points, int opponentPoints) { 
    if (team1Points > opponentPoints) { 
     return true; 
    } else { 
     return false; 
    } 
} 

public static void main(String[] args) { 
    // Scanner in = new Scanner(System.in); 
    int[] team1Points = { 23, 45, 65, 20 }; 
    int[] opponentPoints = { 20, 30, 20, 18 }; 
    int team1 = 1; 
    int opponent = 1; 

    for (int i = 0; i < 5; i++) { 
     if (Winner(team1Points[i], opponentPoints[1])) { 
      team1 += 1; 
     } else { 
      opponent += 1; 
     } 
    } 

    for (int i = 0; i < 5; i++) { 
     if (team1 > 0 && opponent == 0) { 
      System.out.println("Team 1 has the perfect record!"); 
     } else { 
      System.out.println("Win" + Arrays.toString(team1Points)); 
      System.out.println("Loss" + Arrays.toString(opponentPoints)); 
     } 
    } 
} 

は、誰もが、おそらく私を助けてもらえますか?私は現在プログラミングIIにいますが、私はプログラミングIで最高の教師がいませんでした。どんな助けもありがとう!

EDIT:
これは変数i - > 1を変更することで既に修正できるので、これは重複した質問ではないと思います。私の問題は、チーム1が既にスコアに関係なく勝ったとコンピュータが判断したことです。

コードを実行すると、私はjava.lang.ArrayIndexOutOfBoundsExceptionエラーが発生しています。しかし、私がteam1Points[i]team1Points[1]に変更すると、それは大丈夫になり、「チーム1は完璧な記録を持っています!」と伝えます。しかし、team1Pointsの配列値の一部をopponentPoints未満に変更すると、「チーム1には完璧な記録が残っています!」と表示されます。

+0

そして、わかりやすい字下げを使用します。これらの括弧は場所外です。何が問題ですか ? – AxelH

+0

コードを実行すると、範囲外のエラーが発生します。しかし、私が 'team1Points [i]'を 'team1Points [1]'に変更すると、大丈夫になり、 ''チーム1は完璧な記録を持っています!しかし、 'team1Points'の配列値のいくつかを' opponentPoints'よりも小さく変更すると、 ''チーム1は完璧なレコードを持っています!私はこれを理解しようとしています。/ –

+0

'for(int i = 0; i <5; i ++){'は 'i = 0'から' i = 4'までループしますが、 0] '〜' [3] ' – AxelH

答えて

0

大文字のif文に '(a> b)'を変換するメソッドWinner(名前付け規則のためにKevinが言ったように)がわかりません。同様のものはあなたのコードのどこかに現れます。

あなたの変数'team1、opponent = 1 'は値1で始まるのはわかりませんが、私はあなたのコードが両方のチームが勝利で初期化するということを暗示する方法と理解していますか?おそらく0を使用するほうが理にかなっています。

長さ4の配列を持つように、あなたのゲームは'team1Points [i] 'のインデックスアウトオブセクションからクラッシュするはずですが、ループは5回実行されます(現在使用されている範囲は[0-4]です)。あなたのループをi = 1に変更することは、i < 5ステートメントのために最終的にteam1Points[4]に出くわすことになるので、助けになりません。

私はどのゲームをモデリングしているか、どのように動作しているのかよくわかりませんが、比較の'Winner(team1Points [i]、opponentPoints [1]) 'は私にとって大変なエラーのように見えます第2ラウンドのスコア)。

なぜあなたの結果を5回印刷していますか?最初のメッセージを印刷する場合は、team1がすべてのラウンドを獲得した場合にのみ、そして各ラウンドのポイントをそれ以外の場合は、ループカウンタを2番目のケースの配列のインデックスとして使用する必要があります。最初のケースではループが5回書き込まれないようにする必要があります。さらに、team1>0 && opponent==0をチェックする必要はありません。これは、'opponent == 0 'かどうかを確認するだけです(この条件は、 0)。代わりにteam1が配列のサイズと等しいかどうかを確認できましたが、opponent==0よりも多くの手間がかかります。

最後に、インデントを修正してください。あなたが投稿する前に二重確認をすることができるようにプレビューシステムを使用してください。

編集:Kevinはまた、ループの2番目のステートメントで配列の長さを使用しなければならないという良い点があります。

+0

ご返信ありがとうございます、私はそれを感謝します。私はあなたの提案のいくつかを試しましたが、彼らはあまり変わっていないようです。課題の目的は、コンピュータに与えられた数字から勝利した人を決定させることです。チーム1が明らかに勝利する前に言ったように、それはコンピュータが決定するためのものです。最高のことはこれについて行くことでした。私は直接の回答を得ようとしていないので、私は将来の参考のために間違いを学びたいと思っています。 –

+0

まだ 'team1Points [i]'に 'IndexOutOfBoundsException'を受け取っている場合、その理由は3番目のパラグラフに書かれており、解決策はKevinによって与えられています。あなたのループでは、その範囲外のインデックスにアクセスしようとすると、カウンタ 'i'は間隔' [0、array#length] 'をたどるべきです。 – felix

+0

すべての助けをありがとう!私はそれを最終的に修正しました! –

関連する問題