Задача состоит в том, чтобы найти и напечатать подстроку наибольшей длины из одинаковых символов. Выдает ошибку, не могу понять, почему происходит выход за пределы массива во втором цикле. Код::
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++;
}
}
}
}
}
}
Я мельком пробежался по коду. Вероятно, что в этой строке:
(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++) {
Но это не точный ответ)
В цикле есть строка q++ А в условии цикла и так есть q++ Вот в момент прохода по строке и получается что код пытается обратиться к символу которого уже нет в самой строке.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости