Olá, preciso fazer um Código com algoritmo de algoritmo de dijkstra para faculdade, o código esta pronto, mas deu um erro creio eu pela leitura do txt, não sei se a logica não esta correta mas não consigo fazer funcionar, talvez por ter ficado muito tempo vendo uma coisa só eu não esteja enxergando algo obvio.
O main esta desse jeito:
package djikstra;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
BufferedReader leitorArquivo = null;
try {
File arquivo = new File(Main.class.getClassLoader().getResource("cidades").getFile()); //Obtem o caminho do documento cidades.txt
leitorArquivo = new BufferedReader(new FileReader(arquivo)); //Abre o arquivo
String linha = null;
Grafo grafo = new Grafo();
while((linha = leitorArquivo.readLine()) != null) { //Leitura linha a linha do arquivo
String[] split = linha.split(" "); //Dividiu a linha pelos espaços
String cidadeOrigem = split[0];
String cidadeDestino = split[1];
Double distancia = Double.parseDouble(split[2]);
Vertice verticeDestino = grafo.getVertice(cidadeDestino); //Verifica se o vertice de destino existe
if(verticeDestino == null) {
verticeDestino = new Vertice();
verticeDestino.setNome(cidadeDestino);
grafo.adicionarVertice(verticeDestino);
}
Vertice vertice = grafo.getVertice(cidadeOrigem); //Verifica se o vertice de origem existe, se existir adiciona o vizinho
if(vertice != null) {
vertice.addVizinho(verticeDestino, distancia);
continue; //
}
// Se a cidade de origem nao existir, aqui que e inserida
vertice = new Vertice();
vertice.setNome(cidadeOrigem);
vertice.addVizinho(verticeDestino, distancia);
grafo.adicionarVertice(vertice); //Insere o vertice no grafo
}
leitorArquivo.close(); //Encerra a leitura do arquivo
leitorArquivo = new BufferedReader(new FileReader(arquivo)); //Le o arquivo novamente, para inserir a cidade de origem como vizinho da cidade destino (bidirecional)
while((linha = leitorArquivo.readLine()) != null) {
String[] split = linha.split(" ");
String cidadeOrigem = split[0];
String cidadeDestino = split[1];
Double distancia = Double.parseDouble(split[2]);
Vertice vertice = grafo.getVertice(cidadeDestino); //Obtem a cidade destino e adiciona a cidade origem como vizinho
vertice.addVizinho(grafo.getVertice(cidadeOrigem), distancia);
}
Vertice origem = lerNomeCidade("Digite cidade origem", grafo); //Leitura pelo teclado
Vertice destino = lerNomeCidade("Digite cidade destino", grafo); //Leitura pelo teclado
Double distancia = grafo.obterMenorDistancia(origem, destino);
String resultado = "A distancia de "+ origem.getNome() +" ate " + destino.getNome() +" e de "+ distancia; //Exibe o resultado
JOptionPane.showMessageDialog(null, resultado);
} catch(Exception e) {
throw new RuntimeException(e);
} finally { //Libera o arquivo, se não fica preso em memoria
if(leitorArquivo != null) {
try {
leitorArquivo.close();
} catch (IOException e) {
}
}
}
}
private static Vertice lerNomeCidade(String mensagem, Grafo grafo){
//Enquanto não digitar uma cidade valida continua pedindo a cidade correta
while(true) {
String cidadeDigitada = JOptionPane.showInputDialog(mensagem);
Vertice vertice = grafo.getVertice(cidadeDigitada);
if(vertice == null) {
JOptionPane.showMessageDialog(null, "Cidade nao encontrada!");
continue;
}
return vertice;
}
}
}
o erro que retorna é esse:
Exception in thread “main” java.lang.RuntimeException: java.lang.NullPointerException
at djikstra.Main.main(Main.java:70)
Caused by: java.lang.NullPointerException
at djikstra.Main.main(Main.java:18)
Agradeço desde já