Do - пока l oop с условиями, использующими Char (Java) - PullRequest
1 голос
/ 16 января 2020

Итак, я работаю над проектом энергетического дерева для своего класса компьютерного программирования, я пытался сделать что-то вроде l oop, который спросил пользователя, являются ли они производителем или потребителем и были ли введены какие-либо другие входные данные Я бы начал все сначала. Мой код продолжает получать ошибку

"java.util.NoSuchElementException" on line 45 

, где написано

char Type = ProducerOrConsumer.nextLine().toUpperCase().charAt(0);


        boolean isChoiceValid = false;

        do
        {
            PETCScanner.close();
            Scanner ProducerOrConsumer = new Scanner(System.in);

            System.out.println("Are you a Producer or a Consumer?\\\\n (P = Producer, C = Consumer");
            char Type = ProducerOrConsumer.nextLine().toUpperCase().charAt(0);
            if (Type == 'P' || Type =='C')
            {


            }
            else 
                System.out.println("Sorry try Again");
            {

            }
            String Name = ProducerOrConsumer.nextLine().toUpperCase();

            System.out.println(Name);


        }while(isChoiceValid == (true));
        System.out.println("You're Done!");


    }

Ответы [ 3 ]

1 голос
/ 16 января 2020

Кажется, вы закрываете сканер, который закрывает все подключенные ресурсы . При попытке прочитать снова, у вас нет «такого элемента» для чтения.

Вам нужен только один сканер для каждого приложения, нет необходимости создавать его заново.

Scanner sc = new Scanner(System.in);
boolean isChoiceValid = false;
do {
     System.out.println("Are you a Producer or a Consumer?\\\\n (P = Producer, C = Consumer");
    char type = sc.nextLine().toUpperCase().charAt(0);
    if (type == 'P' || type =='C') {
        boolean isChoiceValid = true;
    } else {
        System.out.println("Sorry try Again");
        isValidChoice = false;  // if you want
        continue;
    }
    if (sc.hasNextLine()) {
        String name = sc.nextLine().toUpperCase();
        System.out.println(name);
    }
} while(!isChoiceValid);
System.out.println("You're Done!");
0 голосов
/ 16 января 2020

После удаления PETCScanner.close(); я запустил ваш код, и я не получаю никаких ошибок. Я получаю это:

Are you a Producer or a Consumer?\\n (P = Producer, C = Consumer
Neither
Sorry try Again
O
O
You're Done!
0 голосов
/ 16 января 2020

Я увидел, что исключение было вызвано из вызова ProducerOrConsumer.nextLine().

Не найдено ни одного элемента как result == null. Вы можете посмотреть более подробно в java.util.Scanner.nextLine()

public String nextLine() {
        ...
        if (result == null)
            throw new NoSuchElementException("No line found");
        ...
        if (result == null)
            throw new NoSuchElementException();
        ...
}

Best,

...