无法访问GraphNode中的对象

时间:2019-06-03 10:08:01

标签: java

我有一个图形,其中包含类型为GraphNodes的对象。这些节点包含对象City,该对象具有是否被感染的属性。我想遍历所有节点并检查城市是否被感染。我有一个通用方法getInfo,在我的情况下,该方法返回类型为E的对象City。但是,当我尝试链接另一种方法或获取属性时,我无法看到它们,好像它们不可用一样。代码中的所有类均来自大学,因此我无法添加/删除方法。我已经尝试过foreach,但仍然无法获得方法。

代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.LinkedList;

class City {

    String osnovna_granka;
    boolean zarazen;

    City(String osnovna_granka, boolean zarazen) {
        this.osnovna_granka = osnovna_granka;
        this.zarazen = zarazen;
    }

    @Override
    public String toString() {
        if (zarazen == true) {
            return osnovna_granka + " zarazen";
        } else {
            return osnovna_granka + " nezarazen";
        }
    }
}

class Graph {

    int num_nodes;
    GraphNode<City> adjList[];


    @SuppressWarnings("unchecked")
    public Graph(int num_nodes) {
        this.num_nodes = num_nodes;
        adjList = (GraphNode<City>[]) new GraphNode[num_nodes];
    }

    int adjacent(int x, int y) {
        // proveruva dali ima vrska od jazelot so
        // indeks x do jazelot so indeks y
        return (adjList[x].containsNeighbor(adjList[y])) ? 1 : 0;
    }

    void addEdge(int x, int y) {
        // dodava vrska od jazelot so indeks x do jazelot so indeks y
        if (!adjList[x].containsNeighbor(adjList[y])) {
            adjList[x].addNeighbor(adjList[y]);
        }
    }

    void deleteEdge(int x, int y) {
        adjList[x].removeNeighbor(adjList[y]);
    }

    @Override
    public String toString() {
        String ret = new String();
        for (int i = 0; i < this.num_nodes; i++) {
            ret += i + ": " + adjList[i] + "\n";
        }
        return ret;
    }
}

class GraphNode<E> {

    private int index;//index (reden broj) na temeto vo grafot
    private E info;
    private LinkedList<GraphNode<E>> neighbors;

    public GraphNode(int index, E info) {
        this.index = index;
        this.info = info;
        neighbors = new LinkedList<GraphNode<E>>();
    }

    boolean containsNeighbor(GraphNode<E> o) {
        return neighbors.contains(o);
    }

    void addNeighbor(GraphNode<E> o) {
        neighbors.add(o);
    }

    void removeNeighbor(GraphNode<E> o) {
        if (neighbors.contains(o)) {
            neighbors.remove(o);
        }
    }

    @Override
    public String toString() {
        String ret = "INFO:" + info + " SOSEDI:";
        for (int i = 0; i < neighbors.size(); i++) {
            ret += neighbors.get(i).info + " ";
        }
        return ret;

    }

    @Override
    public boolean equals(Object obj) {
        @SuppressWarnings("unchecked")
        GraphNode<E> pom = (GraphNode<E>) obj;
        return (pom.info.equals(this.info));
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public E getInfo() {
        return info;
    }

    public void setInfo(E info) {
        this.info = info;
    }

    public LinkedList<GraphNode<E>> getNeighbors() {
        return neighbors;
    }

    public void setNeighbors(LinkedList<GraphNode<E>> neighbors) {
        this.neighbors = neighbors;
    }
}

public class Main {

    public static void main(String[] args) throws Exception {
        int i, j, k;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        Graph g = new Graph(N);

        for (i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            st.nextToken();
            String osnovna_granka = st.nextToken();
            String str_zarazen = st.nextToken();
            if (str_zarazen.equals("zarazen")) {
                g.adjList[i] = new GraphNode(i, new City(osnovna_granka, true));
            } else {
                g.adjList[i] = new GraphNode(i, new City(osnovna_granka, false));
            }

        }

        int M = Integer.parseInt(br.readLine());
        for (i = 0; i < M; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            g.addEdge(a, b);
            g.addEdge(b, a);
        }

        br.close();
        Stack<GraphNode> stack = new Stack<>();
        int counter = 0;
        // vasiot kod ovde;
        for(GraphNode gn: g.adjList) {
            gn.getInfo().// Here the properties of City should show up
        }


    }
}

1 个答案:

答案 0 :(得分:0)

GraphNode是泛型类型,您尚未指定类型,IDE无法推断该类型,因此无法建议任何方法。在for循环中,您需要指定GraphNode的类型。

for i in range(len(df.index)):
    if df.iloc[i,1]!=0 and df.iloc[i,2]==0:          # column start from index 0
        df.loc[i,'colname'] = 'whatever you want'    # so rule_id is column 0
    elif:                                                
    .
    .
    .
相关问题