#java #arrays #char #return
#java #массивы #символ #Возврат
Вопрос:
Пожалуйста, я занимаюсь некоторыми вопросами по Java. Я пытаюсь вернуть неповторяющийся символ в виде целого числа. Я написал свой код, и он работает для некоторых строк, но некоторые выводят ошибку выхода индекса за пределы диапазона. Я не знаю, где я сделал что-то не так, вот мой код:
class Challenge {
static final int n = 256;
static char[] count = new char[n];
String str;
static void charCounter( String str ) {
for(int i = 0; i < str.length(); i ){
count[str.charAt(i)] ;
}
}
public static String firstNonRepeatingLetter( String str ) {
charCounter(str);
int pos = -1, i;
for(i = 0; i < str.length(); i ){
if(count[str.charAt(i)] == 1){
pos = i;
break;
}
}
return Character.toString(str.charAt(pos));
}
}
Комментарии:
1. Можете ли вы предоставить пример ввода, для которого он выдает
index-out-of-range
ошибку?
Ответ №1:
Вы не учли, что произойдет в случае, когда все буквы повторяются, например, в строке «ABBA».
Вы не указали полностью, что метод должен делать в этом случае, но если возврат пустой строки приемлем, вы можете изменить оператор return на:
if (pos < 0) return "";
return Character.toString(str.charAt(pos));
Ответ №2:
if(count[str.charAt(i)] == 1){
pos = i;
break;
}
Если ваша входная строка не удовлетворяет count[str.charAt(i)] == 1
. Тогда значение pos останется -1 -> это приведет к ошибке при возврате инструкции