Как вернуть более 1 значения одним и тем же методом сканера? - PullRequest
0 голосов
/ 19 мая 2018

Во-первых, я прошу прощения, если этот вопрос был задан ранее, но я не смог найти решение для этой конкретной проблемы.

Я пытаюсь вернуть два значения с помощью пользовательского ввода, но я получаю эти ошибкивот мой код:

import java.util.Scanner;

public class statistic{
    public static int getInput(){
        Scanner number = new Scanner(System.in);
        System.out.print("Integer value: ");
        int n = number.nextInt();
        number.close();
        return n;
    }

    public static void main(String[] args){
        int a = statistic.getInput();
        int b = statistic.getInput();

Вот ошибка:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at statistic.getInput(statistic.java:12)
    at statistic.main(statistic.java:19)

Возвращает пользовательский ввод только для первого вызова (int a), и я получаю эти сообщения об ошибках при любомпозвони дальше.

1 Ответ

0 голосов
/ 19 мая 2018

С java.util.Scanner :

public void close()

Закрывает этот сканер.

Если этот сканер еще не был закрыт, то если его базовыйreadable также реализует интерфейс Closeable, после чего будет вызываться метод close читаемого объекта.Если этот сканер уже закрыт, то вызов этого метода не будет иметь никакого эффекта.

Попытка выполнить операции поиска после закрытия сканера приведет к исключению IllegalStateException.

Поэтому, когда высделайте number.close(), вы не просто закрываете экземпляр сканера, который только что сделали;вы также закрываете System.in, так что вы больше никогда не сможете использовать этот конкретный поток.Так что просто не делайте number.close() и все будет в порядке.System.in автоматически закрывается ОС в конце выполнения, так что вам не нужно об этом беспокоиться.

...