阵列扫描先前的实体

时间:2018-07-12 19:49:59

标签: java arrays for-loop

我正在尝试创建一个数组,如果它与先前的条目不匹配,则会创建一个新值。如果该条目与上一个条目相同,则第二个数组中的索引将加1。

for (j = 0; !input.equals("x"); j++ ) { // team loop
    System.out.println("Which team just won? (x to exit)"); 
    input = scnr.nextLine();

    for (i = 0; i < team.length - 1; i++) {
        if (team[i] == input) {
            score[j]++;
        }
        else if (team[i] != input) {
            continue;
        }
    }
} 

2 个答案:

答案 0 :(得分:1)

看起来是一个良好的开端,但是稍后您应该记住一些问题。

  • 首先,您必须使用team [i] .equals(input)来比较两个字符串。

  • 第二,不需要第二个条件“ else if” 声明。如果第一个“ if”语句没有抓住 要求,它将继续进行下一次迭代。

  • 第三,请注意您的代码格式。您的分号 {}在某些地方没有对齐,使阅读变得混乱。

要稍微回答您的问题,请考虑您要做什么。您希望您的“团队”和“得分”数组彼此对齐,以使team [0]的得分存储在score [0]中。设置方式将搜索输入的团队的索引。然后,您在索引j处增加分数(在循环的每个周期中将其增加1)。

我们假设“苹果”小组的排名为0,而“香蕉”小组的排名为1。

如果第一轮的输入是“香蕉”,则您的循环会发现团队“香蕉”位于内部for循环的索引1处。然后,它将使j的分数增加,该分数为0。这意味着即使香蕉是获胜者,最终分数也将是“ apple”:1和“ banana”:0。

希望可以帮助您对问题进行一点思考!

答案 1 :(得分:1)

while(True){
  System.out.println("Which team just won? (x to exit)"); 
  input = scnr.nextLine();
  if(input.equals('x')) break;
  for(int i=0;i< team.length-1;i++){
     if (team[i].equals(input)) {
        score[i]++;
     }
  }
}

以上代码假定您有两个数组Team和Score,每个与Team匹配的索引的得分都在Score数组中的同一索引上。

在您的代码中,其他if(team [i]!=输入)代码实际上是多余的,因为如果IF匹配失败,则这实际上是for循环对其自身所做的事情。

其次,字符串匹配应使用.equal()完成,因为==比较对象,而不是实际字符串。 对于团队字符串的实际比较,您应该尝试 lowercasing 输入,因为团队xyz与Xyz不匹配。

*您可以使用地图(哈希图)代替团队和得分的两个数组,您可以在其中将团队存储为键,并将得分存储为值,并在每次输入时检查是否键(该团队的名称已存在),如果存在,则将值更新为1。 像

Foo score = map.get(teamName);
if(score){
  score++;  
}