Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для PchWolf
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 5

Ввод с клавиатуры и Scanner

02.11.2015, 23:34. Показов 2801. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо считать с клавиатуры ответ на заданный вопрос. Использую Scanner. Ввод работает, но только со 2 раза. Подскажите пожалуйста как исправить.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.IOException;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        Scanner answerReader = new Scanner(System.in);
        System.out.println("Greetings! Welcome to the PizzaPlace. My name is PizzaBot 3000.\n" +
                "Are you ready to order?\n\n(TYPE "y" FOR YES, "n" FOR NO, "?" OR "help" FOR HELP)\n");
 
        answerReader.next();
        if (answerReader.hasNext("n")) {
 
            System.out.println("I understand. Please visit PizzaPlace again when you ready.");
            throw new Error("Client rejected service");
        }
    }
}
И в итоге в консоли:


Greetings! Welcome to the PizzaPlace. My name is PizzaBot 3000.
Are you ready to order?

(TYPE "y" FOR YES, "n" FOR NO, "?" OR "help" FOR HELP)

n
n
Exception in thread "main" java.lang.Error: Client rejected service
at com.company.Main.main(Main.java:17)
at sun.reflect.NativeMethodAccessorImpl.inv oke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.inv oke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl .invoke(DelegatingMethodAccessorImpl.jav a:43)
at java.lang.reflect.Method.invoke(Method.j ava:497)
at com.intellij.rt.execution.application.Ap pMain.main(AppMain.java:140)
I understand. Please visit PizzaPlace again when you ready.

Process finished with exit code 1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.11.2015, 23:34
Ответы с готовыми решениями:

Ввод строк с помощью Scanner
Требуется , чтобы с клавиатуры была введена следующая последовательность 4 4 1 2 -10 3 1 3 1 -10 2 4 -10 -1 3 4 0 -3 ...

Ввод и вывод в файл(Scanner / PrintWriter)
Scanner in = new Scanner(Paths.get("1.txt")); PrintWriter out = new PrintWriter("1.txt"); Как с помощью in вывести текст из файла в...

Ввод массива строк через Scanner
Доброго времени суток. Не могу понять почему в консоль можно ввести только на 1 меньше, чем переменная n. Если n=1, то,соответственно,...

10
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
02.11.2015, 23:52
PchWolf, у тебя неправильное понимание того, что делает next и hasNext. Почитай-ка повнимательней документацию.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public static void main(String[] args) {
        Scanner answerReader = new Scanner(System.in);
        System.out.println("Greetings! Welcome to the PizzaPlace. My name is PizzaBot 3000.\n" +
                "Are you ready to order?\n\n(TYPE "y" FOR YES, "n" FOR NO, "?" OR "help" FOR HELP)\n");
 
        String answer = answerReader.next();
        switch(answer) {
            case "n":
                System.out.println("I understand. Please visit PizzaPlace again when you ready.");
                throw new Error("Client rejected service");
            case "y":
                System.out.println("I understand. Yes.");
                break;
            case "help":;
            case "?":
                System.out.println("I understand. I cannot help you.");
                break;
            default: 
                System.out.println("Incorrect input.");
        }
    }
1
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
03.11.2015, 00:14
Попробуйте вот так.
Java
1
2
3
4
5
6
...
System.out.println("Greetings! Welcome to the PizzaPlace. My name is PizzaBot 3000.\n" + "Are you ready to order?\n\n(TYPE "y" FOR YES, "n" FOR NO, "?" OR "help" FOR HELP)\n");
 
        answerReader.toString();
        if (answerReader.hasNext("n")) 
...
1
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.11.2015, 00:16
Цитата Сообщение от HOBATOP Посмотреть сообщение
answerReader.toString();
Зачем это нужно? В данном случае этот вызов бесполезен и его можно просто убрать. Результат будет тот же.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
03.11.2015, 00:33
Цитата Сообщение от Velesthau Посмотреть сообщение
Зачем это нужно
Насколько я понял основная проблема была в том, что программа требовала дважды вводить ответ (y - enter -y - enter) или другие варианты. C .toString() проблемы нет - один ответ, один enter... И да, я, на сегодняшний день, сугубый дилетант, смотрю на таких же как и сам: бултыхаемся в собственном соку. Профи не понимают, как можно путать метод с конструктором, а новичок поражается как их отличить друг от друга метод-конструктор...
Извините, возможно немного в сторону от темы... Но вот реально, я про себя, нет у меня в окружении программистов, не у кого ни спросить, ни посоветоваться. А мне интересно, вот и самообучаюсь. Методом проб и ошибок... :-) Ещё раз извините, отвлёк своей болтовнёй. :-)
0
 Аватар для PchWolf
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 5
03.11.2015, 00:34  [ТС]
Теперь работает. А как сделать так, чтобы после ввода "?" или "help" и печати справки можно было повторить ввод?
Например сначала написать "help", а затем "y" и продолжить программу?
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.11.2015, 00:45
Цитата Сообщение от HOBATOP Посмотреть сообщение
C .toString() проблемы нет - один ответ, один enter...
toString() здесь ни на что влиять не должен. Автору просто нужно было прочитать про next() и понять, что в его оригинальном коде он не нужен. А менять его на toString() вообще смысла не имеет.

