2009-12-09 6 views
0

Я пишу программу для вычисления кратчайшего пути между двумя узлами. В моей программе у меня есть один пользовательский класс NodeList, который содержит ArrayList строк (представляющих узлы) вместе с расстоянием. Я использую алгоритм Дейкстры, который включает в себя открытие кратчайшего края из каждого узла. Таким образом, я использую эту петлю для табулирования возможных путей от заданной точки:Невозможно найти общедоступную переменную символа в одном экземпляре класса (Java)

for (NodeList ed : edges) 
    { 
    if (ed.nodeList.get(0).equals(node1)) 
    { 
     routes.add(ed); 
    } 
    } 

Это прекрасно работает, и, кажется, чтобы загрузить правильные значения в переменные (в соответствии с отладчиком). Однако, когда я пытаюсь установить переменную на расстояние одного из узлов, я получаю сообщение «не может найти расстояние переменной символа». Вот код, который вызывает проблему:

int minDistance = routes.get(0).distance; 

Это ненормальное явление или есть что-то очевидное, что мне не хватает?

ответ

1

get(0), очевидно, возвратил объект типа класса, который не имеет конкретного поля.

Есть несколько решений в зависимости от первопричины проблемы:

  • Спараметрировать список, если это возможно (например, NodeList<Route> вместо NodeList)
  • Cast его на правильный тип (например int distance = ((Route) routes.get(0)).distance)
  • Сделать полем открытым (например, public int distance;)
  • Добавить геттер (напр. public int getDistance() { return this.distance; }) и использовать его.
1

Если список узлов не использует дженерики, то компилятор не может сказать, какой тип вы находитесь get() ING, что означает, что предполагает что это Object, что означает, что он не имеет distance члена.

1

Ваш код не имеет смысла. Вы говорите, что у вас есть ArrayList из Strings, но вы ищете участника с названием «расстояние». Строка не имеет открытого поля, называемого «расстояние».

Скорее всего, вам нужно объявить ArrayList<SomeClassOfYours>, чтобы исправить это, но я не могу сказать, что из того, что вы опубликовали.

+0

Он сказал, что список имеет строки и расстояния, кажется, что он означает, что он уже использует класс. – abyx

Смежные вопросы