我在 Node 数据结构方面遇到问题——试图通过循环提高效率



所以我的代码有点问题。我的目标是从文件中获取邻接矩阵并将其输入到2d数组中。我能做到。现在我正在使用广度优先搜索和节点的数据结构来处理该数组。

现在,我试图简单地创建新的节点,但我不能使节点由于是一个字符。这里让我张贴我的完整代码。我将把错误贴在下面。


package javaapplication1;
import java.io.*;
import java.util.*;
import tio.*;
import java.lang.*;

public class JavaApplication1 {
    private static int row = 0;
    private static int col = 0;
    private static int n = 20;
    private static int[][]adjMatrix = new int[n][n];

public static int[][] adjMatrix() throws FileNotFoundException, IOException{
   //int n = 20;
   //int row = 0;
   //int col = 0;
   //int[][]adjMatrix = new int[n][n];
   String file =   ("C:\Users\David\Documents\NetBeansProjects\JavaApplication1\src\javaapplication1\adjmatrix.txt");
   BufferedReader in = new BufferedReader(new FileReader(file));
   String line;
   //System.out.println(in.readLine());

   int k = 0;
     while ((line = in.readLine()) != null){
         //System.out.println(row);
         String[] temp = line.split("\s+");
        for(col = 0; col < adjMatrix[row].length; col++){
           adjMatrix[row][col] = Integer.parseInt(temp[col]);
          // System.out.println(" " + temp[col] + " " + col);
        }
row++;
     }  //end while
   //System.out.print(array[4][1]);
   in.close();
   return adjMatrix;

} // endclass
 public static void main(String[] args)
    throws IOException{
    adjMatrix();
    // Create the nodes (20 based off adj matrix given
    Node nA =new Node('1');
    Node nB =new Node('2');
    Node nC = new Node('3');
    Node nD = new Node('4'); 
    Node nE = new Node('5');
    Node nF=new Node('6');
    Node nG=new Node('7');
    Node nH=new Node('8');
    Node nI=new Node('9');
    Node nJ=new Node('10');
    Node nK=new Node('11');
    Node nL=new Node('12');
    Node nM=new Node('13');
    Node nN=new Node('14');
    Node nO=new Node('15');
    Node nP=new Node('16');
    Node nQ=new Node('17');
    Node nR=new Node('18');
    Node nS=new Node('19');
    Node nT=new Node('20');

    // Create a graph, adding the nodes, and creating edges
    Graph g = new Graph();
    for (int i=1;i<=20;i++){
        String aString = Integer.toString(i);
        aString = n+aString;
        g.addNode(aString);
    }
//        g.addNode(nA);
//        g.addNode(nB);
//        g.addNode(nC);
//        g.addNode(nD);
//        g.addNode(nE);
//        g.addNode(nF);
//        g.addNode(nG);
//        g.addNode(nH);
//        g.addNode(nI);
//        g.addNode(nJ);
//        g.addNode(nK);
//        g.addNode(nL);
//        g.addNode(nM);
//        g.addNode(nN);
//        g.addNode(nO);
//        g.addNode(nP);
//        g.addNode(nQ);
//        g.addNode(nR);
//        g.addNode(nS);
//        g.addNode(nT);
//        g.addNode(nU);
//        g.setRootNode(nA); 
//        g.connectNode(nA,nB);
//        g.connectNode(nA,nD);
//        g.connectNode(nA,nE);
//        g.connectNode(nA,nF);
//        g.connectNode(nA,nG);
//        
//        g.connectNode(nB,nE);
//        g.connectNode(nB,nF);
//        g.connectNode(nB,nG);
//        
//        g.connectNode(nC, nD);
//        g.connectNode(nC,nE);
//        g.connectNode(nC,nF);
//        g.connectNode(nC,nG);
//        
//        g.connectNode(nD,nE);
//        g.connectNode(nD,nF);
//        
//        g.connectNode(nE, nF);
//        g.connectNode(nE,nG);
//        
//        g.connectNode(nF,nG);
//        
//        g.connectNode(nH, nI);
//        g.connectNode(nH,nJ);
//        g.connectNode(nH,nK);
//        g.connectNode(nI,nJ);
//        g.connectNode(nI,nK);
//        g.connectNode(nI,nL);


     g.bfs();

  } // end main
} // end class

我知道这是很多代码,但这就是为什么我真的不想强行使用g.c connectnode和g.d addnode的原因。无论如何,我可以实现这个循环?此外,当我开始做"节点nJ=新节点('10');"它给了我错误,因为我的节点是一个字符,有没有建议绕过它而不破坏一切?错误是一个未闭字符字面值。

下面是node的代码。

public class Node {
    public char label;
    public boolean visited=false;
    public Node(char l)
    {
            this.label=l;
    }
}

谢谢你的帮助,如果我需要编辑或添加什么,请告诉我。

第一个建议:将节点放在数组或列表中,不要重复20次。

将标签的数据类型更改为String,一切都会很好。

我不确定你如何定义你的图形类。但你应该将addNode方法定义为

bool addNode(节点n)或类似的东西。

另一件事是保持你的数据字段私有,并提供getter和setter

最新更新