“西蒙说”在java中

时间:2015-03-01 19:09:53

标签: java loops

“Simon Says”是一种记忆游戏,其中“Simon”输出10个字符(R,G,B,Y)的序列,用户必须重复该序列。

创建一个for循环,用于比较从索引0开始的两个字符串。

对于每场比赛,将一个点添加到userScore。在不匹配时,使用break语句退出循环。

Ex:以下模式产生的userScore为4: simonPattern:R,R,G,B,R,Y,Y,B,G,Y userPattern:R,R,G,B,B,R,Y,B,G,Y

import java.util.Scanner;

public class SimonSays {
public static void main (String [] args) {
  String simonPattern = "";
  String userPattern = "";
  int userScore = 0;
  int i = 0;

  userScore = 0;
  simonPattern = "RRGBRYYBGY";
  userPattern  = "RRGBBRYBGY";

  /* Your solution goes here  */
  char s;
  char u;


  for (i=0;i<=10;i++) {
     s = simonPattern.charAt(i);
     u = userPattern.charAt(i);

     if (s == u) {
        userScore = userScore + 1;
        continue;
     }

  }

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

  return;
 }
}

系统说:

Runtime error (commonly due to an invalid array/vector access, divide by 0, etc.).

为什么我的代码不起作用?

3 个答案:

答案 0 :(得分:3)

而不是硬编程你的字符串的长度(只是因为在你应该用手指计算它之前你可能错了)你可以使用

for (int i=0; i < simonPattern.length(); i++)

快乐编码

编辑:但它也可以生成异常,因为userPattern可能小于simonPattern。您可以通过

进行检查
if (simonPattern.length() == userPattern.length()) {
     userScore = userScore + 1;
     continue; // this is not really needed but it may if having more else-if
} else{
     break; // This will break the loop as soon as it finds a mismatch

}

答案 1 :(得分:2)

错误在于:

for (i=0;i<=10;i++) {

改变

for (i=0;i<10;i++) {

你的字符串长度= 10。

答案 2 :(得分:1)

for (i=0;i<=10;i++) {将执行11次(0到10)并且您的字符串中只有10个元素。将行更改为for (i=0;i<10;i++) {将执行适当的次数,不应抛出任何异常。