我有一个小问题,我希望有人可以帮助我。 这是一个赋值,所以我不应该使用从java API导入的类,也不应该以任何其他方式执行此操作(arraylist会使这更容易。) 我创建了一个Queue类和一个Stack类。 我试图检索队列的头部,并将其添加到堆栈。 我猜我需要创建一个方法,以某种方式获取列表头部的值并存储它,以便我可以使用它。 例如,如果我按顺序将“bob”,“jack”和“jill”排入队列,它将如下所示:
鲍勃
插孔
吉尔
我想从队列列表中取消bob,但是将他添加到Stack列表的头部,但我无法弄清楚如何。如果我的问题不是很精确,我很抱歉,我的问题就是我真正需要的问题。如果需要任何其他信息,我会更新我的帖子。谢谢你的帮助。
这是我的Queueclass: (LL是我的链接列表类)
public class Queue<T extends Comparable<T>> {
LL<T> theQueue;
public Queue() {
theQueue = new LL<T>();
}
public boolean isEmpty() {
return theQueue.isEmpty();
}
public void enqueue(T value) {
theQueue.insertTail(value);
}
public T dequeue() throws QueueException {
T retval = null;
try {
retval=theQueue.deleteHead();
}catch (LLException e) {
throw new QueueException ("Queue is empty");
}
return retval;}
public String toString() {
return theQueue.toString();
}}
我的Stack Class:
public class Stack<T extends Comparable<T>>{
LL<T> theStack;
public Stack()
{
theStack = new LL<T>();
}
public boolean isEmpty()
{
return theStack.isEmpty();
}
public void push(T value)
{
theStack.insertHead(value);
}
public T pop() throws StackException
{
T retval = null;
try
{
retval = theStack.deleteHead();
}
catch (LLException e)
{
throw new StackException("Stack Underflow");
}
return retval;
}
public boolean isFull()
{
return false;
}
public String toStrin()
{
return theStack.toString();
}
主类:
public static void main(String[] args) {
Stack <String> hired = new Stack<String>();
Stack <String> fired = new Stack<String>();
Queue <String> apps = new Queue<String>();
String temp;
for (int i = 0; i < 1000; i++) {
System.out.println("Enter the number of the action to perform:");
System.out.println("1. Accept Application");
System.out.println("2. Hire");
System.out.println("3. Fire");
System.out.println("4. Exit");
Scanner kb = new Scanner(System.in);
int key = kb.nextInt();
switch (key) {
case 1:
System.out.println("Enter applicant's name and ID separated by semi-colon:");
String applicant = kb.next() + "\n";
System.out.println("You entered " + applicant);
apps.enqueue(applicant);
break;
case 2:
try{
temp = apps.dequeue();
} catch (QueueException s) {
}
try{ apps.dequeue(); }
catch (QueueException s){
System.out.println("Queue is empty");}
hired.push(temp);
case 3:
System.out.println();
case 4: System.out.println("Bye");
System.exit(0);
}
}
因此,如果没有try和catch,我就不会将apps.dequeue()
分配给temp
。但是当我做hired.push(temp);
时,我得到一个错误,说temp可能尚未初始化。
答案 0 :(得分:2)
我认为你想做的是&#34;出局&#34; bob&#34;从队列中将它添加到Stack&#34;,不是吗? 所以我想你已经告诉我该怎么做了:
Queue<String> q = new Queue<String>();
Stack<String> s = new Stack<String>();
// ... enqueue three strings
String temp = q.dequeue();
s.push(temp);
是 - 此任务与Queue和Stack类的实现无关。它只是关于使用界面。只要您正确实现了它们,这些代码就可以正常工作。
修改强> 也许这就是你想要的:
String temp = ""; // explicitly initialize
try {
temp = q.dequeue();
s.push(temp);
} catch {
}
我把两个dequeue和push都放在try块中:如果dequeue失败,则不会推送任何东西。这适合你吗?
答案 1 :(得分:0)
使用迭代器(如果需要将值从队列的随机位置推送到堆栈中)。对于你的任务,简单的dequeue方法应该正常工作,如另一个答案所指出的那样。 在调用dequeue方法之前,调用此迭代器并检查是否hasNext()。如果为true,则使用iterator.next()获取值并存储它。 现在你有'head'位置的值。现在调用dequeue方法并删除head值。现在只需将存储的值推入堆栈