2015-12-30 3 views
0

Я не могу понять, почему иногда мой код для проверки белых в вдохновителе рассчитывает значение дважды. Я имею в виду, что он подсчитывает значение как в белом, так и в черном. Однако иногда это работает отлично, ошибка не реализуется при каждом нажатии, и я не могу найти причину.Mastermind Java Подсчет «белых»

Вот мой метод сравнения(), который сравнивает мои два массива guess [] для значения, которое игрок вводит и решение [] для случайных значений.

public void comparaison(){ 
    white = 0; 
    black = 0; 
    test = new boolean[columns]; 
    for(int x = 0 ; x < test.length ; x++){ 
     test[x] = false; 
    } 
    for (int i =0 ; i<columns; i++){ 
     System.out.println(solution[i]); 
     if (solution[i] == guess[i]){ 
      test[i] = true; 
      black++; 
     }else{ 
      for (int j=0;j < columns;j++){ 
       if(!test[j] && j!=i && guess[j] == solution[i]){ 
        white++; 
        test[j]=true; 
        break; 
       } 
      } 
     } 
    } 

    System.out.println("black"+black); 
    System.out.println("white"+white); 

}

В 2 массивы объявляются и инициализируются прежде, и они заполнены, когда игрок нажмите на кнопку, представляющую цвет (см image). Массив test [] также объявляется ранее.

+1

вам не нужно устанавливать каждый элемент массива булевой ложь. При инициализации булевого массива уже установлено значение false. – Sneh

+0

Не могу увидеть изображения – nickmesi

ответ

1

Проблема возникает, если вы имеете неуместен цвета перед хорошо помещенным цветом, например, следующим образом:

  1 2 3 4 
Solution : A A B B 
Guess : B B B B 
  • 1: B соответствует белому с 3
  • 2: B соответствует белому с 4
  • 3: B соответствует черный с 3 раз
  • 4: B снова соответствует черный с 4

Возможно, вам придется проверить наличие чернокожих, прежде чем делать другой проход для белых.

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

for (int i=0 ; i<columns ; i++) { 
    if (solution[i] == guess[i]) { 
     test[i] = true; 
     black++; 
    } 
} 

for (int i=0 ; i<columns ; i++) { 
    if (solution[i] != guess[i]) { 
     for (int j=0 ; j<columns ; j++) { 
      if(!test[j] && j!=i && guess[j] == solution[i]) { 
       test[j] = true; 
       white++; 
       break; 
      } 
     } 
    } 
} 
+0

Спасибо, я знаю, понимаю проблему. Но на самом деле я думаю, что я уже проверяю чернокожих перед белыми в первом цикле, не так ли? Что ты предлагаешь? Новый цикл? –

+0

Две петли да. Первый - только для чернокожих, затем для оставшихся белых. –

+0

Вот почему я уже делаю, думаю. Не могли бы вы написать код? –

Смежные вопросы