Как исправить исключение в потоке "main" java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: 0 - PullRequest
0 голосов
/ 19 июня 2019

Я делаю преобразователь температуры, и я столкнулся со следующей проблемой:

Хотите выполнить другое преобразование?(Да / Нет)

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:658)
    at Main.main(Main.java:79)
exit status 1

Вы можете проверить полный код здесь https://repl.it/@KyrillHuet/Temperature-Converter

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

do{
  do{//New coversion?
    System.out.println();
    System.out.println("Would you like to make another conversion ? (Y/N)");

    response = sc.nextLine().charAt(0);
  } while (response != 'Y' & response != 'N'); // Filtering other awnsers than Y or N.

} while (response == 'Y');

Я только начал изучать Java, и когда я посмотрел и проверил свою книгу, но все, кажется, хорошо.Помощь будет принята с благодарностью.=)

Ответы [ 3 ]

0 голосов
/ 19 июня 2019

Я почти уверен, что перед тем, как использовать его, нужно проверить ноль sc или sc.nextline.Эти составные цепочки команд могут привести к неприятностям, если вы не уверены, что они не будут нулевыми.

0 голосов
/ 19 июня 2019

Я попробовал код в ссылке, которую вы предоставили.Я не могу сказать, почему он выдает эту ошибку, используя response = sc.nextLine().charAt(0);.Однако, если я использую response = sc.next().charAt(0);, все работает хорошо.Поэтому я предлагаю вам использовать response = sc.next().charAt(0);.Если кто-то может объяснить, почему это так, то он может это сделать.

0 голосов
/ 19 июня 2019

Небольшая коррекция в вашем коде будет работать. Следующая вместо следующей строки, так как курсор уже находится в той же строке

do{
  do{//New coversion?
    System.out.println();
    System.out.println("Would you like to make another conversion ? (Y/N)");

    response = sc.next().charAt(0);
  } while (response != 'Y' & response != 'N'); // Filtering other awnsers than Y or N.

} whil

[обновлено]

В опубликованном исходном выпуске есть следующая строка в ответе. При попытке доступа к Char в позиции 0 выбрасывается индекс строки вне диапазона.

Проблема здесь в том, что разница между next () и nextLine ()

next () читает строку перед пробелом. он не может ничего прочитать после получения первого пробела, а nextLine () читает всю строку

В примере, поскольку nextLine () используется, указатель попытается найти Char в нулевой позиции на следующей строке, которая не существует

, поэтому, сохраняя это как next (), вы получите содержимое в той же строке.

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