gpt4 book ai didi

java - 循环链表泛型

转载 作者:太空宇宙 更新时间:2023-11-04 08:24:25 25 4
gpt4 key购买 nike

我在 CircularLinkedList 中遇到泛型问题。我有 CircularLinkedList 类、Node 类和 Person 类。节点应包含人员,而 CircularLinkedList 应包含这些节点。问题是,当我尝试在测试类中创建 CircularLinkedList 时,我收到一条错误消息:

Bound mismatch: The type Node<Person> is not a valid substitute for the bounded parameter <E extends Comparable<? super E>> of the type CircularLinkedList<E>

你能看一下我的泛型吗?

CircularLinkedList.java

 package cirkulærliste;

import java.util.Random;

public class CircularLinkedList<E extends Comparable<? super E>> {

private Node<E> next;
private Node<E> start;
private int size = 0;

public CircularLinkedList() {
setNext(null);
}

/**
* tilføjer personer
* @param p
*/
public void addPerson(E e) {
Node<E> newNode = new Node<E>(e, null);
Node<E> tempNext = next;

if(next == null){
next = newNode;
next.setNext(next);
} else if(size > 1){

}
}

/**
* udskriver personerne i den rækkefølge de står i listen
*/
public void print() {
Node<E> tempNode = start;
while (!tempNode.getNext().equals(start)) {
System.out.println(tempNode);
tempNode = tempNode.getNext();
}
System.out.println(tempNode);
}

/**
* en tilfældig person i den cirkulæreliste vælges som start i listen
*/
public void randomStart() {
int size = 1;
Node<E> tempNode = next.getNext();
while (!tempNode.getNext().equals(next.getNext())) {
tempNode = tempNode.getNext();
size++;
}
Random randomizer = new Random();
int chosen = randomizer.nextInt(size);
for (int i = 0; i <= chosen; i++) {
tempNode = tempNode.getNext();
}
start = tempNode;
}

/**
* fjerner den person fra listen der ligger count pladser fra start i listen. Personen der fjernes returneres.
* @param count
*/
public Node<E> remove(int count) {
Node<E> tempNode2;
for (int i = 1; i < 5; i++) {
next = next.getNext();
}
tempNode2 = next.getNext();
next.setNext(next.getNext().getNext());
tempNode2.setNext(null);
return tempNode2;
}


public void setNext(Node<E> next) {
this.next = next;
}


public Node<E> getNext() {
return next;
}


public void setStart(Node<E> start) {
this.start = start;
}


public Node<E> getStart() {
return start;
}
}

Node.java

package cirkulærliste;

public class Node<E> {

private E element;
private Node<E> next;

public Node(){
element = null;
next = null;
}

public Node(E element, Node<E> next){
this.setElement(element);
this.next = next;
}

public E getElement() {
return element;
}

public void setElement(E element) {
this.element = element;
}

public Node<E> getNext() {
return next;
}

public void setNext(Node<E> newNode) {
this.next = newNode;
}

public String toString(){
return "" + element;
}

}

Person.java

package cirkulærliste;

public class Person implements Comparable<Person> {

private String name;
private int number;

public Person(String name, int number){
this.setName(name);
this.setNumber(number);
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String toString(){
return "Name: " + name + " - " + "Number: " + number;
}

public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}

@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
return 0;
}

}

测试.java

public class Test {

public static void main(String[] args) {
CircularLinkedList<Person> list = new CircularLinkedList<Person>();

Node<Person> n1 = new Node<Person>();
n1.setElement(new Person("Thomas", 1));
list.addPerson(n1); // Compile error occurs here
}

}

最佳答案

听起来你正在写

CircularLinkedList<Node<Person>>

在你的测试类中;但你实际上需要写

CircularLinkedList<Person>
<小时/>

更新更新问题:您还需要更改此设置:

Node<Person> n1 = new Node<Person>();
n1.setElement(new Person("Thomas", 1));
list.addPerson(n1); // Compile error occurs here

对此:

list.addPerson(new Person("Thomas", 1));

一般来说,使用CircularLinkedList的代码不应该引用NodeCircularLinkedList 在内部使用 Node,但该类的用户无需担心这一点。

此外,通用 CircularLinkedList 类有一个名为 addPerson 的方法,这有点奇怪。当然它应该被称为 addElement,或者只是 add

关于java - 循环链表泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8886833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com