2013-10-26 35 views
0

所以我有一个Queue(由链表实现)充满了“Car”对象。 我的主要目标是根据对象的“num”参数将队列中的每个对象转移到堆栈中。从队列中移动对象到堆栈

在其构造函数中的“Car”对象的参数之一是“num”。 我想这样说

if(the object @ head of queue's "num" == 2) 
{ 
Stack1.push(queue.remove()); 
} 

,但它不会让我做 “如果(queue.peek()== NUM​​ 2”)

所以任何想法? (顺便提一下,它的Java版本的队列不是自定义版本)。

+1

*为什么*它不会让你这样做?你遇到了什么错误? – templatetypedef

+0

你需要向我们展示你的'Car'类和可能的'peek'的实现。我猜''Car'中的'num'属性是不可访问的,但是你没有提供足够的信息来确定。 – Aurand

回答

0

您可能没有正确地使用泛型,让编译器知道您正在尝试做什么是好的。即你或许会说一样的东西:

Queue cars = ...; 
if (cars.peek().num == 2) ... 

它等同于

Queue cars = ...; 
Object car = cars.peek(); 
if (car.num == 2) ... 

应该是显而易见的,不能工作,因为Object没有一个num场。相反,你可能想:

Queue<Car> cars = ...; 
if (cars.peek().num == 2) ... 

这将是喜欢说

Queue<Car> cars = ...; 
Car car = cars.peek(); 
if (car.num == 2) ... 

这是更为合理的。编译器类型参数<Car>让编译器知道这个Queue可以只有包含Car对象,因此可以安全地访问其上的num字段。

+0

不,我做了完全相同的事情,它仍然不会让我访问它的参数。 – user2855405

+0

然后,你必须添加更多的信息到你的问题。这仅仅是基于所提供的有限信息的猜测。 –