我正在尝试编写一种方法,当输入字符串时,将每个字符串按字母顺序放在字符串数组列表中。例如,如果我输入4作为所需数组列表的大小,然后输入Anne,Bill,Aran,Carol,则该方法应打印Anne,Aran,Bill,Carol。但是,现在它仅提示我输入3个字符串,并且不打印任何内容。而是给出了此错误“线程“主”中的异常java.lang.IndexOutOfBoundsException:索引:2,大小:2。”为什么给我这个错误?
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;
}
最佳答案
对于大小为2的列表(例如["a", "b"]
),您正在j
中从0遍历到1,但是您执行j + 1
,这意味着对于1,您将尝试访问2
,这肯定超出范围
上至< size - 1
或仅使用Collections.sort(yourArrayList)