0

A *를 구현하기 위해 그래프를 작성하고 있는데 노드의 이웃을 찾기 위해 특정 오류가 발생했습니다. 내 논리는 인접 배열을 나타내는 2D ArrayList에서 목록 1에있는 노드 abcd와 목록 2에있는 노드 abcd에 있으며 그 인덱스가 0이 아닌 다른 값을 가져야한다는 것을 나타냅니다. 가장자리가 존재합니다. 나는 좋은 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 오류가 발생하지만IndexOutOfBoundsException 받기 : 음수가 포함되지 않은 경우 -1 -

public List<Node> neighbours(Node a){ 
     List<Node> neighbours = new ArrayList<Node>(); 
     for(int i = 0; i < nodes.size() - 1; i ++){ 
      int n = matrix.get(matrix.indexOf(a)).get(i); 
      if (n != 0){ 
       neighbours.add(nodes.get(i)); 
      } 
     } 
     return neighbours; 
    } 

, 나는 30 분 동안이 응시했지만 나는이에서 오는 -1 단서가 없다 : 이것은 내가 여기서 할 노력하고있어 것입니다.

public void addNode (Node a){ 
     int count = 0; 
     nodes.add(a); 
     matrix.add(new ArrayList<Integer>(nodes.size())); 
     for (List<Integer> list : matrix){ 
      count++; 
      int diff = Math.abs(nodes.size() - list.size()); 
      if (diff != 0){ 
       for (int i = 0; i < diff; i ++) 
        matrix.get(count-1).add(0); 
      } 
     } 
    } 

내가 행렬의 크기를 노드가 추가 될 때마다 업데이트 :이 단서를 보유 할 수 있습니다으로 나는 또한 매트릭스의 건설에 대한 코드를 추가합니다. 이 답변이 단지 얼굴을 응시하는 경우가 아니기를 바란다. 그러나 나는 그것을보기에는 너무 피곤하다. 어떤 도움을 주셔서 감사합니다!

답변

2

정말 그 값은 매트릭스입니까? 아니면

matrix.indexOf(a) 

이 값을 찾을 수없는 경우 -1을 반환합니다.

+0

당신이 옳습니다 .- 감사합니다. – Busdriver667

0

당신은 이미 코딩 한 -1에서 :

for(int i = 0; i < nodes.size() - 1; i ++){ 

그것은, 그래서 nodes 생성되는 예외의 원인 확신하지만 그것 (크기가 0을 뺀 값을 반환로에 요소가 없습니다 - 1). 그러나 완전한 실행 예제가 없다면 말하기는 어렵습니다. 이것은 코드의 문제가 아니라 샘플 데이터의 문제입니다. 완전히 실행되는 코드를 포함하십시오.

+0

사람들이 귀찮게하고 싶지는 않지만 오히려이 대답을 주셔서 감사합니다. – Busdriver667

+0

이것은 오해의 소지가있는 답변입니다. -1은 조건이 아닙니다. 이 경우 루프가 실행되지 않습니다. 실제 설명은 Szymon의 답입니다. – Tharun