【问题标题】:comparing strings then scoring comparison once比较字符串然后评分比较一次
【发布时间】:2019-02-10 03:52:08
【问题描述】:

我有一个几乎解决了的家庭作业问题,但我遗漏了一些东西。问题, “Simon Says”是一款记忆游戏,其中“Simon”输出 10 个字符(R、G、B、Y)的序列,用户必须重复该序列。创建一个比较从索引 0 开始的两个字符串的 for 循环。对于每个匹配项,将一个点添加到 userScore。在不匹配时,使用 break 语句退出循环。假设 simonPattern 和 userPattern 总是相同的长度。

例如:以下模式的 userScore 为 4:

simonPattern: RRGBRYYBGY, userPattern: RRGBBRYBGY

我应该只计算一次匹配的数量,这个例子应该只计算一次匹配的字母。这是我的代码。

  String simonPattern;
  String userPattern;
  int userScore;
  int i;

  userScore = 0;
  simonPattern = scnr.next();
  userPattern  = scnr.next();

  /* Your solution goes here  */
   for (i=0; i < 10; ++i){

     if (simonPattern.charAt(i)==userPattern.charAt(i))
     {
        userScore+=1;
        }
     }


  System.out.println("userScore: " + userScore);

  return;
  }
}

按位置计算匹配项,但它计算字母两次,因此我收到此消息。

测试:RRGBRYYBGY/RRGBBRYBGY 输出不同。请参阅下面的重点。

你的输出 userScore: 8 预期输出 userScore:4

有什么建议吗?

【问题讨论】:

  • 相反,我看到两个字符串之间共有 8 个字符。你应该在这里解释为什么你期望 4。
  • 问题是在寻找 4,因为一旦匹配了字母,用户计数就会停止。测试在同一位置匹配 R 2 次,但应该匹配 R 一次然后得分 1,移动到 G 得分 1,移动到 B 得分 1,移动到 Y 得分 1,然后停止得分。

标签: java loops for-loop


【解决方案1】:

当出现不匹配时,您尚未终止循环。使用这个:

if (simonPattern.charAt(i)==userPattern.charAt(i))
{
    userScore+=1;
}
else
    break;

由于您没有打破循环,因此第一个 4 个字母和最后 4 个字母是匹配的。所以你的计算给你 4 + 4 = 8。

【讨论】:

  • 我可以在匹配完成后中断循环然后返回并中断下一个匹配吗?
  • 中断循环后,不能再次迭代循环。要运行循环,您将不得不再次调用该方法。但是,如果有比赛,为什么你会打破?你的问题说当不匹配时你会中断。 @RBoyer
  • 添加 else 块应该可以解决您的问题。这还没有解决你的问题吗? @RBoyer
猜你喜欢
  • 2020-03-27
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
相关资源
最近更新 更多