java - 无法在 HashMap 中使用 ArrayList 中对象的方法

标签 java arraylist hashmap

我正在尝试编写股票市场模拟。 抱歉,我用德语编写了代码,但这对我来说更容易...... 所以为了理解:Aktie==股票,Boerse==股票市场

在“Boerse”类中,我有一个包含 ArrayList 的 HashMap,这些 ArrayList 中是“Aktie”类的对象。

现在我想访问 HashMap 中 ArrayList 的“buy()”方法中对象“Aktie”的“getOwner()”和“setOwner()”方法,但这是不可能的。 :( 但为什么??

这是“Boerse”类的代码:

import java.util.*;
public class Boerse {

    HashMap<String,ArrayList> inventory = new HashMap<String, ArrayList>(); 
    HashMap<String,User> users = new HashMap<String, User>();
    Aktie[] Apple = new Aktie[10];

    /**
     * Main Methode der Klasse Boerse
     */
    public static void main(String[] args)
    {
        Boerse b = new Boerse();
    }

    /**
     * Erzeugt ein Objekt der Klasse Boerse
     */
    public Boerse()
    {
        FillInventory();
        System.out.println(inventory.get("Apple").toString());
        //buy("Apple", "Jonas");
        System.out.println(inventory.get("Apple").toString());
    }

    /**
     * Diese Methode fuegt dem Inventar die verfuegbaren Aktien zu
     */
    public void FillInventory()
    {
        /*
        *   //Sample
        *   ArrayList<Aktie> Sample = new ArrayList<Aktie>();
        *   int nSample = 0;
        *   double vSample = 0;
        *   Aktie aSample = new Aktie("Sample", vSample);
        *   for(int i=0;i<nSample;i++)
        *   {
        *       Sample.add(aSample);
        *   }
        *   inventory.put("Sample", Sample);
        */



        //Apple
        ArrayList<Aktie> Apple = new ArrayList<Aktie>();
        int nApple = 10;
        double vApple = 50.0;
        Aktie aApple = new Aktie("Apple", vApple);
        for(int i=0;i<nApple;i++)
        {
            Apple.add(aApple);
        }
        inventory.put("Apple", Apple);



        //Google
        ArrayList<Aktie> Google = new ArrayList<Aktie>();
        int nGoogle = 15;
        double vGoogle = 64.5;
        Aktie aGoogle = new Aktie("Google", vGoogle);
        for(int i=0;i<nGoogle;i++)
        {
            Google.add(aGoogle);
        }
        inventory.put("Google", Google);

        System.out.println(inventory.toString());
    }

    private void buy(String userName, String userPassword, String aktie,String pOwner)
    {
        for(int i=0;i<inventory.get(aktie).size();i++)
        {
            if(inventory.get(aktie).get(i).getOwner()==null) //here is the problem
            {
                inventory.get(aktie).get(i).setOwner(pOwner); //here is the problem
                break;
            }
        }

    }

}

还有“Aktie”类:

public class Aktie {
    public double value;
    public String name;
    public String owner = null;

    /**
     * Erzeugt ein Objekt der Klasse Aktie
     * @param pName Name der Aktie
     * @param pValue Wert der Aktie
     */
    public Aktie(String pName, double pValue)
    {
        name=pName;
        value=pValue;
    }

    /**
     * Aendert den Besitzer der Aktie
     * @param pOwner neuer Besitzer der Aktie
     */
    public void setOwner(String pOwner)
    {
        owner = pOwner;
    }

    /**
     * Gibt den Namen des Besitzers aus
     * @return
     */
    public String getOwner()
    {
        return owner;
    }
}

最佳答案

尝试按照 JB Nizet 指定的方式或使用如下所示的类型转换

private void buy(String userName, String userPassword, String aktie,String pOwner)
    {
        for(int i=0;i<inventory.get(aktie).size();i++)
        {
            if(((Aktie) inventory.get(aktie).get(i)).getOwner()==null) //typecast here
            {
                ((Aktie) inventory.get(aktie).get(i)).setOwner(pOwner); //typecast here
                break;
            }
        }

    }

关于java - 无法在 HashMap 中使用 ArrayList 中对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33457500/

相关文章:

java - 在 Java 中,break 如何与嵌套循环交互?

java - 如何在不指向 Java 源列表中的对象的情况下复制 ArrayList?

java - 不同线程中填充的列表在调用者线程中显示为空 - Java

java - android - 重置后按按钮上的进度条

java - TestNG 重试类不运行 @BeforeClass 和 @AfterClass 方法

java - 运行 Spring Boot 应用程序时出现兼容版本问题,但在 pom 中只有版本

java - 在多维 ArrayList 中查找字符串

java - 应为 BEGIN_OBJECT,但在第 1 行第 13 列为 BEGIN_ARRAY

java - 在java中返回多个map<string,string>

mysql - hibernate 不会在 mysql 中生成删除级联以映射 HashMap