Код печатает ошибку, хотя я уверен, что все сделал правильно. Что случилось? - PullRequest
1 голос
/ 03 августа 2020

Вот код, о котором у меня есть вопрос:

package project;

import java.util.Scanner;

public class PostOffice {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("User input: ");
        String input = sc.nextLine();
        String[] determineinput = input.split(",");
        String regular = "Regular Postcard";
        String large = "Large Postcard";
        String envelope = "Envelope";
        String largeenvenlope = "Large Envelope";
        String packagee = "Package";
        String largepackage = "Large Package";
        String unmailable = "Unmailable";
        double height = Double.parseDouble(determineinput[0]);
        double length = Double.parseDouble(determineinput[1]);
        double thickness = Double.parseDouble(determineinput[2]);

        if (3.5 < height && height < 4.25) {
            if (3.5 < length && length < 6) {
                if (0.007 < thickness && thickness < 0.016) {
                    System.out.println(regular);
                }
            }
        } else if (4.25 < height && height < 6) {
            if (6 < length && length < 11.5) {
                if (0.007 < thickness && thickness < 0.016) {
                    System.out.println(large);
                }
            }
        } else if (3.5 < height && height < 6.125) {
            if (5 < length && length < 11.5) {
                if (0.25 < thickness && thickness < 0.5) {
                    System.out.println(envelope);
                }
            }
        } else if (6.125 < height && height < 24) {
            if (11 < length && length < 18) {
                if (0.25 < thickness && thickness < 0.5) {
                    System.out.println(largeenvenlope);
                }
            }
        } else if (height < 6.125 || height > 24) {
            if (length < 11 || length > 18) {
                if (thickness < 0.25 || thickness > 0.5) {
                    if ((height * 2 + length * 2) <= 84) {
                        System.out.println(packagee);
                    }
                }
            }
        } else if (height < 6.125 || height > 24) {
            if (length < 11 || length > 18) {
                if (thickness < 0.25 || thickness > 0.5) {
                    if ((height + length) > 84 && (height + length) < 130) {
                        System.out.println(largepackage);
                    }
                }
            }
        }
        if ((height < 3.5 || height > 24)
                && (thickness < 0.07 || thickness > 0.25)
                && (length < 3.5 || length > 18)) {
            System.out.println(unmailable);
        }
        System.out.println("Input doesn't match any result");
    }
} 

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

Exception in thread "main" java.util.NoSuchElementException: No line found 
  at java.util.Scanner.nextLine(Scanner.java:1540)
  at project.PostOffice.main(PostOffice.java:8)

Что не так? Я включил условия для соответствия инициализированным переменным и распечатал эту переменную, когда условия вернут истину. Система печатает «Ввод пользователя:», но под ним появляется сообщение об ошибке. Я избавился от того, что могло стать проблемой, но это не меняется. Я почти уверен, что сделал код довольно ясным и простым для чтения для системы, но она продолжает жаловаться. Я не вижу другого способа решить эту проблему. Это что-то с моими циклами for? Или это что-то еще?

1 Ответ

0 голосов
/ 03 августа 2020

(Извините, это действительно должно быть go в комментариях, но моя репутация еще недостаточно высока для этого).

Я пробовал запустить ваш код на IntelliJ, и, похоже, он работает для меня (я использовал ввод 4, 4, 4. Появляется ли ваша ошибка сразу после печати строки ввода пользователя, или вы можете сначала ввести какие-то цифры? Если последнее, то каков ваш ввод?

Не имеет отношения к вашей проблеме, но может облегчить чтение вашего кода: если имя переменной состоит из нескольких слов, попробуйте использовать верблюжий регистр (используйте первую букву в каждом слове отдельно от первого, например, большой конверт становится большим Конверт Мне очень нравится, что вы не использовали загадочно сокращенные имена :)

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