2017-01-25 81 views
-4

我目前有java作业,我将不胜感激一些帮助。我们要计算一个团队记录场景。
我们给出以下号码:
TEAM1点 {23,45,65,20}如何从数组中提取数字

对手点数 {20,30,20,18}

我把这些放到一个数组。我也创建了一个公共布尔值。基本上,你将这些点从数组拉到布尔值?让布尔决定哪支队伍赢了?很显然team1赢了,但我们应该让计算机决定,而不是人。

这里是我的代码:

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 - > 1来解决它。我的问题是,电脑认为team1已经赢了,不管比分如何。

当我运行代码时,我得到一个java.lang.ArrayIndexOutOfBoundsException错误。但是,当我将team1Points[i]更改为team1Points[1]时,它会好起来,并告诉我“第1队有完美的记录!”。但是,如果我将team1Points的某些数组值更改为小于opponentPoints,那么它仍然表示“第1队有完美的记录!”。

+0

我会使用一个好的缩进来提高可读性。那些括号不在场所。问题是什么 ? – AxelH

+0

当我运行代码时,出现越界错误。但是,当我将'team1Points [i]'更改为'team1Points [1]'时,那么它会很好,并告诉我''1队有完美的记录!'“。但是,如果我将'team1Points'的某些数组值改为小于'opponentPoints',那么它仍然会说'“Team 1有完美的记录!”。我只是想明白这一点。它一直很辛苦:/ –

+0

for(int i = 0; i <5; i ++){'将从'i = 0'循环到'i = 4',但是你有一个4 int的数组[ 0]'到'[3]' – AxelH

回答

0

不知道为什么你有一个方法赢家(也如凯文说,它应该是赢家,因为命名约定)将'(a> b)'变成一个大的if语句。类似的东西出现在代码的其他地方。

您的变量'team1,opponent = 1'莫名其妙地从值1开始,我是否理解这是您的代码暗示给读者的一种方式,即两个团队都初始化胜利?使用0可能会更有意义。您的游戏应该从'team1Points [i]'的indexoutofboundsexception崩溃,因为您的数组长度为4,但循环运行5次(当前使用的范围为[0-4],包括)。将您的循环更改为i = 1将无济于事,因为问题在于您最终因i < 5声明而遇到team1Points[4]。我不知道你在做什么游戏或者它是如何工作的,但比较'胜利者(team1Points [i],opponentPoints [1])'对我来说看起来是一个公然的错误(你总是看着对手他们的第二轮得分)。

为什么您打印结果5次?如果你想打印第一条消息,那么只有当team1赢得所有轮次时才会打印第一条消息,否则你需要使用循环计数器作为第二种情况下数组的索引。第一种情况应该打破循环,所以它不写五次,此外,你不需要检查team1>0 && opponent==0,因为它只是检查'对象== 0'(说到这个条件,它只适用于如果你初始化变量在0,如前所述)。你可以检查一下,如果team1等于数组的大小,但是这样比opponent==0更麻烦。

最后,请修复您的缩进。使用预览系统,以便在发布之前进行双重确认。

编辑:凯文还提出了一个很好的观点,你应该在循环第二条语句中使用数组的长度。

+0

感谢您的回复,我很感激。我已经尝试了一些建议,但他们似乎没有太大变化。这项任务的目的是让计算机决定谁赢了给定的数字。正如我之前说的,球队1明显赢了,但这是由电脑决定的。最好的是做这件事。我不想直接回答,我想了解我的错误以备将来参考。 –

+0

如果你仍然在'team1Points [i]'接收到一个'IndexOutOfBoundsException',那么理由写在我的第三段中,并且凯文给出了一个解决方案。在循环中,计数器'i'应该遍历时间间隔'[0,array#length'],因为试图访问该范围之外的任何索引都会导致异常。 – felix

+0

感谢您的帮助!我终于修好了! –