ArrayList按字母顺序排列(java)

时间:2014-11-16 00:28:03

标签: java arraylist

我正在尝试编写一个方法,在输入字符串时按字母顺序将每个字符串放在字符串数组列表中。例如,如果我输入4作为所需数组列表的大小并输入Anne,Bill,Aran,Carol,则该方法应该打印Anne,Aran,Bill,Carol。但是,现在它只提示我3个字符串并且不打印任何内容。相反,它会在线程" main"中出现此错误"异常。 java.lang.IndexOutOfBoundsException:Index:2,Size: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 个答案:

答案 0 :(得分:2)

对于大小为2的列表(例如["a", "b"]),您在j中从0到1遍历但是j + 1表示您将尝试访问{{1}这肯定是出界的

要么升级到2,要么只使用Collections.sort(yourArrayList)

答案 1 :(得分:0)

首先构建你的数组

使用比较器进行第二次迭代:

class LexicographicComparator implements Comparator<String> {
    @Override
    public int compare(String a, String b) {
        return a.compareToIgnoreCase(b);
    }
}



//... your code
 Collections.sort(list, new LexicographicComparator());