Я программирую класс с именем graph и представляю ориентированный граф с помощью Hashmap. Я хочу создать метод, который распечатывает весь график следующим образом:
key1: value13, valeue17, ..
key2: value21, ...
где value13 - это значение узла3, на который указывает узел1 (ключ1).
Итак, для чего-то вроде 1-> 2-> 3 и 2, указывающего также на 4, мне нужно:
1: 2
2: 3,4
мой код выглядит так:
public class Graph<T>{
Map<Node<T>, List<Node<T>>> graph;
//constructors and methods
void printGraph(){
System.out.println(graph.keySet().iterator().next().value); // is printing 7
Iterator itKey = graph.keySet().iterator();
System.out.println(itKey.next()); // printing Graph$Node@15db9742
System.out.println(itKey.next().value); //error
while(itKey.hasNext()){
//code
}
public static void main(String[] args){
Graph<Integer> graph = new Graph<>();
Node<Integer> n1 = new Node<>(7);
Node<Integer> n2 = new Node<>(2);
graph.connect(n1, n2);
graph.printGraph();
}
}
Моя проблема возникает в методе printGraph()
, где я определяю Iterator
. Что я хочу сделать, это создать итератор
на наборе ключей и для каждого ключа создайте итератор, который будет печатать все значения. Как видите, если я попытаюсь напечатать System.out.println(graph.keySet().iterator().next().value);
Я получаю 7, что имеет смысл, потому что это значение моего первого ключа в моем keySet()
. Если я сделаю это по-другому, инициализируя итератор, Iterator itKey = graph.keySet().iterator();
, это итератор, указывающий на Node
:
System.out.println(itKey.next()); // printing Graph$Node@15db9742
Хотя, если я попытаюсь напечатать его значение:
System.out.println(itKey.next().value); //error
Я получаю следующую ошибку:
error: cannot find symbol
System.out.println(itKey.next().value);
^
symbol: variable value
location: class Object
1 error
не должно ли это быть одним и тем же? Почему возникает ошибка?