Индекс массива выходит за рамки, когда один символ повторяется сразу после другого (Java)

#java #methods #indexing #out

#java #методы #индексирование #out

Вопрос:

Строка ошибки равна 13. Ошибка заключается в том, что индекс массива не ограничен. http://pastebin.com/L3FtzarH

Метод заключается в поиске символа в строке, и он работает нормально, за исключением случаев, когда рядом с одним и тем же символом есть повторяющиеся символы, например, в слове «Rabbit» выдает ошибку с буквой «b», потому что она дважды и рядом с одной и той же буквой.

Я играю в палача. Я умножаю индекс на на для пробелов. Например: если секретное слово «cat», то в нем появятся 3 символа подчеркивания: «_ _ _ » эта строка подчеркивания состоит из 6 символов, поэтому, если буква A (индекс 1 в мире «cat») Я умножаю на 2, чтобы заполнить нужное место в строке подчеркивания: «_ A _ «

Отредактируйте 1, ваш код:

    public void buscarLetra() {
      chequearif = false;
      string = "";
      letra = letraEscogida.toCharArray();
      System.out.println("la letra pasa a char:"   letra[0]);
      int index = 0;
      for (int i = 0; i < (palabraElegida.length()); i  ) {
         if (palabraElegida.substring(i, i   1).equals(letraEscogida) == true) {
            if (chequearif == true) {
               string = "";
               index = palabraElegida.indexOf(letraEscogida, index   1);
               index *= 2;
               arrayGuiones[index] = letra[0];
               System.out.println("segundo index: "   index);
               index = 0;
            }
            index = palabraElegida.indexOf(letraEscogida);
            index *= 2;
            System.out.println("primer index: "   index);
            arrayGuiones[index] = letra[0];
            for (int j = 0; j < arrayGuiones.length; j  ) {
               string  = arrayGuiones[j]   "";
            }
            lbl_palabra.setText(string);
            chequearif = true;
         }
      }
   }
  

Комментарии:

1. Пожалуйста, разместите свой код здесь, на форуме, а не в ссылке.

2. Кстати: вы делаете это слишком сложным, включая пробелы между символами подчеркивания в свои вычисления. Просто вычислите на основе фактических символов, затем отформатируйте в соответствии с вашими потребностями (например, включите пробелы между всеми символами).

3. Какова точная ошибка? Какой индекс он пытается прочитать?

4. Я не вижу ничего такого сложного, включая пробелы, это просто умножает индекс на 2… но хорошо, что я сделал это, как вы говорите @home, и работает отлично, спасибо.

5. Но я хотел бы понять, почему, когда я включаю пробелы, они выдают ошибку. По моим расчетам, индекс никогда не превышал длину строки… и это ошибка времени выполнения, которая меня выдала.

Ответ №1:

Внутри вашего if (chequearif == true) { блока вы пытаетесь использовать index его в indexOf() вызове. Вы пытаетесь проверить наличие дополнительных вхождений после первого вхождения, на которое, по вашему мнению index , указывает, но вы забыли, что ранее вы умножили индекс на 2. Следовательно, он указывает куда-то за пределы второго вхождения, поэтому indexOf() возвращает значение -1. Вы удваиваете это значение до -2, а затем пытаетесь сказать arrayGuiones[index] , что, очевидно, никогда не будет работать с отрицательным индексом.

Комментарии:

1. Отлично, так что мне нужно сделать, это разделить индекс на 2, чтобы не изменять индекс.