Как прочитать ввод в онлайн-тесте на Java - InputMismatchException - PullRequest
0 голосов
/ 12 марта 2019

Я получил InputMismatchException в Java, когда попытался прочитать следующий ввод.

Ввод

1          // Integer
aaa        // String
IND        // String
1.2        // Double

Мой код был таким:

Scanner in = new Scanner(System.in);

int n = in.nextInt();
String name = in.next();
String place = in.next();
double num = in.nextDouble();

Пожалуйстаскажите мне, как мне обрабатывать последовательные строки.Я думаю, что это терпит неудачу там из-за некоторой \n (новой строки) символьной проблемы.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Может быть, это двойник, который вызывает проблему.Попробуйте использовать запятую (1,2) вместо точки (1.2) при вводе значений

0 голосов
/ 12 марта 2019

У вас может быть параметр, который настраивает странный разделитель. Вы можете получить байты разделителя, набрав:

StringBuilder sb = new StringBuilder();
for (byte b : in.delimiter().toString().getBytes()) {
    sb.append(String.format("%02X ", b));
}
System.out.println(sb);

На моей 64-битной Ubuntu Java 1.8u202 я получаю:

5C 70 7B 6A 61 76 61 57 68 69 74 65 73 70 61 63 65 7D 2B

Если это так, вы можете указать разделитель явно, например,

Scanner in = new Scanner(System.in).useDelimiter("\n");

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

public static void main(String[] args) {

    String delim = "\n";
    String[] values = new String[]{ "1", "aaa", "IND", "1.2" };

    Scanner in = new Scanner(String.join(delim, values));

    int n = in.nextInt();
    String name = in.next();
    String place = in.next();
    double num = in.nextDouble();

    System.out.printf("%d\t%s\t%s\t%f\n", n, name, place, num);
}
...