在ArrayList中通过随机索引进行移位

时间:2016-05-11 05:32:51

标签: java arraylist

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

我仍然无法弄清楚为什么如果以随机方式输入值,则不进行移位。

2 个答案:

答案 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。

所以输出应该是 娜塔莉 亨利 亨利 制陶工人 汤姆

有关详情,请点击链接:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.add%28int%2Cjava.lang.Object%29