Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Um Problema Com For (?)

Olá! Bom dia, boa tarde, ou boa noite pra você que está lendo. Então, estou trabalhando em um programa para faculdade que tem como objetivo criar vértices e suas arestas, e tinha pensado em uma forma bem engenhosa de fazer isso, mas acabei empacando em um problema com um for.

case 2:
                for (int i = 0; i < CriaGrafo.getTotal(); i++) {
                    grafo = grafos.get(i);
                    for (int o = 0; o < CriaGrafo.getTotal(); o++) {
                        System.out.println("O vértice "+i+" está ligado ao vértice "+o+"? (1-Sim _ 2-Não)");
                        num1 = in.nextInt();
                        if (num1 == 1) {
                            grafo.adjacente[o] = true;
                        } else {
                            grafo.adjacente[o] = false;
                        }
                    }

                }

Este é o trecho do código que está dando problema, mas compila corretamente e dá este erro:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 at Grafo.main(Grafo.java:31)

Eu pesquisei um pouco sobre e encontrei umas respostas q não me ajudaram tanto, mas me fizeram entender o problema, aparentemente eu estou tentando acessar uma posição do "grafo.adjacente" que não existe, mexi de diversas formas, mas não consegui arrumar isto, -1 em alguns lugares, +1 em outros, etc.

E talvez tenha algo a ver com isto:

public class CriaGrafo {
    private static int total = 0;
    private int num;
    boolean adjacente[] = new boolean [total];

    public CriaGrafo (int Numero) {
        total += 1;
        this.num = Numero;
    }

Mas também não tenho certeza, se alguém puder me dar um alô sobre a resolução desse problema ficaria mto agradecido.

1 resposta
solução!

Olá, Patrick!

Posso estar enganado, mas o que eu acho que está occorrendo é que você está inicializando o array adjacente com tamanho 0 (porquê você define a variável total com valor 0, e depois declara e inicializa o array adjacente com o valor da variável total), então ele não possui nenhuma posição válida.

Uma possível mudança seria inicializar o array dentro do construtor:

class CriaGrafo {
    private static int total = 0;
    private int num;
    boolean adjacente[];

    public CriaGrafo (int Numero) {
        total += 1;
        this.num = Numero;
        this.adjacente = new boolean[this.total];
    }
}

Se você precisa que o tamanho do array adjacente seja dinâmico, deve usar outra estrutura de dados, como um ArrayList, por exemplo.

Espero ter ajudado!