Я пытаюсь написать метод, который помещает каждую строку в список массива строк в алфавитном порядке по мере ввода строк. Например, если я введу 4 в качестве размера списка желаемых массивов и введите Anne, Bill, Aran, Carol, метод должен напечатать Anne, Aran, Bill, Carol. Однако сейчас он только подсказывает мне 3 строки и ничего не распечатывает. Вместо этого он дает эту ошибку «Исключение в потоке» main «java.lang.IndexOutOfBoundsException: Index: 2, Size: 2." Почему это дает мне эту ошибку?ArrayList в алфавитном порядке (java)
public static ArrayList<String> getOrderedListOfNames()
{
System.out.println ("How big an array?");
int size = sc.nextInt();
ArrayList<String> names= new ArrayList<String>(size);
System.out.println ("Type in a string");
String firstInput= sc.next();
names.add(firstInput);
System.out.println ("Type in a string");
String secInput= sc.next();
if (secInput.compareTo(firstInput)>0)
names.add(secInput);
else
names.add(0,secInput);
if (size>2)
{
for (int i = 2 ; i < size ; i++)
{
System.out.println ("Type in a string");
String input= sc.next();
int entered=0;
for (int j=0; j<names.size(); j++)
{
String name1=names.get(j);
String name2=names.get(j+1);
if (input.compareTo(name1)>0 && input.compareTo(name2)<0)
{
names.add(j+1, input);
entered=1;
j=names.size();
}
}
if (entered==0)
names.add(input);
}
}
return names;
}
Если вы получаете ошибки, тогда всегда предоставляйте полный StackTrace и отметьте строку, которая вызывает это исключение. Проблема заключается в этой строке: 'String name2 = names.get (j + 1);'. 'j' может достигать значения' names.size() - 1', поэтому 'j + 1' будет индексом, который не существует в списке. В этом случае индекс '2'. – Tom