Устранение исключений несоответствия, появляющихся только в одном компиляторе
Это для онлайн-задания. Цель состоит в том, чтобы принять два ввода (в этом коде переменные 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);
Опять же, это зависит от способа работы онлайн-сканера.