Саймон спрашивает (Сравнение символов в двух строках) Убить бесконечный цикл - PullRequest
0 голосов
/ 02 декабря 2018

Правило игры Саймон Сэйс сравнивает индивидуального персонажа пользовательской последовательности символов с каждой соответствующей последовательностью символов в Саймон.(при условии, что обе последовательности имеют одинаковую длину).Всякий раз, когда у пользователя есть такой же символ в той же позиции, что и «Саймон говорит», пользователь увеличивает свою оценку на единицу.

Я настроил цикл for и while, который сравнивает обе последовательности символов по отдельности с i = 0, однако у меня есть некоторые проблемы с прерыванием цикла.

Любые комментарии приветствуются.Спасибо.

Вот что у меня есть:

public class SimonSays {
public static void main (String [] args) {
  Scanner scnr = new Scanner(System.in);

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

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


 for (i=0; i<=simonPattern.length();i++) {
    while(userPattern.charAt(i) == simonPattern.charAt(i)){
          userScore += userScore; 
          continue;
     }
     while(userPattern.charAt(i)!=simonPattern.charAt(i)){
          break;
    }
 }

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

  return;
     }
 }

1 Ответ

0 голосов
/ 02 декабря 2018

При использовании continue и break в области видимости цикла относится к ближайшему циклу (, как вы можете видеть здесь ) - поэтому при использовании их в while Цикл они ссылаются на это.

Это то, что вызывает бесконечный цикл:

while(userPattern.charAt(i) == simonPattern.charAt(i)){
          userScore += userScore; 
          continue; // this cause your infinity loop
}

continue выполняется в цикле while, и условие меняется на него - бесконечный цикл.

Чтобы решить вашу проблему, рассмотрите возможность использования следующего кода:

int userScore = 0;
for (; userScore < simonPattern.length(); userScore++) {
    if (userPattern.charAt(userScore) != simonPattern.charAt(userScore))
          break; 
 }
 //Value of userScore here is the number of times the if statement return false -> which mean mumber of same chars

Поскольку userScore - это число символов, которое мы уже проверяем в шаблоне.

Надеюсь, это поможет!

...