ошибка выхода индекса за пределы диапазона в массиве символов

#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 -> это приведет к ошибке при возврате инструкции