Java:为一个类的所有实例设置一个bool
问题描述:
我搜索了一些时间,但没有得到任何线索。Java:为一个类的所有实例设置一个bool
我想设置一个有向图。每个节点(class Node
的实例)应该包含bool visited
以查看它是否被搜索功能访问。
搜索完成后,我想重置该类的所有实例bool visited
而无需再次运行它们。
有什么方法可以去 - 或者我完全在错误的轨道上?
感谢您的帮助和欢呼声,迈克
// Cans.java
public class Cans {
public static void main(String[] args) {
int[] fillLevels = {2,15,3};
int[] states = {8,0,0};
node MyNode = new node(3,0);
MyNode.setfillLevels(fillLevels);
node MyLink = new node(3,1);
MyNode.addLink(MyLink);
MyNode.setStates(states);
MyLink.printStates();
System.out.println("Number of links: "+MyNode.getNumLinks());
}
boolean fillState(node nodeA, int stateA,node nodeB, int stateB){
int value = nodeA.getState(stateA);
nodeA.setState(stateA, value);
return true;
}
}
..
// node.java
import java.util.*;
public class node {
private int[] states;
private static int[] fillLevels;
private int level;
private int n_nodes;
private static int id0 = 0;
private int id;
private boolean visited;
List<node> next = new ArrayList<node>();
node(int n_nodes,int level){
id=id0;
id0++;
this.n_nodes = n_nodes;
this.level = level;
states = new int[n_nodes];
visited = false;
fillLevels = new int[n_nodes];
}
void setfillLevels(int[] fillLevels){
this.fillLevels = fillLevels;
}
void setStates(int[] states){
this.states = states;
}
void setState(int state, int value){
states[state] = value;
}
int getState(int state){
return states[state];
}
void addLink(node linkedNode){
next.add(linkedNode);
}
boolean isVisited(){
return visited;
}
int getNumLinks(){
return next.size();
}
void printStates(){
System.out.println("States of node #"+id+" on level "+level+":");
int cntr = 0;
for(int i:states){
System.out.println(cntr+": "+i);
cntr++;
}
}
}
答
boolean
标志不添加到该节点。它不是节点的存储属性,而是您正在运行的算法的暂时属性。
相反,保持一组单独的访问节点,并围绕它传递的附加参数,你运行你的算法:
Set<Node> visited = new HashSet<>();
而不是设置node.visited = true
的,使用visited.add(node)
。而不是检查if (node.visited) ...
使用if (visited.contains(node)) ...
该方法允许您通过调用visited.clear()
立即重置所有访问过的“标志”。
+0
那就是我正在寻找的!大。多谢,伙计。 –
提供了迄今为止所做的一些示例。 –
在创建节点时保留(静态?)节点的集合,并在您想要重置时迭代它们。 – shmosel
所以基本上:你必须经历所有的情况,没有别的办法。 – Izruo