Как избежать StringIndexOutOfBoundsException, когда char не имеет значения?
Извините, если название не имело смысла, но я не знал, как его сформулировать.
проблема:
Я делаю множественный выбор викторины, которая получает либо a, b, c или d от пользователя. Это не проблема, если они делают, как им говорят, однако, если они ничего не вводят и просто нажмите enter, я получаю StringIndexOutOfBoundsException. Я понимаю, почему это происходит, но я новичок в Java и не могу придумать способ, чтобы исправить это.
что у меня так далеко:
System.out.println("Enter the Answer.");
response = input.nextLine().charAt(0);
if(response == 'a')
{
System.out.println("Correct");
}
else if(response == 'b' || response == 'c' || response == 'd')
{
System.out.println("Wrong");
}
else
{
System.out.println("Invalid");
}
конечно, программа никогда не пройдет вторую строку кода, если пользователь ничего не вводит, потому что вы не можете взять значение charAt(0) пустой строки. То, что я ищу, - это то, что проверит, является ли ответ нулевым, и если да, спросите, вернитесь и снова задайте вопрос пользователю.
заранее спасибо за любые ответы.
5 ответов
вы можете использовать цикл do-while. Просто замените
response = input.nextLine().charAt(0);
С
String line;
do {
line = input.nextLine();
} while (line.length() < 1);
response = line.charAt(0);
это будет продолжать вызывать input.nextLine()
столько раз, сколько пользователь вводит пустую строку, но как только они вводят непустую строку, она будет продолжаться и устанавливать response
равно первому символу этой непустой строки. Если вы хотите повторно запросить у пользователя ответ, вы можете добавить приглашение во внутреннюю часть цикла. Если вы хотите проверить, что пользователь ввел букву a - d, вы можете также добавьте эту логику в условие цикла.
либо обработать исключение(StringIndexOutOfBoundsException
) или сломать это утверждение
response = input.nextLine().charAt(0);
as
String line = input.nextLine();
if(line.length()>0){
response = line.charAt(0);
}
Обработка Исключений:
try{
response = input.nextLine().charAt(0);
}catch(StringIndexOutOfBoundsException siobe){
System.out.println("invalid input");
}
просто:
- получить ввод изначально в виде строки и поместить его во временную строковую переменную.
- затем проверьте длину строки.
- затем, если > 0 извлеките первый символ и используйте его.
кроме того, @HovercraftFullOfEels ' (совершенно правильный) ответ, я хотел бы отметить, что вы можете "поймать" эти исключения. Например:
try {
response = input.nextLine().charAt(0);
} catch (StringIndexOutOfBoundsException e) {
System.out.println("You didn't enter a valid input!");
// or do anything else to hander invalid input
}
т. е. если StringIndexOutOfBoundsException
встречается при выполнении try
-блок, код catch
-блок будет выполнен. Вы можете узнать больше о ловле и обработке исключений здесь.
StringIndexOutofBoundException также произойдет в следующей ситуации.
- поиск строки, которая недоступна
-
соответствует строке, которая недоступна
например:
List ans=новый ArrayList ();
temp= "and";
String arr []={"android","jellybean","kitkat","ax"};
for (int index=0; index если(темп.length () если(темп.equlsIgnoreCase ((String)arr[`index].подпоследовательность (0, temp.length ())));
ответ.add (arr[index]);
следующий код необходим, чтобы избежать indexoutofboundexception
if(temp.length ()
потому что здесь мы проверяем, что длина строки src равна или больше temp . если длина строки src меньше, чем будет через "arrayindexoutof boundexception"