所以我的代码有点问题。我的目标是从文件中获取一个邻接矩阵并将其输入到二维数组中。我能够做到这一点。现在我正在使用广度优先搜索和节点的数据结构来处理该数组。
现在,我正在尝试简单地创建新节点,但由于是char,我无法创建节点。在这里,让我发布我的完整代码。我将在下面发布错误。
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.connectNode和g.addNode。无论如何,我可以为此实现一个循环? 此外,当我开始做“Node nJ = new Node('10');”它给了我错误,因为我的节点是一个字符,任何关于绕过它而不破坏一切的建议?错误是一个未公开的字符文字。
以下是节点的代码。
public class Node {
public char label;
public boolean visited=false;
public Node(char l)
{
this.label=l;
}
}
感谢您的帮助,如果我需要编辑或添加任何内容,请与我们联系。
答案 0 :(得分:1)
第一个建议:将你的节点放在一个数组或列表中,不要重复同样的事情20次。
将标签的数据类型更改为String,一切都会好的。
我不确定您如何定义Graph类。但您应该将addNode方法定义为
bool addNode(Node n)或类似的东西。
另一件事是将您的数据字段保密,并提供getter和setter。