Как вводить данные с помощью сканера в java?

Я принимаю ввод с помощью java Scanner, написав следующий код:

import java.util.Scanner;
class main{
    public static void main(String args[]){
        Scanner scan=new Scanner(System.in);
        System.out.println("Enter number");
        int i=scan.nextInt();
    }
}

но выше код выдает следующее исключение:

Enter number
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at main.main(main.java:7)
Tool completed with exit code 1

Что вы вводили?

Henry 25.02.2019 06:35

В этом фрагменте кода нет ничего плохого ... можете ли вы опубликовать свой полный код и любые проверенные вами входные данные?

Rohan 25.02.2019 06:35

Я специально искал это исключение и увидел этот пост, в котором говорится о закрытии предыдущего сканера: stackoverflow.com/questions/13042008/… — применимо ли это в вашем случае? Создали ли вы в том же запуске вашей программы еще один объект Scanner и закрыли его? Этот пост предполагает, что это способ решить проблему, которую вы видите. Если что-то в более раннем коде не приводило среду в забавное состояние, нет никаких причин, по которым код, который вы нам показываете, должен генерировать это исключение.

CryptoFool 25.02.2019 06:39

Как вы запускаете эту программу? В командной строке (какая ОС)? В среде IDE (какой именно)? В какой-то другой среде? Я гуглил, и все, что я вижу, дает какое-то представление о том, что System.in находится в состоянии, когда он не может больше вводить данные, и именно это приводит к этой ошибке. Если это единственный код, который вы выполняете (это происходит в строке 7 вашей программы, так что, возможно, так оно и есть), то это должно быть что-то связанное со средой, в которой вы выполняете код.

CryptoFool 25.02.2019 06:54

[stackoverflow.com/questions/34508824/…stackoverflow.com/questions/34508824/… См. ссылку выше.

karan shah 25.02.2019 07:09

сканер не останавливается для ввода. он просто показывает следующую информацию:

iram 26.02.2019 07:05

Введите номер Exception в потоке "main" java.util.NoSuchElementException в java.base/java.util.Scanner.throwFor(Scanner.java:937) в java.base/java.util.Scanner.next(Scanner.java:1594) ) в java.base/java.util.Scanner.nextInt(Scanner.java:2258) в java.base/java.util.Scanner.nextInt(Scanner.java:2212) в main.main(main.java:7) Инструмент завершен с кодом выхода 1

iram 26.02.2019 07:05

Я запускаю этот код в Texpad на Windows 7.

iram 26.02.2019 07:10

Вы действительно имеете в виду, что используете Textpad или просто редактируете его там? Если вы действительно запускаете его оттуда, пробовали ли вы запускать его в обычной командной строке? У вас когда-нибудь сканер работал без этой ошибки? Мне кажется, что это что-то о вашей среде, а не о вашем коде.

CryptoFool 26.02.2019 07:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
10
1 723
3

Ответы 3

Вы почти там. Одно примечание: вы ожидаете значение инт, и если пользователь вводит, например. string, то вы получите исключение.

public static int askIntNumber(Scanner scan) {
    while(true) {
        try {
            System.out.print("Enter number: ");
            return scan.nextInt();
        } catch (Exception e) {
            System.err.println("This is not an integer number");
        }
}
import java.util.Scanner; 
class Input { 

public static void main(String[] args) {        

Scanner input = new Scanner(System.in);                System.out.print("Enter an integer: ");  
int number = input.nextInt();   
System.out.println("You entered " + number);
 }
}

Попробуйте этот код.....

Здесь создается входной объект класса Scanner. Затем метод nextInt() класса Scanner используется для получения целочисленного ввода от пользователя.

Чтобы получить от пользователя ввод long, float, double и String, вы можете использовать методы nextLong(), nextFloat(), nextDouble() и next() соответственно.

Вы должны попробовать это:

import java.util.Scanner;
public class main {
    public static void main(String[]args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter number: ");
        int i=sc.nextInt();
    }
}

Блок кода sc.nextInt сканирует весь ввод, а затем запускает его. Это должно решить вашу проблему.

Другие вопросы по теме