当前位置: 首页 > 知识库问答 >
问题:

递归Java方法中的错误反转队列

贲宜春
2023-03-14

我试图编写一个递归方法来反转队列中的所有元素。

在实现队列的抽象类myQueue中

public void reverse() {
  T temp = dequeue();
  Queue<T> bufferQueue = new Queue<T>();

  if(!(temp == null)){
    bufferQueue.enqueue(temp);
  }

  if(!(isEmpty())) {
    reverse();
  }else{
    while(!(bufferQueue.isEmpty())){
       Queue.enqueue(bufferQueue.dequeue);
    }
  }

}

接口队列

public boolean isEmpty();
public int size();
public void enqueue(T e);
public T dequeue();
public T front();

在我的反向方法中,我的目标是不断地递归地从原始队列中退出队列(删除第一个元素),直到队列为空。每次我退出队列时,我都会将该对象放入一个临时队列中。当我的队列为空时,我将从临时队列重新排队到原始队列。

我的第一个问题是定义一个新的临时队列,在我的例子中是bufferQueue。我得到以下信息:

1. ERROR at solution.java (at line 12)
Queue<T> bufferQueue = new Queue<T>();
                           ^^^^^
Cannot instantiate the type Queue<T>

共有2个答案

巢睿
2023-03-14

你需要有一个具体的类型,而不是T,T是不可能的。

黄靖
2023-03-14

Queue是一个接口。不能创建接口的实例。检查JavaDoc for Queue并选择一个实现Queue的类:

https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html

您试图实现的是出人意料的简单,并且根本不需要递归,只需要具体类上的可用方法,如ArrayDeque您的自定义反向方法。此外,您不需要中间缓冲队列。这应该可以很好地工作:

public class MyQueue<T> extends ArrayDeque<T>{
    public void reverse() {
      T[] contents = toArray(T[]);
      clear();

      if(contents != null){
        for(int i = contents.length-1; i >= 0; i--){
            add(contents[i]);
        }
      }
  }
}
 类似资料:
  • 问题内容: 我已经在一个类的Java项目上工作了一段时间。它是链表(此处称为,包含称为的简单节点)的实现。问题是,一切都必须使用递归算法来完成。我可以用一种方法来做所有的事情: 现在,我的函数只是调用一个带有参数以允许递归的辅助函数。 我的助手功能具有的签名。 目前,我使用堆栈来迭代工作,但这不是规范所要求的。我在C语言中找到了一种算法,该算法可以递归地将其递归逆转并将其转换为Java代码,并且可

  • 问题内容: 我还没有找到满足我的功能特定需求的任何东西,是的,这是用于家庭作业。 所以我有: 前提条件:x.length> 0 我不能让函数返回任何东西,而唯一的参数是数组这一事实使我感到困惑。 我已经尝试过将循环与递归一起使用,但是我尝试过的一切似乎都以生成函数的无限实例结束。 我已经有了一个想法/建议与该函数一起使用另一个函数,但是,当前如何递归地使用原始函数超出了我的范围。 任何帮助表示赞赏

  • 本文向大家介绍单链表反转 递归法Java实现相关面试题,主要包含被问及单链表反转 递归法Java实现时的应答技巧和注意事项,需要的朋友参考一下 经历了很多面试,面试官最爱考察的算法无非是斐波那契数列和单链表反转,尽管是这些都是基础知识,然而我对单链表反转有更多的想法。 递归法是我早期最爱在面试中使用的算法,很有逼格,写起来非常优雅,非常好理解。 先定义链表数据结构 如上代码所示 递归法会逐层确定该

  • 我需要为链表队列实现一个toString()递归方法。我知道我的toString方法在我上周做的一个链表实现中工作得很好,所以我在处理它的队列方面出了问题。 我的QueueList的toString方法: 以及我的构造函数,例如QueueList: 我试图用这个测试看看里面发生了什么: 与输出 我意识到这是因为我说的是前面的在方法的递归部分,但即使我将其更改为,我的输出是 这可能与我的排队和退队方

  • 我刚刚开始学习递归,并能够使用它编写一个简单的阶乘程序,没有太多问题。现在我正在尝试编写一个递归方法,该方法以相反的顺序写入数组,但我不知道我做错了什么。我错过了什么?非常感谢。

  • 这不是HW或作业。这是我自己在练习的。 给定一个队列,编写一个反向方法来反向队列的元素。MyQueue保持不变。 签字: 注意:未知队列是使用节点还是数组生成的。 队列已经实现了一些方法,我们可以使用这些方法: