Cidade Vizinha netbeans

Me ajuda galera não estou conseguindo concluir.

import javax.swing.JOptionPane;

/**
*

  • @author Elisabete
    */
    public class P {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      String cidade = null;
      String nCidade;
      String nHabitantes;
      String prefeito;
      String Vizinho;
      String cidadeInicial;
      String cidadeAtual;

      int x = 0, cont =1;

      String Cidade = JOptionPane.showInputDialog(null, “ESCOLHA A OPÇÃO DESEJADA”
      + “\n1) CADASTRAR CIDADE”
      + “\n2) MOSTRA CIDADES CADASTRADAS”
      + “\n3) ESCOLHA A CIDADE”
      + “\n4) MENOR CAMINHO”,“CIDADE VIZINHA”, JOptionPane.PLAIN_MESSAGE);

      do {
      if(Cidade.toUpperCase().equals(“1”)){
      nCidade = JOptionPane.showInputDialog(null,"Nome Da Cidade: ",“CADASTRO”, JOptionPane.PLAIN_MESSAGE);
      nHabitantes = JOptionPane.showInputDialog(null,"QUANTIDADE DE HABITANTES: ",“CADASTRO”, JOptionPane.PLAIN_MESSAGE);
      prefeito = JOptionPane.showInputDialog(null,"NOME DO PREFEITO: ",“CADASTRO”, JOptionPane.PLAIN_MESSAGE);
      Vizinho = JOptionPane.showInputDialog(null,"VIZINHOS: ",“CADASTRO”, JOptionPane.PLAIN_MESSAGE);
      x = Integer.parseInt(JOptionPane.showInputDialog(null,“Digite a tecla 1 para sair ou 0 para cadastrar outra cidade”));
      }cont++;
      }while ((x==0)&&(cont<=7));

      if(Cidade.toUpperCase().equals(“2”)){

      }
      switch (cidade) {
      case ‘A’: cidadeAtual = Vizinho b & c;
      break;
      case ‘B’: cidadeAtual = Vizinho c & e;
      break;
      case ‘C’: cidadeAtual = Vizinho d & b;
      break;
      case ‘D’: cidadeAtual = Vizinho e & c;
      break;
      case ‘E’: cidadeAtual = Vizinho F & D;
      break;
      case ‘F’: cidadeAtual = Vizinho e & g;
      break;
      case ‘G’: cidadeAtual = Vizinho f;

    if(Cidade.toUpperCase().equals(“3”)){
    Object[] cidade = {“Cidade A”,“Cidade B”, “Cidade C”, “Cidade D”, “Cidade E”, “Cidade F”, “Cidade G”};

     String c = String.valueOf(JOptionPane.showInputDialog(
     null, "Escolha a cidade desejada", "Escolha", JOptionPane.QUESTION_MESSAGE,null, cidade, cidade[1]));
     
     System.out.println(c);
     
     }cont++;
     }while ((x==0)&&(cont<=7));
    
     if(Cidade.toUpperCase().equals("")){
    
             
    
     }
    

    }
    }

Qual o real problema? Poderia detalhar sua dificuldade?

public class Vertice {
private final String referencia;
private float peso;
private final ArrayList arestas = new ArrayList<>();
private String caminho = null;

public Vertice(String referencia) {
    this.referencia = referencia;
}

public String getReferencia() {
    return referencia;
}

public float getPeso() {
    return peso;
}

public void setPeso(float peso) {
    this.peso = peso;
}

public ArrayList<Aresta> getArestas() {
    return arestas;
}

    public int compareTo(Vertice outroVertice) {
    return Float.compare(peso, outroVertice.peso);
}

    public static void menorCaminho(Vertice origem, Vertice destino, ArrayList<Vertice> grafo) {
    //primeiro todos os pesos do grafo são declarados como o maior valor possível
        grafo.forEach(vertice -> {
        vertice.peso = Float.POSITIVE_INFINITY;
    });

    //a variável origem deve estar contida no grafo e o peso dela é inicializado com 0
    origem.setPeso(0);
    origem.caminho = origem.referencia;//inicializando o caminho

    //vamos precisar de SOMENTE uma lista para atualizar o peso dos vértices
    ArrayList<Vertice> fila = new ArrayList<>(grafo);//todos os vertices foram adicionados à "FILA"

    //enquanto houver elementos na fila removemos o elemento com o menor peso e atualizamos os demais
    while (!fila.isEmpty()) {
        Vertice menor = verticeMaisLeve(fila);
        //vamos procurar os vertices vizinhos utilizando a referência como parâmetro
        for (Aresta aresta : menor.getArestas()) {//para cada aresta
            for (Vertice vertice : grafo) {//verificamos cada vertice no grafo, ou seja não verifico a fila e sim o grafo
                if (vertice.getReferencia().equals(aresta.getReferencia())) {//filtro para atualização dos pesos pela referencia
                    if (vertice.peso > menor.peso + aresta.getDistancia()) {
                        vertice.setPeso(menor.peso + aresta.getDistancia());
                        vertice.caminho = menor.caminho + " > " + vertice.referencia;
                    }
                    break;
                }
            }
        }
    }
    JOptionPane.showMessageDialog(null, "MENOR CAMINHO DE "+origem.getReferencia()+" a "
            + destino.referencia+"\n"+(destino.caminho == null? "As cidades não se comunicam ":destino.caminho)+" \n"); 
}

private static Vertice verticeMaisLeve(ArrayList<Vertice> fila) {
    //como implementamos o comparable, podemos usar ordenar a coleção com ferramentas do java
    Collections.sort(fila);//ordenando a fila de acordo com o peso de cada vétice
    return fila.remove(0);//retornamos o menor elemento da fila e o removemos da fila (obs.: em uma instrução)
}

}

Esta dando erro