2015-01-31 3 views
-2

Я делаю игру палача, я не обязательно нуждаюсь в альтернативах для достижения этого, но у меня есть часть кода, которая не возвращает ошибку, но она также не работает.Hangman игра; почему не работает .equals?

 for (int i = (length - 1); i >= 0; i--) { 

      if (guess.equals(result.charAt(i))) { 
       System.out.println("There is an " + guess + " at position " 
         + i); 
      } 
     } 

Угадать & Результат - это строки.

Почему guess.equals не работает с аргументом result.charAt(i), если, например, я предполагаю, что буква «ч» и result.charAt(3) приравнивает к «ч»

+5

Поскольку 'guess' является' String' и 'charAt' возвращает' char'. –

+0

Справа. Я бы предложил тип-casting 'guess' (__to__' char', обратите внимание, что он не будет работать наоборот) или просто используя тип 'char' для' guess' вместо String. Я имею в виду, вы не собираетесь использовать двухбуквенные догадки, не так ли? Поэтому используйте true 'char', и все проблемы будут решаться сами по себе. – syntaxerror

ответ

0

Вы сравниваете guess, что соответствует String одному символу в result. Для того, чтобы equals работать, вам нужно сравнить объекты одного и того же типа, например:

if (guess.equals(String.valueOf(result.charAt(i)))) { 
+0

Я использую сканер для ввода и, следовательно, не хочу преобразовывать символы в строки, а затем сравнивать с другой строкой; это значение разрешает эту проблему. – Gooseberry

1

guess является String; result.charAt(i) - char. Единственная причина, по которой он компилируется, состоит в том, что он распаковывается до Character. Но String не может сравниться с Character. Вероятно, есть лучший способ сделать это, но вы можете по крайней мере сделать односимвольный String от result.charAt(i) и сравнить это.

0

Я думаю (каламбур), что «догадка» имеет тип String, & «result.charAt (I)» возвращает символ.

Вы можете попробовать:

for (int i = (length - 1); i >= 0; i--) { 

     if (guess.equals(String.valueOf(result.charAt(i)))) { 
      System.out.println("There is an " + guess + " at position " 
        + i); 
     } 
    } 
0
char guessChar = guess.charAt(0); 
if (guessChar == result.charAt(i)) { 
+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). –

+0

Спасибо за совет, я не обращал внимания. –

+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – msrd0

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