0

我正在做一个关于使用邻接列表实现 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");

所以任何人都请建议我如何修复构造函数。非常感谢!

4

2 回答 2

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();
    }
}

我不确定你为什么要传递一个字符串来表示一个数量,但这至少应该解决你所询问的编译错误。

于 2016-08-31T03:15:39.717 回答
1

除了 Trey 的正确答案外,还有一些评论:

你的单参数构造函数说T vertices;但是然后您正在那里对 (String) 进行“硬”转换。如果 T 不是字符串,那么该代码将引发异常。

因此,您应该让 AdjList(顺便说一下,这个名字很糟糕)像这样class AdjList implements FriendshipGraph<String>;或者当您不想将泛型类型“修复”为字符串时,您可以选择qty = Integer.parseInt(verties.toString())

但是看着那个——听起来是不是很奇怪?你知道,把看起来是一个数字的东西变成一个字符串,然后从中解析一个数字吗?也许它应该一直是整数?

然后:处理你的命名。绝对没有必要使用“qty”之类的缩写;你为什么不叫它 numberOfLists 或类似的东西?!

于 2016-08-31T03:24:42.520 回答