Java Runtime Ошибка InputMismatchException в программе - PullRequest
0 голосов
/ 31 августа 2018

Когда я запускаю этот код, я получаю этот код в coderunner (приложение, которое представляет код для школьной работы)

    Scanner scan = new Scanner(System.in);

    double maxn = -90;
    double maxs = 90;
    double maxe = 180;
    double maxw = -180;
    double lat = 0;
    double longa = 0;
    int x = 1;

    while (x != 0) {
        System.out.println("Please enter a latitude:");
        lat = scan.nextDouble();
        if (lat >= maxn && lat <= 90)
            maxn = lat;
        if (lat <= maxs && lat >= -90)
            maxs = lat;

        System.out.println("Please enter a longitude:");
        longa = scan.nextDouble();
        if (longa <= maxe && longa >= -180)
            maxe = longa;
        if (longa >= maxw && longa <= 180)
            maxw = longa;

        System.out.println("Would you like to enter another location?");
        x = scan.nextInt();

    }
    System.out.println("Farthest North: " + maxn + "\nFarthest South: " + maxs + "\nFarthest East: " + maxe + "\nFarthest West: " + maxw);

Я получаю следующую ошибку:

    Runtime Error

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
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 Lesson_20_Activity.main(Main.java:315)
at Ideone.assertRegex(Main.java:85)
at Ideone.assertRegex(Main.java:76)
at Ideone.test(Main.java:40)
at Ideone.main(Main.java:29)

Понятия не имею, как работает эта ошибка, так как я новичок в кодировании. Может кто-нибудь объяснить, что это значит и как это исправить?

РЕДАКТИРОВАТЬ: мой ввод

Please enter the latitude: 41.678 Please enter the longitude: 69.938 Would you like to enter another location? 1 Please enter the latitude: 41.755 Please enter the longitude: 69.862 Would you like to enter another location? 1 Please enter the latitude: 41.829 Please enter the longitude: 69.947 Would you like to enter another location? 1 Please enter the latitude: 300 Please enter the longitude: 69.947 Incorrect Latitude or Longitude Please enter the latitude: 41.827 Please enter the longitude: 69.904 Would you like to enter another location? 0 Farthest North: 41.829 Farthest South: 41.678 Farthest East: 69.947 Farthest West: 69.862

Кроме того, я попытался изменить x на двойной и строковый ввод, но безуспешно. Я получил сообщение об ошибке NoSuchElementError и NoSuchLineError (соответственно)

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Обратите внимание, что если вы не хотите разрывать строки, вы должны использовать System.out.print, а затем написать '\ r \ n'.

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

0 голосов
/ 31 августа 2018

После ввода долготы и широты вы задаете вопрос, где вы пытаетесь снова.

x= nextInt()

Здесь вы принимаете int (0, чтобы закрыть цикл while, а не иначе). Если вы введете там строку или двойное значение, это вызовет исключение Inputmismtach. Я попробовал ваш код, и он работает нормально, если эти целые и десятичные числа указаны правильно, как показано ниже.

Please enter a latitude:
12.3
Please enter a longitude:
14.3
Would you like to enter another location?
1
Please enter a latitude:
12.3
Please enter a longitude:
14.5
Would you like to enter another location?
0
Farthest North: 12.3
Farthest South: 12.3
Farthest East: 14.3
Farthest West: 14.5
0 голосов
/ 31 августа 2018

С Javadoc , InputMismatchException выбрасывается, когда:

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

В вашем коде вы звоните scan.nextInt() и scan.nextDouble(). Убедитесь, что вы передаете только действительные значения int и double соответственно каждому из этих вызовов. То есть при вводе двойного значения, когда сканер ожидает значение типа int (scan.nextInt()), выдается указанная выше ошибка.

...