Java 如何正确修改JGraphT中的顶点?

Java 如何正确修改JGraphT中的顶点?,java,oop,jgrapht,Java,Oop,Jgrapht,我构建了一个带有一些顶点的图。顶点属于我自己的类,包含一些信息,但不是更多。 然后我遍历图,如果满足某些条件,则更改这些信息。之后,我尝试打印带有修改信息的新图形,但似乎只有一些顶点被修改 我已经检查了我是否真的在未修改的节点上工作,是的。因此,我的修改代码可以工作,但它有时会打印顶点的未修改版本 首先,我构建了这个图。g是整个类的全局变量 封装测试; 导入com.mxgraph.layout.*; 导入com.mxgraph.swing.*; 导入org.bouncycastle.util.A

我构建了一个带有一些顶点的图。顶点属于我自己的类,包含一些信息,但不是更多。 然后我遍历图,如果满足某些条件,则更改这些信息。之后,我尝试打印带有修改信息的新图形,但似乎只有一些顶点被修改

我已经检查了我是否真的在未修改的节点上工作,是的。因此,我的修改代码可以工作,但它有时会打印顶点的未修改版本

首先,我构建了这个图。g是整个类的全局变量

封装测试;
导入com.mxgraph.layout.*;
导入com.mxgraph.swing.*;
导入org.bouncycastle.util.Arrays;
导入org.jgrapht.*;
导入org.jgrapht.alg.DijkstraShortestPath;
导入org.jgrapht.ext.*;
导入org.jgrapht.graph.*;
导入org.jgrapht.traverse.breadthfirsterator;
导入org.jgrapht.traverse.DepthFirstIterator;
导入org.jgrapht.traverse.GraphIterator;
导入org.json.simple.JSONArray;
导入org.json.simple.JSONObject;
导入org.json.simple.JsonArray;
导入org.json.simple.JsonObject;
导入java.util.concurrent.ThreadLocalRandom;
导入javax.swing.*;
导入java.awt.*;
导入java.util.*;
导入java.util.List;
导入java.util.Queue;
/**
*演示小程序,演示如何使用JGraphX可视化JGraphT图形。
*基于JGraphAdapterDemo的小程序。
*
*/
公共类JGraphXAdapterDemo扩展了JApplet{
静态ListenableDirectedGraph g;
公共静态级别(){
MyVertex节点=(MyVertex)g.vertexSet().toArray()[0];
System.out.println(“开始:+节点);
堆栈q=新堆栈();
Stack utilq=新堆栈();
q、 添加(节点);
而(!q.isEmpty()){
MyVertex电流=q.pop();
utilq.add(当前);
如果(!当前已访问){
current.visted=true;
}
如果(!g.outgoingEdgesOf(current).isEmpty()){
对于(DefaultEdge a:g.OutgoingEdge(当前)){
MyVertex邻居=g.getEdgeTarget(a);
如果(!邻居已访问){
q、 推(邻居);
}
}
}否则{
整数计数=0;
System.out.println(“UtilQ”);
而(utilq.size()>0){
MyVertex todo=utilq.pop();
System.out.println(“Then:+todo”);
if(g.outgoingEdgesOf(todo.isEmpty()){
todo.level=0;
}否则{
对于(DefaultEdge a:g.OutgoingEdge(todo)){
todo.setLevel(g.GetEdgeTargetGet(a).level+1);
}
}
System.out.println(“现在:+todo”);
}
utilq=新堆栈();
}
}
}
公共静态类MyVertex{
字符串名;
布尔值=假;
双优先级=0.0;
智力水平=0;
公共双getPrio(){
返回优先级;
}
公共无效设置优先级(双优先级){
this.prio=prio;
}
公共int getEta(){
返回eta;
}
公共空间设置eta(国际eta){
这.eta=eta;
}
内塔;
公共MyVertex(字符串名称){
this.name=名称;
}
public int getLevel(){
回报水平;
}
公共void设置级别(int级别){
这个水平=水平;
}
公共MyVertex(字符串名,int-eta){
this.name=名称;
这.eta=eta;
}
@凌驾
公共字符串toString(){
返回“name:”+name.replace(“donatello_uu3;,”)+“level:”+level;
}
@凌驾
公共int hashCode(){
返回name.hashCode();
}
@凌驾
公共布尔等于(对象e){
如果(e==null){
返回false;
}else if(!(MyVertex的e实例)){
返回false;
}
if(e MyVertex的instanceof&((MyVertex)e).name.equals(this.name)){
返回true;
}否则{
返回false;
}
}
}
公共JGraphXAdapterDemo(JSONObject json)抛出HeadlesException、InterruptedException{
//创建JGraphT图
g=新的ListenableDirectedGraph(DefaultEdge.class);
//通过适配器使用JGraph创建可视化
JSONArray节点=(JSONArray)json.get(“节点”);
MyVertex v=新的MyVertex(空);
用于(对象s:节点){
字符串w=新字符串(s.toString());
//System.out.println(w.toString());
int eta=ThreadLocalRandom.current().nextInt(1,10+1);
v=新的MyVertex(w,100);
g、 addVertex(v);
}
//系统输出打印LN(g.ContainesVertex(“donatello_头”);
JSONObject边缘=(JSONObject)json.get(“边缘”);
对于(对象o:edges.keySet()){
字符串p=o.toString();
字符串s=edges.get(o.toString();
//System.out.println(“s---------->”+s);
s=s.replace(“[”,”).replace(“]”,”);
字符串[]q=s.split(“,”);
//System.out.println(“q-->”+java.util.Arrays.asList(q));
for(字符串x:java.util.Arrays.asList(q)){
字符串[]a=x.split(“,”);
for(字符串r:a){
v=新的MyVertex(p);
MyVertex w=新的MyVertex(r.replace(“\”,”);
DefaultEdge f=g.加差(v,w);
int randomNum=ThreadLocalRandom.current().nextInt(1,10+1);
v、 setEta(随机数);
}
}
}
赋值级别();