public class Pattern {
public static void main(String[] args) {
int lowest = 0, highest = 100, initialGuess, UserInput;
boolean CorrectGuess = false;
int countGuess = 0;
Scanner input = new Scanner(System.in);
System.out.println("Think a number between 0 and 100.");
int[] arr = new int[101];
for(int i = 0; i <= 100; i++)
arr[i] = i;
while(!CorrectGuess) {
int midRange = lowest + (highest - lowest) / 2;
initialGuess = arr[midRange];
countGuess++;
System.out.println("Is " + initialGuess + " the number?");
System.out.println("Enter 1 if this was a correct guess, 2 if your number is higher, and 3 if your number is lower:");
UserInput = input.nextInt();
if(UserInput == 1){
CorrectGuess = true;
System.out.println("Guessed correctly in " + countGuess + " tries!");
}
else if(UserInput == 2)
lowest = midRange;
else if(UserInput == 3)
highest = midRange;
}
boolean validAnswer = false;
while (!validAnswer){
System.out.println("Is " + initialGuess + " the number?");
System.out.println("Enter 1 if this was a correct guess, 2 if your number is higher, and 3 if your number is lower:");
UserInput = input.nextInt();
if(UserInput == 1){
validAnswer = true;
System.out.println("Guessed correctly in " + countGuess + " tries!");
}
else if(UserInput != 2 || UserInput != 3)
System.out.println("ERROR! Please restart the program and start again!");
}
}
}
Ivan Zelenkov
28 уровень
Какой тип валидации можно сделать во втором цикле do...while и как правильно его описать
Обсуждается
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #2322530
1 сентября 2020, 17:25
не очень понятно в чем вопрос то?
и описание кода какое? что он должен делать
0
Ivan Zelenkov
1 сентября 2020, 17:42
суть кода в том чтобы программа угадывала число которое загадал пользователь. И у меня вопрос как правильно написать проверку на валидность во втором цикле while и кстати ты знаешь как сделать чтобы начать отсчет не с 50 как у меня, а например с 1?
0
hidden #2322530
1 сентября 2020, 17:53
как я понял твою программу
числа от 1 до 100 включительно.
программа выдает среднее значение между highest (100) и lowest (0) для начала
пользователь говорит, что например загаданное меньше.
то показывает снова но уже между highest (50) и lowest (0)
и так далее пока не дойдет до какого-то значения.
человек вводит верно, ты выводишь текст и пошел дальше.
а второй цикл вообще зачем? какая суть в нем, если человек уже угадал число, ты должен переспросить еще раз верно ли определенное число?
тогда надо не while
вот как бы и все 0
Ivan Zelenkov
1 сентября 2020, 18:04
Я понял, но у меня выдает ошибку
0
hidden #2322530
1 сентября 2020, 18:07
0
Ivan Zelenkov
1 сентября 2020, 18:12
вау! Я не знал что так можно, спасибо буду знать. Я только набираюсь опыта. Но смотри есть один момент после того как нам говорит что "Ты угадал за какое-то кол-во попыток" выдает опять текст о том что верный ли этот номер и не завершает программ. Я пришлю скриншот.
И объясни пожалуйста смысл строки которую ты написал выше, я понял что мы вызываем метод main в котором все прописано, но что за (new String[0]);
0
hidden #2322530
1 сентября 2020, 18:24
метод main всегда принимает 1 аргумент, это массив строк. потому нельзя снова вызвать метод main без аргументов, что тебе выше и показала Idea. потому мы просто создаем пустой массив и передаем его аргументом.
тексты ты сам можешь писать любые.
по поводу повторного вопроса , так это в программе твоей заложено было, не я это придумал.
она переспрашивает на всякий случай. действительно ли программа угадала твое число. ты жмешь 1, типа да. верно. она завершается успешно.
0
Ivan Zelenkov
1 сентября 2020, 18:32
я добавил while и теперь она при нажатии на рестарт сама перезапускается. Ура! Спасибо тебе огромное Артем, я сейчас стал лучше разбираться в Java. И еще один вопрос а как бы ты начал отсчет числа с 1? А не с 50 и т.д.
(highRange / 100) + lowRange; попытался этой программой но шаг после 1 только на 2 больше, а вот если от 1 и до 25 и т.д., то есть я имею ввиду чтобы начиналось с единицы, но шаг от первичного числа сохранялся на 25 потом на 12 на 6 и тому подобное. У меня препод этого ничего не объяснил, сижу долблю эту задачу с разными способами, потому что нужно делать. Поэтому спрашиваю кого могу, потому что некого больше набираться опыта. Вот с main ты мне помог, теперь понимаю. Спасибо
0
hidden #2322530
1 сентября 2020, 18:39
это задача для понимания алгоритма бинарного поиска.
Двоичный (бинарный) поиск (также известен как метод деления пополам или дихотомия) — классический алгоритм поиска элемента в отсортированном массиве (векторе), использующий дробление массива на половины
0
Ivan Zelenkov
1 сентября 2020, 20:00
Cпасибо большое
0