通过输入将元素从arraylist移动​​到另一个

时间:2017-11-09 16:32:34

标签: java arraylist

我有2个arraylists,我想将项目从itemsList移动​​到pawnItemsList。

public static List<Items> pawnItemsList = new ArrayList<>();
public static List<Items> itemsList = new ArrayList<>();
public static String[][] itemsAttributes = new String[][]
        {
                {"Color TV ", "113", },
                {"Microwave ", "322",},
                {"Computer ", "1564",},
                {"Stereo ","402"}
public static void main(String[] args)
{
   /* rentOffice rent = new rentOffice();
    employmentOffice emplyment = new employmentOffice();
    budget budget = new budget();
    factory factory = new factory();
    */
    Scanner in = new Scanner(System.in);
    int choice;
    System.out.println("\n-------- PAWN SHOP --------\n");
    System.out.println("1. Pawn");
    System.out.println("2. Buy");
    System.out.println("3. Exit");
    choice = in.nextInt();
    in.nextLine();
    if(choice == 1)
    {
       pawnItems();
    }

    if(choice == 2)
    {
        addItems();
        printItemsList();
        buyItems();
    }
  }

我有一个名为buyItems的方法,我可以购买物品,然后我买的物品必须添加到pawnItemsList并从itemsList中删除。

 public static void buyItems()
{
    Scanner in = new Scanner(System.in);


    if(itemsList.size()>0)
    {
        System.out.println("\nWhich item do you want to buy?(type the index)\n");
        int choice = in.nextInt() - 1;
        in.nextLine();
        itemsList.remove(choice);
        pawnItemsList.add(itemsList.get(choice));
        System.out.println("-----------------------");
        printItemsList();
        System.out.println("-----------------------");
        printPawnItemsList();

        buyItems();
    }
}

我的问题是:当我想购买彩色电视时(该项目的索引为0但输入必须为1,因为我把int choice = in.nextInt() - 1;),彩色电视从itemsList但在pawnItemsList中添加了Microwave。我尝试把pawnItemsList.add(itemsList.get(choice - 1));但它不起作用。

1 个答案:

答案 0 :(得分:0)

buyItems方法中,您首先删除用户选择的项目。

itemsList.remove(choice);

此后,ArrayList的状态发生变化。它的数组中的元素是重新排序的,最初在choice + 1索引的元素(除非你删除了最后一项)现在是choice索引。

要解决此问题,您需要首先获取它,或者您可以使用事实remove方法返回已删除的对象,因此您可以写:

Items item = itemsList.remove(choice);
pawnItemsList.add(item);