gpt4 book ai didi

java - JAVA中的图形可视化

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:13 25 4
gpt4 key购买 nike

我需要一个根据 .txt 文件中包含的信息生成图表的程序。例如,如果在文件中写入 1,77,6 ,则程序必须构造一个连接第 1 和第 7、第 7 和第 6 个节点的图。我认为一开始我需要有 2 个数组/列表,例如 XY 分别包含 .txt 文件中给出的对的第一个和第二个值。我为此编写了一个代码,但它给出了我无法处理的不同异常。这是:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ReaddFile {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader((new FileReader("my/path/here")));
String line="";

List<Integer> list_x = new ArrayList<Integer>();
List<Integer> list_y = new ArrayList<Integer>();

while((line=br.readLine())!=null){
String[] t = line.split(",");
int x = Integer.parseInt(t[0]);
int y = Integer.parseInt(t[1]);
list_x.add(x);
list_y.add(y);
}
br.close();
}
}

如果我的方法正确,请帮助我修复上面的代码,并就如何继续以及如何将这些列表转换为图表提供建议。预先感谢!
附:我编写了一个使用 JUNG api 生成图形的代码,但问题是我在代码中包含了所有节点和边信息,而我需要它从 .txt 文件中读取。这是代码:

import edu.uci.ics.jung.algorithms.layout.*;  
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.SparseMultigraph;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import java.awt.*;
import javax.swing.JFrame;
public class GraphVis {
Graph<Integer, String> g;

public GraphVis() {

g = new SparseMultigraph<Integer, String>();

g.addVertex((Integer) 1);
g.addVertex((Integer) 2);
g.addVertex((Integer) 3);
g.addVertex((Integer) 4);
g.addVertex((Integer) 5);
g.addVertex((Integer) 6);
g.addVertex((Integer) 7);
g.addVertex((Integer) 8);
g.addVertex((Integer) 9);
g.addVertex((Integer) 10);
g.addVertex((Integer) 11);
g.addVertex((Integer) 12);
g.addVertex((Integer) 13);
g.addVertex((Integer) 14);

g.addEdge("1", 1,2);
g.addEdge("2", 2, 6);
g.addEdge("3", 2, 6);
g.addEdge("4", 2, 7);
g.addEdge("5", 2, 7);
g.addEdge("6", 2,12);
g.addEdge("7", 2,3);
g.addEdge("8", 2,3);
g.addEdge("9", 3,4);
g.addEdge("10", 3,4);
g.addEdge("11", 3,6);
g.addEdge("12", 3,6);
g.addEdge("13", 3,7);
g.addEdge("14", 3,7);
g.addEdge("15", 3,12);
g.addEdge("16", 4,5);
g.addEdge("17", 4,13);
g.addEdge("18", 4,13);
g.addEdge("19", 4,8);
g.addEdge("20", 4,12);
g.addEdge("21", 4,12);
g.addEdge("22", 4,7);
g.addEdge("23", 4,7);
g.addEdge("24", 4,6);
g.addEdge("25", 4,6);
g.addEdge("26", 5,12);
g.addEdge("27", 5,11);
g.addEdge("28", 5,11);
g.addEdge("29", 5,13);
g.addEdge("30", 5,8);
g.addEdge("31", 5,8);
g.addEdge("32", 5,9);
g.addEdge("33", 5,9);
g.addEdge("34", 5,9);
g.addEdge("35", 5,14);
g.addEdge("36", 5,14);
g.addEdge("37", 5,10);
g.addEdge("38", 5,10);
g.addEdge("39", 6,12);
g.addEdge("40", 6,12);
g.addEdge("41", 6,12);
g.addEdge("42", 6,7);
g.addEdge("43", 6,7);
}


public static void main(String[] args) {
GraphVis sgv = new GraphVis();
Layout<Integer, String> layout = new CircleLayout(sgv.g);
layout.setSize(new Dimension(600,600));
VisualizationViewer<Integer,String> vv = new
VisualizationViewer<Integer,String>(layout);
vv.setPreferredSize(new Dimension(750,750));
JFrame frame = new JFrame("Graph View ");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);
}

最佳答案

我宁愿创建一个邻接列表。第一个列表包含“from”节点,第二个列表包含它连接到的节点。

List<List<Integer>> adjacencyList = new ArrayList<>();

您需要初始化列表中的每个列表,因此请对您需要的所有节点执行此操作。

for (int i = 0; i < numberOfNodes; i++) {
adjacencyList.add(new ArrayList<>());
}

当您想要添加到邻接列表时,请执行以下操作:

adjacencyList.get(x).add(y);
adjacencyList.get(y).add(x); // Add this if you need an undirected graph

然后您可以简单地迭代列表并从那里绘制图表,例如:

for (int i = 0; i < numberOfNodes; i++) {
boolean[] visited = new boolean[numberOfNodes];
for (int node : adjacencyList.get(i)) {
...
}
}

关于java - JAVA中的图形可视化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com