无法使用HashMap

时间:2015-10-31 22:56:52

标签: java arraylist hashmap

我试图写一个股市模拟。 对不起,我用德语写了代码,但这对我来说更容易...... 所以理解:Aktie ==股票,Boerse ==股票市场

在班级" Boerse"我有一个带有ArrayLists的HashMap,在这些ArrayLists中是类的对象" Aktie"。

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

这是课程的代码" 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;
            }
        }

    }

}

班级&#34; Aktie&#34;:

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

1 个答案:

答案 0 :(得分:1)

尝试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;
            }
        }

    }