Устранение исключений несоответствия, появляющихся только в одном компиляторе

Это для онлайн-задания. Цель состоит в том, чтобы принять два ввода (в этом коде переменные x и y) несколько раз, а затем вывести наибольшее и наименьшее значение каждой переменной. Вот код:

import java.io.*;
import static java.lang.System.*;

import java.util.Scanner;
import java.lang.Math;


class Lesson_20_Activity_One{

     public static void main (String str[]) throws IOException {
          Scanner scan = new Scanner(System.in);
          double x; //the latitude input
          double y; //the longitude input
          double n = -90; //the maximum north value
          double e = -180; //the maximum east value
          double s = 90; //the maximum south value
          double w = 180; //the maximum west value
          int escape = 1; //the value that dictates when it's time to exit the while loop
          while (escape == 1) {
          System.out.println("Please enter the latitude:");
          x = scan.nextDouble();
          System.out.println("Please enter the longitude:");
          y = scan.nextDouble();
          if ((x>n) && (x<=90))
              n = x;
          if ((x<s) && (x>=-90))
              s = x;
          if ((y>e) && (y<=180))
              e = y;
          if ((y<w) && (y>=-180))
              w = y;
          if ((x>90)||(x<-90)||(y>180)||(y<-180))
              System.out.println("Incorrect Latitude or Longitude");
          System.out.println("Would you like to enter another location?");
          escape = scan.nextInt();
          }
          System.out.println("Farthest North: " + n);
          System.out.println("Farthest South: " + s);
          System.out.println("Farthest East: " + e);
          System.out.println("Farthest West: " + w);
     }

}

Этот код работает точно так, как задумано на моем личном компиляторе, Eclipse. Однако при запуске этой же программы на онлайн-компиляторе курса меня встречают следующие ошибки:

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:322)
    at Ideone.assertRegex(Main.java:85)
    at Ideone.assertRegex(Main.java:76)
    at Ideone.test(Main.java:40)
    at Ideone.main(Main.java:29)

Что я могу сделать, чтобы решить эти ошибки? Кажется, это проблема с моим сканером, но я не знаю, как это исправить.

2 ответа

Трассировка ошибки, кажется, указывает на то, что InputMismatchException брошен когда scan.nextInt() называется.

После вашей печати System.out.println("Would you like to enter another location?");, если пользователь вводит что-то кроме целого числа, scan.nextInt() выбросит исключение. Даже если вы читаете вводимые пользователем данные в виде строки, предложенной кем-то другим, метод parseInt в escape = Integer.parseInt(scan.nextLine()) выдаст ошибку, потому что строка не может быть действительным целым числом.

Я предлагаю добавить блок try-catch следующим образом: scan.nextInt() вызовите, чтобы ваша программа не вылетала, когда пользователь вводит что-то отличное от действительного целого числа (например, число 8.238).

boolean inputValid = false;
System.out.println("Would you like to enter another location?");
while (!inputValid) {
    try {
        escape = scan.nextInt();
        inputValid = true;
    } catch (InputMismatchException e) {
        inputValid = false;
        System.out.println("Please enter a valid Integer");
    }
}

Этот код будет продолжать запрашивать пользователя, пока пользователь не введет правильное целое число.

Это может быть из-за того, что реализация nextInt() в онлайн-сканере отличается и вызывает проблемы.

Возможно, попытка проанализировать входные данные как строку и как double / int будет работать:

Scanner scan = new Scanner(System.in);
double x; // the latitude input
double y; // the longitude input
double n = -90; // the maximum north value
double e = -180; // the maximum east value
double s = 90; // the maximum south value
double w = 180; // the maximum west value
int escape = 1; // the value that dictates when it's time to exit the
// while loop
while (escape == 1) {
    System.out.println("Please enter the latitude:");
    x = Double.parseDouble(scan.nextLine());
    System.out.println("Please enter the longitude:");
    y = Double.parseDouble(scan.nextLine());
    if ((x > n) && (x <= 90))
        n = x;
    if ((x < s) && (x >= -90))
        s = x;
    if ((y > e) && (y <= 180))
        e = y;
    if ((y < w) && (y >= -180))
        w = y;
    if ((x > 90) || (x < -90) || (y > 180) || (y < -180))
        System.out.println("Incorrect Latitude or Longitude");
    System.out.println("Would you like to enter another location?");
    escape = Integer.parseInt(scan.nextLine());
        }
System.out.println("Farthest North: " + n);
System.out.println("Farthest South: " + s);
System.out.println("Farthest East: " + e);
System.out.println("Farthest West: " + w);

Опять же, это зависит от способа работы онлайн-сканера.

Другие вопросы по тегам