我的图形代码未运行,也未引发任何错误?

时间:2019-09-21 12:27:14

标签: java graph-theory

我正在尝试实现图形。我无法理解为什么我的代码无法正常工作。我试图看看哪里出了问题,但无法弄清楚,我的想法也没有给出任何错误。 我是初学者,有人可以告诉我我要去哪里,为什么? 我在下面发布我的代码。

import java.util.*;
class Graph {

    private int V;
    private LinkedList<Integer>[] adjList ;

    Graph(int V) {

        adjList = new LinkedList[V];

        for(int i=0 ; i<V ; i++) {
            adjList[i] = new LinkedList<Integer>();
        }
    }

    public void addEdge(int v, int w) {
        adjList[v].add(w);
    }

    public void printGraph(Graph graph) {
        for(int i=0 ; i<graph.V ; i++) {
            for(Integer pCrawl : graph.adjList[i]){
                System.out.print(pCrawl+" ");
            }
        }
    }

    public static void main(String[] args) {
        Graph g = new Graph(4); 

        g.addEdge(0, 1); 
        g.addEdge(0, 2); 
        g.addEdge(1, 2); 
        g.addEdge(2, 0); 
        g.addEdge(2, 3); 
        g.addEdge(3, 3); 

        g.printGraph(g);
    }
}

3 个答案:

答案 0 :(得分:1)

您的Graph类具有一个名为V的字段。构造函数还会收到一个参数int V。它们不是相同的变量。除非您初始化字段V,否则它将为零。

所以这个循环

for(int i=0 ; i<graph.V ; i++)

立即退出。

在构造函数中将字段V设置为接收到的变量V的方法是添加

this.V = V;

在您的构造函数内部。

答案 1 :(得分:1)

您需要像V那样初始化this.V = V;,例如:printGraph。方法public void printGraph() { for(int i=0 ; i<V ; i++) for(Integer pCrawl : adjList[i]) System.out.print(pCrawl+" "); } 并不需要接收Graph varibale,您可以这样写:

{{1}}

答案 2 :(得分:0)

您需要打印整行来管理y轴,并通过adjList中元素的数量限制i:

    public void printGraph(Main graph) {
        for(int i=0 ; i<graph.adjList.length ; i++) {
            for(Integer pCrawl : graph.adjList[i]){
                System.out.print(pCrawl+" ");
            }
            System.out.println("");
        }
    }

将输出以下内容:

  

1 2
  2
  0 3
  3

如果要旋转它,只需更改添加的参数:)