2015-01-24 8 views
5

Przeszukałem tę stronę w poszukiwaniu podobnych pytań, a te, które znalazłem, nie działają dla mnie. Przepraszam za pytanie, czy odpowiedź jest gdzieś i nie byłem w stanie jej znaleźć. Daj mi znać, jeśli robię coś nie tak, pytając o to."Operator" == "nie może być zastosowany do operandów typu 'char' i 'string'"

Robię hangman w C#. To, co zrobiłem, sprawiło, że program wybiera losowy ciąg z tablicy, tworzy tablicę odgadywanych liter (które początkowo wypełnia "_" tak długo, jak długo to słowo jest). Następnie należy uzyskać dane wejściowe użytkownika dla litery, sprawdzić, czy ta litera jest w słowie, a jeśli tak, to dodać tę literę do tablicy z odgadywanymi literami. Siedzę w tej części:

if (gameWord.Contains(guessedLetter)) 
{ 
    //for every character in gameWord 
    for (int x = 0; x < gameWord.Length; x++) 
    { 
     //if the character at the 'x' position in gameWord is equal to the guessed letter 
     if (gameWord[x] == guessedLetter) 
     { 
      //guessString at that x position is equal to the guessed letter 
      guessString[x] = guessedLetter; 
     } 
    } 

} 

Na „if (gameWord[x] == guessedLetter)” otrzymuję błąd pokazany w tytule.

gameWord jest ciągiem wybranym z tablicy łańcuchów, a guessedLetter jest łańcuchem wprowadzanym przez użytkownika pod numerem Console.ReadLine();.

+2

Konwersja string do char lub char na sznurku. – Chris

+2

Dziękujemy za jasne wyjaśnienie problemu i wyświetlenie kodu. Dobra robota! – BradleyDotNET

+0

Zmieniłem twój tytuł. Zobacz, "[Czy w tytułach pytania powinny znaleźć się" znaczniki "?] (Http://meta.stackexchange.com/questions/19190/)", gdzie konsensus brzmi "nie, nie powinien". –

Odpowiedz

4

Jeśli guessedLetter jest string, to trzeba zmienić jednego typu na inny. Można łatwo uzyskać tylko pierwszy znak guessedLetter:

if (gameWord[x] == guessedLetter[0]) 

lub zadzwoń ToString() na gameWord[x] jak sugeruje inna odpowiedź.

Jednak masz zamiar napotkać większy problem z dużo. [] jest operacją tylko do odczytu (MSDN), ponieważ łańcuchy są niezmienne, więc twoja następna linia (przypisanie) zawiedzie.

Aby to zrobić, trzeba mieć StringBuilder:

StringBuilder sb = new StringBuilder(gameWord); 
sb[index] = guessedLetter[0]; 
gameWord = sb.ToString(); 

zgłosił Replacing a char at a given index in string? dla tego kodu.

1

gameWord [x] uzyskuje dostęp do postaci gameWord, więc jest to postać, a nie ciąg znaków. można przekonwertować go na ciąg przed porównania:

if (gameWord[x].ToString() == guessedLetter) 
2

Należy porównać wartości tego samego typu. Podczas przyjmowania postaci z GameWord, tj. gameWord [x], ta wartość jest traktowana jako char.

guessedLetter również musi być typu charw celu porównania do pracy.

Zakładam, że guessedLetter jest typu string tutaj.

Oto przykład:

string gameWord = "Random"; 
char guessedLetter = char.Parse(Console.ReadLine()); 

for (int i=0; i < gameWord.length; i++) { 
    if (gameWord[i] == guessedLetter) 
     Console.WriteLine("Letter was found!"); 
} 
Powiązane problemy