0

我正在使用ArrayList包含多个变量的对象。例如:

// pseudo code
class Ticket {    
    int gameID
    double price
    int seatnumber
}

我有ArrayList多个Ticket对象,需要访问它们。我看过javadoc,到目前为止我想出了

list.get(index).attribute

但是我得到一个编译错误说:

找不到标志

我在语法上做错了吗?这是我的代码:

public static void printGameMoney(ArrayList games, ArrayList tickets)
{
    double total = 0;
    double tickMoney = 0;

    for (int i=0; i<tickets.size(); i++)
    {           
        double tickMoney = tickets.get(i).priceOfTick;
        total = total + tickMoney;          
    }
}
4

6 回答 6

3

您的代码是“老派”,您应该使用类型化类型、接口和新型 for 循环:

public static void printGameMoney(final List<Game> games, final List<Ticket> tickets)
{
    double total = 0;

    for (final Ticket ticket : tickets)
    {           
        final double tickMoney = ticket.getPriceOfTick();
        total = total + tickMoney;          
    }
}

另请注意,此方法很奇怪,因为它不返回任何内容。

于 2013-09-30T05:54:52.420 回答
2

如果属性确实是您的班级成员之一,请按以下方式使用。

((Ticket) list.get(index)).attribute;
于 2013-09-30T05:47:50.280 回答
1

改用这个:

public static void printGameMoney(ArrayList games, ArrayList<Ticket> tickets)
{
    double total = 0;
    double tickMoney = 0;

    for (int i=0; i<tickets.size(); i++)
    {           
        double tickMoney = tickets.get(i).priceOfTick;
        total = total + tickMoney;          
    }
}

基本上,更改导致ArrayList<Ticket>而不是简单的ArrayList. 这样你告诉编译器你里面的对象ArrayListTicket类型的,因此它们具有你指定的属性(例如priceOfTick)。

也一样games,所以如果你有Game课,你应该使用ArrayList<Game> games.

于 2013-09-30T05:43:04.603 回答
1

首先在每个字段声明后放置分号:

class Ticket {    
    int gameID;
    double price;
    int seatnumber;
}

此外,显示您正在使用的确切代码,而不是list.get(index).attribute.

于 2013-09-30T05:45:58.183 回答
1
List<Object> list = new ArrayList<Object>();
((Ticket)list.get(x)).attribute;
于 2013-09-30T05:48:44.423 回答
0

你必须像这样访问,list.get(i).price; 而不是list.price.get(i);

for (int i=0; i<tickets.size(); i++)
{

    double tickMoney =  list.get(i).price;
    total = total + tickMoney;  

}

这里的问题是随着你的减速ArrayList

如果您声明喜欢ArrayList<Ticket>,则无需在获取时进行投射。否则,您需要在那里进行演员表。每个循环都过度使用。

于 2013-09-30T05:51:12.950 回答