проблема с java.util.NoSuchElementException: строка не найдена - PullRequest
0 голосов
/ 22 октября 2018

Когда я использую Scanner для получения символа в java, компилятор выдает:

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
    at ShoppingCartManager.getChar(ShoppingCartManager.java:37)
    at ShoppingCartManager.printMenu(ShoppingCartManager.java:56)
    at ShoppingCartManager.main(ShoppingCartManager.java:30)

Вот часть кода, где выбрасывается исключение

private static final Scanner scan = new Scanner(System.in);

public static void main(String[] args) {
    Scanner scnr = new Scanner (System.in);
    System.out.println("Enter Customer's Name:");
    String name = scnr.nextLine();
    System.out.println("Enter Today's Date:");
    String date = scnr.nextLine();
    System.out.println();

    ShoppingCart cart = new ShoppingCart(name, date);

    System.out.println("Customer Name: " + name);
    System.out.println("Today's Date: " + date + "\n");

    printMenu(cart);
    scan.close();

}

private static char getChar () {
    char option;

    while (true) {
        try {
           option = scan.next().charAt(0);
           break;
        } catch (Exception exc) {
           continue;
        }
    }
    return option;
}

public static void printMenu(ShoppingCart cart) {

    while(true) {
        System.out.println("MENU");
        System.out.println("g - Add Guitar to cart");
        System.out.println("c - Add Candy Bar to cart");
        System.out.println("s - Add Shoes to cart");
        System.out.println("d - Remove item from cart");
        System.out.println("n - Change item quantity");
        System.out.println("i - Output items' descriptions");
        System.out.println("o - Output shopping cart");
        System.out.println("q - Quit" + "\n");
        System.out.println("Choose an option:");

        char option = getChar();

        if (option == 'q') {
            return;

        } else if (option == 'g') {
            File guitar;
            Scanner iss;
            try {
                guitar = new File("Guitar.txt");
                iss = new Scanner(guitar);
                ItemToPurchase item = new ItemToPurchase();
                item.setName(iss.nextLine());
                item.setDescription(iss.nextLine());
                item.setPrice(Integer.parseInt(iss.nextLine()));
                item.setQuantity(Integer.parseInt(iss.nextLine()));
                cart.addItem(item);
                System.out.println("ADDED GUITAR TO CART");
                iss.close();
            } catch (IOException excp) {
                System.out.print(excp);
            }

        } else if (option == 'c') {
            File candyBar;
            Scanner iss;
            try {
                candyBar = new File("Candy_Bar.txt");
                iss = new Scanner(candyBar);
                ItemToPurchase item = new ItemToPurchase();
                item.setName(iss.nextLine());
                item.setDescription(iss.nextLine());
                item.setPrice(Integer.parseInt(iss.nextLine()));
                item.setQuantity(Integer.parseInt(iss.nextLine()));
                cart.addItem(item);
                System.out.println("ADDED CANDY BAR TO CART");
                iss.close();
            } catch (IOException excp) {
                System.out.print(excp);
            }

        } else if (option == 's') {
            File shoes;
            Scanner iss;
            try {
                shoes = new File("Shoes.txt");
                iss = new Scanner(shoes);
                ItemToPurchase item = new ItemToPurchase();
                item.setName(iss.nextLine());
                item.setDescription(iss.nextLine());
                item.setPrice(Integer.parseInt(iss.nextLine()));
                item.setQuantity(Integer.parseInt(iss.nextLine()));
                cart.addItem(item);
                System.out.println("ADDED SHOES TO CART");
                iss.close();
            } catch (IOException excp) {
                System.out.print(excp);
            }

        } else if (option == 'd') {

            System.out.println("REMOVE ITEM FROM CART");
            System.out.println("Enter name of item to remove");
            String item = scan.nextLine();
            cart.removeItem(item);

        } else if (option == 'n') {

            System.out.println("CHANGE ITEM QUANTITY");
            System.out.println("Enter the item name");
            String name = scan.nextLine();
            System.out.println("Enter the new quantity");
            int newQuantity = scan.nextInt();

            for (int i = 0; i < cart.cartItems.size(); i++) {
                if (cart.cartItems.get(i).getName().equals(name)) {
                    cart.cartItems.get(i).setQuantity(newQuantity);
                }

            }

        } else if (option == 'i') {

            System.out.println("OUTPUT ITEMS' DESCRIPTIONS");
            cart.printDescriptions();

        } else if (option == 'o') {

            System.out.println("OUTPUT SHOPPING CART");
            cart.printTotal();
        } else {
            continue;
        }

    }
}

}

что мне делать?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

со сканером, вам нужно проверить, есть ли следующая строка с hasNext (), чтобы цикл стал

while(sc.hasNext()){
str=sc.next().charAt(0);
//...

}

Что-то подобное должно работать. java.util.NoSuchElementException: строка не найдена

0 голосов
/ 22 октября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...