Добавлено через 8 минут
Цитата Сообщение от PchWolf Посмотреть сообщение
Теперь работает. А как сделать так, чтобы после ввода "?" или "help" и печати справки можно было повторить ввод?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    public static void main(String[] args) {
        Scanner answerReader = new Scanner(System.in);
        System.out.println("Greetings! Welcome to the PizzaPlace. My name is PizzaBot 3000.\n" +
                "Are you ready to order?\n\n(TYPE "y" FOR YES, "n" FOR NO, "?" OR "help" FOR HELP)\n");
 
        String answer;
        do
        {
            answer = answerReader.next();
            switch(answer) {
                case "n":
                    System.out.println("I understand. Please visit PizzaPlace again when you ready.");
                    throw new Error("Client rejected service");
                case "y":
                    System.out.println("Processing Yes.");
                    break;
                case "help":;
                case "?":
                    System.out.println("I understand. I cannot help you.");
                    break;
                default: 
                    System.out.println("Incorrect input.");
            }
        } while(answer.compareTo("y") != 0);
        answerReader.close();
    }
1
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
03.11.2015, 00:48
Цитата Сообщение от Velesthau Посмотреть сообщение
Автору просто нужно было прочитать про next()
Ok! Я тоже поищу информацию по правомочности применения next() ибо уже сталкивался, при попытке его использования, с удвоением ввода... Спасибо.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.11.2015, 00:56
Цитата Сообщение от HOBATOP Посмотреть сообщение
Я тоже поищу информацию по правомочности применения next() ибо уже сталкивался, при попытке его использования, с удвоением ввода...
Ох, боженьки, с чем ты сталкивался Там нет никакого удвоения ввода из-за next. next тут не при чем Просто так написан код. Что идут подряд два вызова, которые обращаются к тому, что введено в консоли - первый next ждет ввода и его читает, второй - hasNext ждет ввода и проверяет его по шаблону.

Добавлено через 2 минуты

Не по теме:

Ответ с ошибкой еще и лучший. Что за бред :D мир сошел с ума.

0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
03.11.2015, 01:05
Говорю же: я зелёный, как три рубля (если кто-то помнит их) в Java. Порю косяки как Бог на душу положит. :-) Но, блин, увлекательно... Будет какой-то выхлоп из этого или нет, пока не знаю.
Уж не расстраивайтесь, пожалуйста, из-за наивности новичка. :-) Я Хорстмана ещё до "has... не дочитал, только добрался до середины пятой главы...

Добавлено через 2 минуты
Цитата Сообщение от Velesthau Посмотреть сообщение
Что за бред мир сошел с ума.
Бывает... :-D
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.11.2015, 01:08
Цитата Сообщение от HOBATOP Посмотреть сообщение
правомочности применения next()
В случаях обработки пользовательского ввода, как раз-таки лучше применять next, так как hasNext оставит тебе в потоке все, что там лежит, и если ты проверил, что hasNext("help") там есть, вывел помощь, и снова решил проверить ввод, то получишь облом, потому что там все тот же самый help. Никаких y, n уже не обработается, потому что ты предыдущий ввод не считал, а только его по паттерну проверил. Поэтому, принимая ввод от пользователя, зеленым нечего выеживаться, а надо спокойно читать его в строку через next* методы и работать уже со строкой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.11.2015, 01:08
Помогаю со студенческими работами здесь

Заполнить массив String[] вводом с клавиатуры (Scanner)
Здравствуйте, Форумчане! Помогите, пожалуйста, решить насущный вопрос: Заполнить обычный массив String (именно его) Вводом с...

Ввод с клавиатуры - требовать у пользователя ввод, пока он не будет корректным
Поискал в интернете и тут - не могу найти ответ на свой вопрос. Основная проблема - фильтровать введённые данные пользователя (введённые...

Работа со Scanner. Не находит совпадения строки, вводимой с клавиатуры и строки из программы - хотя значения вроде одинаковы
Почему не находит совпадения? Scanner input= new Scanner(System.in); String nm = input.next(); String s = "kuku"; ...

Scanner в Java (scanner.nextLine()
Добрые люди, есть код, который при одном itemName = scanner.nextLine(); не останавливается чтобы я мог вписать имя - сразу кидает на...

Ввод с клавиатуры
Как ввести с клавиатуры 9 двузначных чисел, чтоб перевести их с 8 системы в 10? Это делать нужно через массивы, вот задание: Ввести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru