Выход за пределы массива Java StringIndexOutOfBoundsException

289
22 сентября 2017, 18:14

Задача состоит в том, чтобы найти и напечатать подстроку наибольшей длины из одинаковых символов. Выдает ошибку, не могу понять, почему происходит выход за пределы массива во втором цикле. Код::

import java.io.*;
import java.util.ArrayList;
import java.lang.String;
import java.util.Scanner;
import java.util.Arrays;
public class Solution {
    public void Substring() {
        System.out.println("Enter string");
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        ArrayList<String> arr = new ArrayList<>(Arrays.asList(str.split(" ")));
        for (int i = 0; i < arr.size(); i++) {
            {
                int number = arr.get(i).length();
                for (int q = 0; q < arr.get(i).length(); q++) {
                    if (arr.get(i).charAt(q) == arr.get(i).charAt(q + 1)) {
                        q++;
                        if (q == number - 1) {
                            System.out.println(arr.get(i));
                        }
                    } else {
                        i++;
                    }
                }
            }
        }
    }
}
Answer 1

Я мельком пробежался по коду. Вероятно, что в этой строке:

(arr.get(i).charAt(q) == arr.get(i).charAt(q + 1))

Допустим мы сделаем line= arr.get(i); по идее line это и есть массив символов, а charAt() достает из массива символ. так вот, что будет, когда дойдет до последнего символа линии ( q=arr.get(i).length? (arr.get(i).charAt(q) == arr.get(i).charAt(q + 1)) у тебя сравнит последний символ с последний +1, а его нету. Поменяй в эту строку

 for (int q = 0; q < arr.get(i).length(); q++) {

на эту

 for (int q = 0; q < arr.get(i).length()-1; q++) {

Но это не точный ответ)

Answer 2

В цикле есть строка q++ А в условии цикла и так есть q++ Вот в момент прохода по строке и получается что код пытается обратиться к символу которого уже нет в самой строке.

READ ALSO
Исключения в @Async методах. Spring

Исключения в @Async методах. Spring

Есть контекст со слушателем

231
Передать переменную из JS (Phonegap 7) в Java (Android 4.4)

Передать переменную из JS (Phonegap 7) в Java (Android 4.4)

Как передать переменную из Phonegap 7 JS в Android Java? Я читал на SO анлгоязычные решения, но многие они либо старые, либо просто не подходят в моём случае

260
JavaFX: Объединение Filechooser и DirectoryChooser

JavaFX: Объединение Filechooser и DirectoryChooser

Мой тул заменяет текст файлов (их название и/или содержимое)Собственно для этих целей мне нужно, как иметь возможность выбирать название...

190
java.lang.IllegalStateException при создании фрагмента в DialogFragment

java.lang.IllegalStateException при создании фрагмента в DialogFragment

При попытке создать фрагмент внутри DialogFragment приложение вылетает, а в стэктрэйсе такое описание проблемы:

228