Java 无法从字节/布尔数组加载,因为;黑白色。标记为“;是空的

Java 无法从字节/布尔数组加载,因为;黑白色。标记为“;是空的,java,graph,Java,Graph,当我运行下面的代码时,我不断从这篇文章的标题中得到错误,尽管我不知道为什么。我尝试了:Arrays.fill(带标记,false),我试图计算出在blacknodes[]中不存在的白色节点和黑色节点的数量 public class BlackWhite { private static boolean[] marked; public BlackWhite(Graph G, int s) { marked = new boolean[G.V()]; dfs(G, s);

当我运行下面的代码时,我不断从这篇文章的标题中得到错误,尽管我不知道为什么。我尝试了:
Arrays.fill(带标记,false)
,我试图计算出在
blacknodes[]
中不存在的白色节点和黑色节点的数量

public class BlackWhite {
    private static boolean[] marked;

public BlackWhite(Graph G, int s) {
    marked = new boolean[G.V()];
    dfs(G, s);
}

public static int count(Graph G, int[] blacknodes) {
    int rw_count = 0;

    for (int w : G.adj(blacknodes.length)) {
        if (marked(w)) {
            rw_count++;
        }
    }

    return rw_count;
}

private void dfs(Graph G, int v) {
    marked[v] = true;
    for (int w : G.adj(v)) {
        if (!marked[w]) {
            dfs(G, w);
        }
    }
}

public static boolean marked(int v) {
    return marked[v];
}

public static void main(String[] args) {
    Graph G = new Graph(3);
    G.addEdge(1, 2);
    G.addEdge(4, 1);
    G.addEdge(1, 8);

    System.out.println(BlackWhite.count(G, new int[] { 1 })); // should print 3
}

}

您正在初始化
BlackWhite
类的构造函数中标记的
数组。但是在main方法中,您从未调用过
newblackwhite()
。因此,在调用静态
count
方法时,标记的
数组仍然为空

你应该像这样改变你的计数方法

public static int count(Graph G, int[] blacknodes) {
    int rw_count = 0;
    if(marked == null) marked = new boolean[G.V()];

    for (int w : G.adj(blacknodes.length)) {
        if (marked(w)) {
            rw_count++;
        }
    }

    return rw_count;
}

谢谢。如何使用DSF?如何与输入数组进行比较?您可以从count方法中删除static,并使用BlackWhite BlackWhite=new BlackWhite();然后是blackWhite.count(G,newint[]{1});这将调用构造函数并在图形上运行dfs。