2014-01-20 18 views
-2

Я застрял в той же проблеме в течение нескольких дней и искал все, о чем я могу думать, и я сдаюсь. Я пытаюсь написать программу, в которой вы должны сначала создать объект человека, а затем сможете предоставить этому человеку разные типы вещей. Я помещаю каждого созданного человека в arraylist, и каждый человек должен иметь свой собственный инвентарь, который также является арраистом. Я просто не понимаю, как добавлять элементы к конкретному персоналу и как печатать этот arraylist. Нужно ли мне каждый раз создавать новый экземпляр «вещей» arraylist, когда я создаю нового человека? и как я могу получить доступ к определенному персоналу? Оцените любую обратную связь, потому что я супер noob.Как получить доступ к arraylist, принадлежащему к объекту внутри arraylist

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; 
} 
    } 
+1

Это выглядит как домашнее задание. –

ответ

0

Новый экземпляр ArrayList<Item> belongings уже создается каждый раз, когда вы создаете новый объект Person, так что вам не нужно, чтобы создать его снова в любом месте. Однако в настоящее время нет геттера для belongings, поэтому вам нужно написать его для доступа к вещам данного лица. Вы хотите что-то вроде этого:

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

Вам нужно написать публичный метод, который принимает объект Item и add S его к belongings этого Person. Вам не нужна помощь при написании другого общедоступного метода, который вызывает System.out.println() на вещи напрямую или выполняет итерации через них и распечатывает их.

0

«Я просто не понимаю, как добавлять элементы в ArrayList а конкретные лица и как напечатать что ArrayList»

Ваших лиц находятся в personList, поэтому я хотел бы использовать personList.get(n), чтобы получить п-й Person. Чтобы добавить предметы в belongings, вы можете использовать personList.get(n).belongings.add(item).

Чтобы напечатать ArrayList, вы можете использовать нормальный цикл Еогеасп:

for(Item i:personList.get(n).belongings){ 
System.out.println(i.getItemName()); 
} 

Должен ли я создать новый экземпляр ArrayList «пожитки» каждый раз, когда я создаю новый человек?

ArrayList belongings - это поле внутри класса Person. Когда вы создаете человека с конструктором, все его поля и переменные создаются в памяти. Это происходит каждый раз, когда вы создаете человека, поэтому каждый объект (в вашем случае человек в личном кабинете) имеет свои собственные поля, такие как список belongings.

+0

get (n) работает только для индекса справа? Как мне получить доступ к кому-либо, если я знаю только их имя? – user3200867

+0

вы можете найти в массиве, чтобы найти Человека с правильным именем: 'for (Person p: personList) {if (p.getName(). Equals (" person ")) {// сделать что-то}}' – tly

Смежные вопросы