按ArrayList <string> </string>的降序打印元素

时间:2014-11-24 18:10:10

标签: java string arraylist indexoutofboundsexception

此处的代码接受来自用户的5个字符串,我希望它们从最后一个到第一个保存,即第一个输入到最后一个位置,最后一个输入到ArrayList中的第一个位置。据我所知,我应该在循环之前定义ArrayList的大小,但我可能错了。

例如: - 如果用户输入String0String1String2String3String4,则应将其保存为ArrayList的这种形式[String4,String3,String2,String1,String0]

我这样做的方式和  我收到错误了  第一次用户输入后Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 0

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Example
{
public static void main(String[] args) throws Exception
{

    ArrayList<String> list = new ArrayList<String>();
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    for (int i=4;i>=0;i--){
        list.add(i,reader.readLine());
    }
    for (String aList : list)
    {
        System.out.println(aList);
    }

}
}

非常感谢。

3 个答案:

答案 0 :(得分:0)

您无需定义arraylist的大小。数组列表是一个动态数组,其大小可以动态更改。

list.add(0,reader.readLine());

for (int i=0;i<=4;i++){
    list.add(0,reader.readLine());
}

这将在位置0处添加每个下一个元素,将所有内容移回1。 当arraylist的大小为0时,你试图在第4位插入。

答案 1 :(得分:0)

当您阅读第一行时,ArrayList中没有任何内容,但您正在尝试add索引4处的行,该行尚不存在,导致异常。 add method javadocs (taking an index)州:

  

<强>抛出:

     

IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; size())

如果要在所有其他元素之前添加它,请始终将其添加到索引0

list.add(0,reader.readLine());

答案 2 :(得分:0)

将字符串添加到列表后,您可以按降序对列表进行排序。

<强>方法-1: 使用Collections.reverseOrder()方法和Collections.sort()以按以下顺序对列表进行排序

Collections.sort(arraylist, Collections.reverseOrder());

方法-2:您可以先按升序对列表进行排序然后将其反转

Collections.sort(list);
Collections.reverse(list);