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

提供了迄今为止所做的一些示例。 –

+0

在创建节点时保留(静态?)节点的集合,并在您想要重置时迭代它们。 – shmosel

+0

所以基本上:你必须经历所有的情况,没有别的办法。 – Izruo

boolean标志不添加到该节点。它不是节点的存储属性,而是您正在运行的算法的暂时属性。

相反,保持一组单独的访问节点,并围绕它传递的附加参数,你运行你的算法:

Set<Node> visited = new HashSet<>(); 

而不是设置node.visited = true的,使用visited.add(node)。而不是检查if (node.visited) ...使用if (visited.contains(node)) ...

该方法允许您通过调用visited.clear()立即重置所有访问过的“标志”。

+0

那就是我正在寻找的!大。多谢,伙计。 –