我在使用 Node 数据结构时遇到了麻烦——试图通过循环提高它的效率

发布于 2024-12-07 22:38:52 字数 4062 浏览 0 评论 0原文

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

现在,我正在尝试简单地创建新节点,但由于是字符,我无法创建节点。在这里让我发布我的完整代码。我将在下面发布错误。


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

感谢您的帮助,如果我需要编辑或添加任何内容,请告诉我。

So I'm having a bit of an issue with my code. My objective is to take an adjacency matrix from a file and input it into a 2d array. I was able to do that. Now I'm using the data structure for Breadth First Search and Nodes to work with that array.

Right now, I'm trying to simply create new Nodes, but I cannot make nodes due to being a char. Here let me post my full code. I'll post the error below.


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

I know that is a lot of code, but that is the reason why I would really like to not brute force the g.connectNode and the g.addNode. Anyways I can implement a loop for this?
Also, when I start doing "Node nJ=new Node('10');" it gives me errors since my Node is a char, any suggestions on bypassing that without breaking everything? The error is an unclosed character literal.

Here is the code for node.

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

Thank you for your help, and let me know if I need to edit or add anything.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

找个人就嫁了吧 2024-12-14 22:38:52

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

将标签的数据类型更改为字符串,一切都会好起来的。

我不确定你如何定义 Graph 类。但您确实应该将 addNode 方法定义为

bool addNode(Node n) 或类似的方法。

另一件事是保持数据字段的私密性并提供 getter 和 setter。

First suggestion: put your nodes in an array or list, don't repeat the same thing 20 times.

Change your label's data type to String, and everything will be fine.

I am not sure how you define your Graph class. But you should really define your addNode method as

bool addNode(Node n) or something like that.

Another thing is to keep your data field private and provide getters and setters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文