Java 如何访问属于arraylist中对象的arraylist

Java 如何访问属于arraylist中对象的arraylist,java,arraylist,Java,Arraylist,我已经被困在同一个问题上好几天了,在谷歌上搜索了我能想到的一切,我放弃了。我想写一个程序,你应该先创建一个person对象,然后给这个人不同类型的物品。我把每个被创建的人放在一个arraylist中,每个人都应该有自己的清单,这也是一个arraylist。我只是不知道如何将项目添加到特定的persons arraylist以及如何打印该arraylist。每次创建一个新人时,我是否必须创建arraylist“Attowings”的新实例?我如何访问某个人arraylist?感谢任何形式的反馈,因

我已经被困在同一个问题上好几天了,在谷歌上搜索了我能想到的一切,我放弃了。我想写一个程序,你应该先创建一个person对象,然后给这个人不同类型的物品。我把每个被创建的人放在一个arraylist中,每个人都应该有自己的清单,这也是一个arraylist。我只是不知道如何将项目添加到特定的persons arraylist以及如何打印该arraylist。每次创建一个新人时,我是否必须创建arraylist“Attowings”的新实例?我如何访问某个人arraylist?感谢任何形式的反馈,因为我是超级noob

import java.util.ArrayList;


public class Sakregister extends Programskelett{

public static ArrayList<Person> personList = new ArrayList<Person>();


protected boolean nextCommand(){
    String command = readString("> ").toLowerCase();

    switch(command){
    case "print list":
        printAll();
        System.out.println("Program is running");
    break;

    case "print person":
        printUser();
        System.out.println("Program is running");
    break;

    case "create item":
        newItem();

    break;

    case "create user":
        newUser();
    break;

    case "print richest":
        printRichest();
        System.out.println("Program is running");
    break;

    case "crash":
        initCrash();

    break;

    case "quit":
        System.out.println("Program has terminated");
        return true;
    default:
        System.out.println("Not a valid command");
}
    return false;
}

private void printAll() {



    }
private void initCrash() {


    for (Person thisPerson : personList) {
        for (Item thisItem : thisPerson.belongings)
            if (thisItem.name == "Stock"){
                ((Stock) thisItem).setStockCrash(0);
            }
            }
            }

private void printRichest() {


}

private void newUser() {
    System.out.println("enter name: ");

    String name = keyboard.nextLine();

    Person newPerson = new Person(name);


    personList.add(newPerson);



    System.out.println("Person added to list");
}

private boolean newItem() {

    System.out.println("enter item type: ");

    String itemType = readString("> ").toLowerCase();

    switch(itemType){

    case "trinket":

        addTrinket();

        break;

    case "stock":

        addStock();

        break;

    case "appliance":

        addAppliance();

        return true;
    default:
        System.out.println("Not a valid item type");
}
    return false;
    }

private void addAppliance() {

    System.out.println("Enter name of appliance: ");

    String appName = keyboard.nextLine();

    System.out.println("Enter initial price: ");

    int appInitialPrice = keyboard.nextInt();

    System.out.println("Enter level of wear: ");

    int appWear = keyboard.nextInt();

    Appliance newAppliance = new Appliance(appName, appInitialPrice, appWear);

    System.out.println("Enter name of owner: ");

    Object owner = keyboard.nextLine();

    for(Person entry : personList)
               if(entry.equals(owner))
            entry.belongings.add(newAppliance);


}

private void addStock() {

    System.out.println("Enter name of stock entry: ");

    String stockName = keyboard.nextLine();

    System.out.println("Enter amount: ");

    int stockAmount = keyboard.nextInt();

    System.out.println("Enter price: ");

    int stockPrice = keyboard.nextInt();

    Stock newStock = new Stock(stockName, stockAmount, stockPrice);

    System.out.println("Enter name of owner: ");

    String owner = keyboard.nextLine();

    keyboard.nextLine();

    for(Person entry : personList) {
        if(entry.equals(owner)) {
            entry.belongings.add(newStock);

    }

    }
}

private void addTrinket() {

    System.out.println("Enter name of trinket: ");

    String trinketName = keyboard.nextLine();

    System.out.println("Enter number of gems: ");

    int trinketGems = keyboard.nextInt();

    System.out.println("Choose gold or silver: ");

    String trinketMineral = keyboard.nextLine();

    keyboard.nextLine();

    Trinket newTrinket = new Trinket(trinketName, trinketGems, trinketMineral);

    System.out.println("Enter name of owner: ");

    String owner = keyboard.nextLine();

    for(Person entry : personList)

        if(entry.equals(owner))
            entry.belongings.add(newTrinket);



}

private void printUser() {
    // TODO Auto-generated method stub

}

protected void printMainMenu(){
    System.out.println("Choose a command: ");
    System.out.println("start");
    System.out.println("quit");
}

public static void main(String[] args) {

    Sakregister registerProgram = new Sakregister();
    registerProgram.run();

}

}

public class Item{

protected String name;

public Item(String name){

    this.name = name;
}

public String getItemName() {
    return name;
}

    import java.util.ArrayList;



    public class Person{

public String name;
public String items;

public ArrayList<Item> belongings = new ArrayList<Item>();

public Person(String name){

    this.name = name;
}

public String getName(){
    return name;

}


public String toString() {
   return "Name: " + name;
}
    }
每次创建新的Person对象时,都会创建ArrayList属性的新实例,因此无需在任何地方再次创建它。但是,目前没有物品的getter,所以您需要编写一个getter来访问给定人员的物品。你想要这样的东西:

 public ArrayList<Item> getBelongings() {
   return belongings;
 }

您需要编写一个公共方法来接受Item对象并将其添加到此人的物品中。编写另一个公共方法,直接在物品上调用System.out.println,或者遍历物品并将其打印出来,您不需要任何帮助。

我只是不知道如何将项目添加到特定的persons arraylist以及如何打印该arraylist

您的人员位于personList中,因此我将使用personList.getn获取第n个人员。 要将项目添加到物品中,可以使用personList.getn.Bottongs.additem

要打印arraylist,可以使用普通foreach循环:

for(Item i:personList.get(n).belongings){
System.out.println(i.getItemName());
}
每次创建一个新人时,我是否必须创建arraylist“Attowings”的新实例


ArrayList属性是Person类中的一个字段。使用构造函数创建person时,其所有字段和变量都在内存中创建。每次创建一个人时都会发生这种情况,因此personList中的每个对象person都有自己的字段,如“个人物品”列表。

这看起来像是家庭作业。getn仅适用于索引,对吗?如果我只知道某人的姓名,如何访问他们?您可以在数组中搜索以找到具有正确姓名的人:forPerson p:personList{ifp.getName.equalPerson{//do something}