private static void algorithm2() {
String name = "";
int high = (char)90;
int low =(char) 66;
int letter;
int direction;
do {
letter = (high + low)/2;
String[] choices = { "Before", "This is the letter", "After", "Done" };
direction = JOptionPane.showOptionDialog(null,
"Is the next letter in your name a(n) \'" +(char) letter
+ "\' or is it after/before it? ", "Option 2",
JOptionPane.DEFAULT_OPTION,
JOptionPane.PLAIN_MESSAGE,
null, choices, "Option 2");
if (direction == 0)
low= letter - 1; //
if (direction == 1){
name+=(char)letter;
}
if(direction==2){
high = letter + 1; // last guess was too high
}
if (direction == 3)
break;
} while (direction != 1);
JOptionPane.showMessageDialog(null, "Thanks for playing " + name + "!");
}
Угадайте среднюю букву в каждой последовательности возможных букв. В первый раз это m или n. Всякий раз, когда угадывается вопрос, спрашивайте у пользователя, правильно ли оно: а) правильное предположение, б) правильный ответ раньше в алфавитном порядке, чем предположение, или в) правильная буква позже в алфавитном порядке, чем догадка. Откорректируйте последующие догадки соответственно, всегда угадывая среднюю букву в оставшемся наборе возможных букв. Когда число возможностей четное, не имеет значения, угадаете ли вы первую или вторую «среднюю» букву. Когда есть только одна возможность, этот является средним выбором в списке одного значения.Как заставить мой метод работать правильно?
Я не могу заставить его работать, когда появляются окна, я нажимаю до и показывает неправильную букву.
Несомненно, 'low = letter - 1' должно быть' high = letter - 1', а 'high = letter + 1' должно быть' low = letter + 1'? – ruakh
Ну, какие диагностические проверки вы выполнили? Вы пробовали отладку? Если да, то что случилось? Какая неверная буква отображается? Правильно ли интерпретируется направление? –
Действительно, комментарий «последнее предположение было слишком высоким» не соответствует опции «следующая буква после [буквы отображается]». –