此处的代码接受来自用户的5个字符串,我希望它们从最后一个到第一个保存,即第一个输入到最后一个位置,最后一个输入到ArrayList中的第一个位置。据我所知,我应该在循环之前定义ArrayList的大小,但我可能错了。
例如: - 如果用户输入String0
,String1
,String2
,String3
,String4
,则应将其保存为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);
}
}
}
非常感谢。
答案 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);