我正在做一个使用Adjacency List实现Graph的教程任务但是在构造函数中遇到了问题。
在给定的GraphTester.java
中我有:
//Constructor cannot be applied to given types
FriendShipGraph<String> graph = new AdjList<String>();
然后FriendShipGraph.java
提供了一个界面:
public interface FriendshipGraph<T extends Object> {
public static final int disconnectedDist = -1;
public abstract void addVertex(T vertLabel);
public abstract void addVertex(T srcLabel, T tarLabel);
//Other abstract methods
}
所以我需要编写一个类来实现LinkedList
:
public class SinglyLinkedList implements LinkedListInterface {
private Node head;
private int length;
public int getLength() {
return length;
}
public SinglyLinkedList() {
head = null;
length = 0;
}
//Other methods to manage the linked list
public class Node
{
private String value;
private Node nextNode;
public Node(String value) {
this.value = value;
nextNode = null;
}
//Other methods to manage node
}
}
我必须使用LinkedList
数组来实现Graph
:
public class AdjList <T extends Object> implements FriendshipGraph<T> {
SinglyLinkedList[] AdjList = null;
//This is the constructor containing the error
public AdjList(T vertices) {
int qty = Integer.parseInt((String) vertices);
AdjList = new SinglyLinkedList[qty];
for (int i = 0; i < AdjList.length; i++)
AdjList[i] = new SinglyLinkedList();
}
}
然而,当我编写自己的测试文件时,我创建了这样的AdjList对象而没有错误,但这不是该类所需的:
AdjList<String> aList = new AdjList<String>("9");
所以任何人都建议我如何修复构造函数。非常感谢你!
答案 0 :(得分:1)
FriendShipGraph<String> graph = new AdjList<String>();
AdjJust
中没有零参数构造函数。如果您提供自己的构造函数,则不会生成默认的零参数构造函数,就像使用AdjList(T vertices)
一样。
您需要提供默认构造函数。根据未显示的其他代码,可能类似以下内容可能就足够了:
public class AdjList <T extends Object> implements FriendshipGraph<T> {
SinglyLinkedList[] AdjList = null;
public AdjList() {
}
//This is the constructor containing the error
public AdjList(T vertices) {
int qty = Integer.parseInt((String) vertices);
AdjList = new SinglyLinkedList[qty];
for (int i = 0; i < AdjList.length; i++)
AdjList[i] = new SinglyLinkedList();
}
}
我不确定你为什么要传递一个字符串来表示数量,但这至少应该解决你所询问的编译错误。
答案 1 :(得分:1)
除了Trey的正确答案之外,还有一些评论:
你的one-arg构造函数说T vertices
;但是那时你正在对那里的(String)做一个“硬”演员。如果T是除String之外的其他东西,那么该代码将抛出异常。
所以,你应该让AdjList(顺便说一句可怕的名字)变成class AdjList implements FriendshipGraph<String>
;或者当您不想将通用类型“修复”为字符串时,可以转到qty = Integer.parseInt(verties.toString())
但是看着那个 - 听起来不是很奇怪吗?你知道吗,将一个似乎是数字的东西变成一个字符串,从中解析一个数字?也许它应该一直是一个整数?
然后:处理命名。绝对不需要使用像“qty”这样的缩写词;你为什么不称它为numberOfLists或类似的东西?!