Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用简单数组在java中实现图形时出错_Java_Graph - Fatal编程技术网

使用简单数组在java中实现图形时出错

使用简单数组在java中实现图形时出错,java,graph,Java,Graph,我已经创建了3个类边顶点和图。 图形是主类。 以下是3类的代码: 边缘 public class Edge { Vertex vertex1; Vertex vertex2; int weight; String name; int edgeNumber; Edge(){ weight=-1; name=null; edgeNumber=-1; } Edge(Vertex vertex1,int edgeNumber,Vertex vertex2,int weight,

我已经创建了3个类边顶点和图。 图形是主类。 以下是3类的代码:

边缘

public class Edge {
Vertex vertex1;
Vertex vertex2;
int weight;
String name;
int edgeNumber;

Edge(){
    weight=-1;
    name=null;
    edgeNumber=-1;
}
Edge(Vertex vertex1,int edgeNumber,Vertex vertex2,int weight,String name){
    this.vertex1=vertex1;
    this.vertex2=vertex2;
    this.weight=weight;
    this.name=name;
    this.edgeNumber=edgeNumber;
}

public void printEdge(Edge e){
    System.out.println("Edge Number :"+edgeNumber);
    System.out.println(e.vertex1);
    System.out.println(e.vertex2);
    System.out.println(e.name);
    System.out.println(e.weight);
}
}

顶点

public class Vertex {
int vertexId;
String name;

Vertex(){
    vertexId=-1;
    name=null;
}
public void createVertex(Vertex ver1,int id,String vName){
    ver1.vertexId=id;
    ver1.name=vName;
}
}

Graph.java

public class Graph {
int numVertices;
int numEdges;
int[][] matrix=new int[20][20];
Vertex[] vertexList =new Vertex[10];
Edge[] edgeList=new Edge[10];
/*
 * @param args the command line arguments
 */
// Intitalise the graph
//All values in matrix are zero
//Vertex names are also taken from name
Graph(int[][] vertexArr,int numVertices){
    this.numVertices=numVertices;

    for(int i=0;i<numVertices;i++){
        for(int j=0;j<numVertices;j++){
            vertexArr[i][j]=0;
        }
    }
}
public int graphDegree(Graph G,int vertex){
    int i,degree=0;
    for(i=0;i<numVertices;i++){
        if(matrix[vertex][i]==1)
            degree++;
    }
    return degree;
}
public void addEdge(Edge e1,int edgeIndex,Vertex v1,Vertex v2,String nameIn,int weightIn){
    int old=matrix[v1.vertexId][v2.vertexId];
    if(old!=0)
        System.out.println("The edge already exists");
    //creating new edge
    matrix[v1.vertexId][v2.vertexId]=1;
    matrix[v2.vertexId][v1.vertexId]=1;
    e1.vertex1=v1;
    e1.vertex2=v2;
    e1.name=nameIn;
    e1.weight=weightIn;
    edgeList[edgeIndex]=e1;
    numEdges++; 
}
public void printGraph(Graph G){
    System.out.println("Number of vertices in the graph : "+G.numVertices);
    for(int i=0;i<numEdges;i++){
        G.printEdge(edgeList[i]);
    }

} 
public static void main(String[] args) {

    int vertexCount=5;

    Vertex v1=new Vertex();
    Vertex v2=new Vertex();
    Vertex v3=new Vertex();
    Vertex v4=new Vertex();
    v1.createVertex(v1,0,"Delhi");
    v2.createVertex(v2,1,"Noida");
    v3.createVertex(v3,2,"Mumbai");
    v4.createVertex(v4,3,"Kanpur");
    int[][] graphStore=new int[vertexCount][vertexCount];
    Graph g1=new Graph(graphStore,vertexCount);

    Edge edge1=new Edge();
    Edge edge2=new Edge();
    g1.addEdge(edge1,0,v1,v2,"DtoN",10);
    g1.addEdge(edge2,1,v2,v3,"NtoM",50);
    g1.printGraph(g1);
}

我无法生成打印图形功能。如何打印图形中的所有边

将printEdge设置为静态:

public static void printEdge(Edge e){
    System.out.println("Edge Number :"+e.edgeNumber);
    System.out.println(e.vertex1);
    System.out.println(e.vertex2);
    System.out.println(e.name);
    System.out.println(e.weight);
}
更改printGraph方法:

public void printGraph() {
    System.out.println("Number of vertices in the graph : " + numVertices);
    for (int i = 0; i < numEdges; i++) {
       Edge.printEdge(edgeList[i]);
    }
}
public void printGraph(){
System.out.println(“图形中的顶点数:“+num垂直度”);
for(int i=0;i
可以这样称呼它:g1.printGraph()

  • printEdge()
    方法更改为static

    public static void printEdge(Edge e)
    
  • 您的
    printGraph()
    方法未正确实现。应该是这样的:

    public void printGraph(Graph G){
    System.out.println("Number of vertices in the graph : "+G.numVertices);
    for(int i=0;i<numEdges;i++){
    Edge.printEdge(e);
      }
    }
    
  • 在类
    Vertex
    中,必须重写
    toString()
    方法,否则将无法在
    printEdge()
    中正确打印顶点的信息

    @Override
    public String toString() {
    return "Vertex [vertexId=" + vertexId + ", name=" + name + "]";
    }
    

  • printEdge()是在类Edge中定义的方法。G是类图的一个对象。如何使用G访问printEdge()方法?我强烈建议您阅读静态方法和构造函数的工作原理。您似乎误解了这两个概念。@感谢您的输入,我使用edgelist调用了printgraph()函数,现在这个函数可以工作了。
    e1.edgeNumber = edgeIndex;
    
    @Override
    public String toString() {
    return "Vertex [vertexId=" + vertexId + ", name=" + name + "]";
    }