import java.util.ArrayList;
import java.util.Scanner;
public class Arraylistexample {
public static void main(String[] args)
{
ArrayList<String> al=new ArrayList();
System.out.println("Enter how many values you want to enter");
Scanner scr =new Scanner(System.in);
int s=scr.nextInt();
System.out.println("Enter the values");
for(int i=0;i<s;i++)
{
Scanner sc=new Scanner(System.in);
String sr=sc.nextLine();
al.add(sr);
}
al.add(2, "Tom");
al.add(1, "Henry");
al.add(0, "Natalie");
System.out.println("The values you entered are:");
for(String str:al)
{
System.out.println(str);
}
}
}
在上面的代码中,我试图从用户获取值并尝试将其存储在ArrayList中。在用户输入值之后,程序通过移动原始值再次在指定索引处输入更多值。当我通过顺序输入值执行程序时,它没有给我任何错误。但是每当我在上面的过程中尝试这样做时,它就会给我带来错误
Enter how many values you want to enter
2
Enter the values
Harry
Potter
The values you entered are:
Natalie
Harry
Henry
Potter
Tom
而输出应为
Natalie
Henry
Tom
Harry
Potter
我仍然无法弄清楚为什么如果以随机方式输入值,则不进行移位。
答案 0 :(得分:2)
这种情况正在发生,因为您正在添加
al.add(2, "Tom");
al.add(1, "Henry");
al.add(0, "Natalie");
在Tom
处添加2
会产生[Harry, Potter, Tom]
在Henry
处添加1
会产生[Harry,Henry,Potter,Tom]
在Natalie
处添加0
会产生[Natalie, Harry, Henry, Potter, Tom]
如果您希望输出为[Natalie,Henry,Tom,Harry,Potter]
然后您需要将三个add
操作替换为
al.add(0, "Tom");
al.add(0, "Henry");
al.add(0, "Natalie");
希望这有帮助。
答案 1 :(得分:1)
将指定元素插入此列表中的指定位置。将当前位置的元素(如果有)和任何后续元素向右移动(将其添加到其索引中)。 参数: 索引索引,在该索引处插入指定的元素 要插入的元素元素 抛出: java.lang.IndexOutOfBoundsException
这意味着每当您在任何已经退出的索引处输入新值时,将首先获取新值,并向右推送现有值。
例如在你的情况下你输入的是Herry和Potter,后者你输入了第0个指数的Natalie,第一个指数的Herry和第二个指数的tom。
所以输出应该是 娜塔莉 亨利 亨利 制陶工人 汤姆