首页 > 解决方案 > 如何在 Java 中分别比较两个 int 数组元素并查看哪个元素更大?

问题描述

所以我必须制作一个游戏,分别比较两个 int 数组元素,看看一个是否大于另一个,或者它们是否相等,并打印一条消息,声明哪个玩家获胜或是否平局。两位玩家都获得了 7 张牌,因此他们必须在不同的回合中分别进行 7 次比较。在比较每个数字时我被卡住了,我似乎无法让它工作,而且我真的不知道如何做到这一点,所以每次迭代都宣布新一轮必须单独完成 7 次?这是我经过多次尝试后目前所拥有的。任何帮助将不胜感激!

public class Exercise1 {


public static void main(String[] args) {
    
    int[] playerOne = new int[6];
    int[] playerTwo = new int [6];
    
    
    
    playerOne[0] = 10;
    playerOne[1] = 6;
    playerOne[2] = 8;
    playerOne[3] = 9;
    playerOne[4] = 7;
    playerOne[5] = 12;
    playerOne[6] = 7;
    
    playerTwo[0] = 7;
    playerTwo[1] = 6;
    playerTwo[2] = 9;
    playerTwo[3] = 5;
    playerTwo[4] = 2;
    playerTwo[5] = 8;
    playerTwo[6] = 11;
            
    
     for (int i = 0; i <= playerOne.length - 1; i++) {
         if (playerOne[i] < playerTwo) {
             
         }
         

标签: java

解决方案


看起来您想将相同索引处的元素相互比较,因此您的代码几乎是好的:

  • 比较playerOne[i]playerTwo[i]做任何适当的事情(例如计算分数)
  • 请记住,最大索引由较短的数组定义,因此请确保它们具有相同的长度或使用i < Math.min(playerOne.length, playerTwo.length).

但是,重新考虑您的方法可能会更好(尽管这可能是以后的练习):与其维护 2 个单独的“圆形”分数数组,不如尝试通过引入一个RoundResults类(或类似的)并将其合并为一个,最好使用一个列表(具有动态长度)。

示例(简化):

class RoundResult {
   private int playerOneScore;
   private int playerTwoScore;

   //constructor, getters and setters
}

List<RoundResult> rounds = new ArrayList<>();
rounds.add(new RoundResult(10, 7));
rounds.add(new RoundResult(6, 6));
...


 for(RoundResult round : rounds) {
   if( round.getPlayerOneScore() < round.getPlayerTwoScore() ) {
      //player 2 won that round
   } else if( round.getPlayerOneScore() > round.getPlayerTwoScore() ) {
      //player 1 won that round
   } else {
      //it was a draw
   } 
 }

这样做有几个优点:

  • 使用列表不需要在编译时知道回合数(例如,当您想要继续直到一个玩家比另一个玩家赢得至少 2 个回合且最少 x 时)
  • 您只有一个列表,因此您不必确保 2 个数组或列表具有相同的大小和顺序
  • 你甚至可以添加方法来RoundResult喜欢boolean isDraw() { ... }

推荐阅读