Ошибка исключения Java, вызывающая внезапную остановку кода - PullRequest
0 голосов
/ 26 октября 2019

Я работал над проектом для класса, и все работает нормально, пока код, который нам дал профессор, который не предложит пользователю «сделать» код, если он того пожелает, выходит с этой ошибкой, и я откровенно запутался.

Я попытался изменить sc.nextLine на .hasNextLine, как я видел в других сообщениях, но он выдал ошибку, утверждающую, что он должен быть логическим, а затем говорит, что не может использовать следующийКод doOver.trim () для логического значения.

final static String TITLE = "ISBN-13 Generator!";
final static String CONTINUE_PROMPT = "\nDo this again? [y/n] ";
static Scanner input = new Scanner(System.in);

private static void process(Scanner sc, String args[]) {

    boolean numberChecker;
    String isbn;
    do {
        System.out.println("\nEnter the first 12 digits of an ISBN-13: ");
        isbn = input.nextLine();
        input.close();
        isbn = isbn.trim();
        numberChecker = true;
        int s = 0;

        do {
            numberChecker = numberChecker && Character.isDigit(isbn.charAt(s));
            s++;
        } while (s < isbn.length() || numberChecker == false);
    } while (isbn.length() != 12 & numberChecker == false);

    int sum = 0;
    int s = 0;
    do {
        if (s % 2 == 0) {
            sum = sum + isbn.charAt(s) - 48;
        } else {
            sum = sum + 3 * (isbn.charAt(s) - 48);
        }
        s++;
    } while (s < 12);
    {
        sum = 10 - (sum % 10);
        if (sum == 10)
            sum = 0;
    }
    System.out.println("Your ISBN is " + isbn + sum);
}

private static boolean doThisAgain(Scanner sc, String prompt) {
    System.out.print(prompt);
    String doOver = sc.nextLine();
    return doOver.trim().equalsIgnoreCase("Y");
}

public static void main(String args[]) {
    System.out.println("Welcome to " + TITLE);
    Scanner sc = new Scanner(System.in);
    do {
        process(sc, args);
    } while (doThisAgain(sc, CONTINUE_PROMPT));
    sc.close();
    System.out.println("Thank you for using the " + TITLE);

}

На нем должно отображаться «Do this again? [y / n]», когда вы вводите «y» для начала процесса и вводите «n» дляостановите и распечатайте систему («Спасибо за использование» + TITLE)

1 Ответ

0 голосов
/ 26 октября 2019

Это происходит потому, что вы уже закрыли экземпляр сканера, используя строку input.close ();

Просто закомментируйте или удалите input.close (); и ваша программа будет работать как положено.

        System.out.println("\nEnter the first 12 digits of an ISBN-13: ");
        isbn = input.nextLine();
       //input.close();

Дайте мне знать, если это поможет! :)

...