Как использовать оператор while для текста

80
4

Я пытаюсь сделать упрощенную версию Black Jack в Java, используя eclipse. Я пытаюсь сделать так, чтобы игрок набирал "hit" или "stand", а пока они этого не делают, он продолжает побуждать их к этому.

while (hitorstand != ("hit") || hitorstand != ("stand"))
{
System.out.println("Would you like to hit or stand?(1 for hit, 2 for stand)");
hitorstand = scan.nextLine();
hitorstand.toLowerCase();
}
if (hitorstand.equals("hit"))
{
playercard3 = random.nextInt(10) +2;
System.out.println(""+playercard3);
}
else if (hitorstand.equals("stand"))
{
System.out.println("You had a total value of " + playercardtotal + ".");
if (hiddendealercard == card2)

Когда я запускаю его, независимо от того, что я набираю, он не может избежать цикла while. Я знаю, что это сработает, если я использую числа, но я действительно хочу научиться использовать слова в качестве входных данных.

спросил(а) 2013-10-18T20:44:00+04:00 7 лет назад
1
Решение
115

Сравнивая hitorstand! = ("Hit"), вы фактически сравниваете ссылки на объекты, а не значение String. Чтобы сравнить строки, вам нужно использовать метод equals. В java каждый класс наследует equals (от Object) и может быть переопределен для сравнения пользовательских объектов

Попробуй это:

while (!hitorstand.equals("hit") || !hitorstand.equals("stand")){

ответил(а) 2013-10-18T20:51:00+04:00 7 лет назад
91

while (hitorstand != ("hit") || hitorstand != ("stand")) // This is not the right way

Используйте метод equals() для сравнения значений String. == для сравнения ссылок объектов.

while (!hitorstand.equals("hit") || !hitorstand.equals("stand")) // This is

Я не уверен, почему вы использовали бы != В условии while while, тогда как вы правильно использовали (hitorstand.equals("hit")) чуть ниже while, в выражении if.

Кроме того, там, кажется, незначительные ошибки в while блок цикла.

hitorstand.toLowerCase(); // This does nothing

Поскольку Строки неизменяемы в java, вам нужно назначить обратно измененную строку, чтобы увидеть изменения

hitorstand = hitorstand.toLowerCase(); // Assigning back the lowercase string back to hitorstand 

ответил(а) 2013-10-18T20:47:00+04:00 7 лет назад
72

Вам нужно использовать .equals(..) вместо ==. Это связано с тем, что == используется для ссылочного равенства, а .equals() просто для равенства значений.

Например:


while(!hitorstand.equals("hit") || !hitorstand.equals("stand"))

ответил(а) 2013-10-18T20:48:00+04:00 7 лет назад
41

Один из способов сделать это - использовать персонажа. Например: вместо
while (hitorstand != ("hit") || hitorstand != ("stand"))
вы можете проверить его для первого символа в строке с помощью команды charAt() с индексом строки в скобках. Поэтому, поскольку вы ищете первого символа, он будет иметь индекс 0.
while (x != 'h' || x != 's')
x - символ.

Внутри цикла while,
System.out.println("Would you like to hit or stand?");
hitorstand = scan.nextLine();
hitorstand.toLowerCase();
x = x.charAt(0);//you would just add this line. This gets the character at index 0 from the string and stores it into x. So if you were to type hit, x would be equal to 'h'.

Ваш оператор if может оставаться неизменным или вы также можете изменить условие на (x == 'h') и (x == 's'). Это вам.

ответил(а) 2013-10-19T09:23:00+04:00 7 лет назад
41

Добавляя к ответам, хорошим правилом является использование.equals() со строками и == с целыми значениями или переменными с целыми значениями (или значением null).

ответил(а) 2013-10-18T20:54:00+04:00 7 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема