Carlos Rocha Posted October 13, 2014 Report Share Posted October 13, 2014 Pessoal, boa tarde! Estou com o seguinte problema: Tenho a classe Principal.java abaixo que possui um for dentro de outro for. Tudo funciona bem. Mas um problema ocorre. Dentro do segundo for , tenho um if que se satisfeito chama um break. E a intenção aqui é que o break pare apenas o segundo for para que, assim que parar ele, chegue no if(achei) abaixo. Mas esta parando os 2 for. Onde estou errando? import java.util.ArrayList; public class Principal { public static void main (String args[]) { CriaListas listaPossivel = new CriaListas("arquivoPossiveis.txt"); CriaListas listaObrigatorio = new CriaListas("arquivoObrigatorios.txt"); ArrayList<Ligacoes> listaDePossiveis = listaPossivel.populaArrayList(); ArrayList<Ligacoes> listaDeObrigatorios = listaObrigatorio.populaArrayList(); boolean achei; for (int i = 0; i < listaDeObrigatorios.size(); i++) { int pontoOA = listaDeObrigatorios.get(i).getPontoA(); int pontoOB = listaDeObrigatorios.get(i).getPontoB(); achei = false; int pontoPA; int pontoPB; int pontoPDistanciaAB = 0; for (int j = 0; j < listaDePossiveis.size(); j++) { pontoPA = listaDePossiveis.get(j).getPontoA(); pontoPB = listaDePossiveis.get(j).getPontoB(); pontoPDistanciaAB = listaDePossiveis.get(j).getDistanciaAB(); if( ( (pontoOA == pontoPA) || (pontoOA == pontoPB) )&& ( (pontoOB == pontoPA) || (pontoOB == pontoPB) ) ) { //O ponto escolhido esta na ArrayList Possíveis. //Então, mostra a distancia. achei = true; break; } } if(achei) { BuscaMelhorCaminho melhorCaminho = new BuscaMelhorCaminho(pontoOA, pontoOB, listaDePossiveis, pontoPDistanciaAB); int melhorCaminhoNo = melhorCaminho.buscarMelhorCaminho(); System.out.println(melhorCaminhoNo); } else { System.out.println("Achei não!"); } } } } Link to comment Share on other sites More sharing options...
saca-rolhas Posted October 13, 2014 Report Share Posted October 13, 2014 Só uma ideia em vez do break, que tal dentro do if satisfazeres a condição do 2º for neste caso por o j = listaDePossiveis.size(); The worst part of censorship is **** Link to comment Share on other sites More sharing options...
Carlos Rocha Posted October 13, 2014 Author Report Share Posted October 13, 2014 tendi não! Link to comment Share on other sites More sharing options...
saca-rolhas Posted October 13, 2014 Report Share Posted October 13, 2014 Só uma ideia em vez do break, que tal dentro do if satisfazeres a condição do 2º for neste caso por o j = listaDePossiveis.size(); Se em vez de break; meteres isto j = listaDePossiveis.size(); o que acontece? The worst part of censorship is **** Link to comment Share on other sites More sharing options...
Carlos Rocha Posted October 13, 2014 Author Report Share Posted October 13, 2014 (edited) Mesmo retorno! Se eu fizer: ... for (int i = 0; i < listaDeObrigatorios.size(); i++) { int pontoOA = listaDeObrigatorios.get(i).getPontoA(); int pontoOB = listaDeObrigatorios.get(i).getPontoB(); achei = false; int pontoPA; int pontoPB; int pontoPDistanciaAB = 0; System.out.println(pontoOA); System.out.println(pontoOB); System.out.println(); for (int j = 0; j < listaDePossiveis.size(); j++) { pontoPA = listaDePossiveis.get(j).getPontoA(); pontoPB = listaDePossiveis.get(j).getPontoB(); pontoPDistanciaAB = listaDePossiveis.get(j).getDistanciaAB(); if( ( (pontoOA == pontoPA) || (pontoOA == pontoPB) )&& ( (pontoOB == pontoPA) || (pontoOB == pontoPB) ) ) { //O ponto escolhido esta na ArrayList Possíveis. //Então, mostra a distancia. achei = true; //break; //listaDePossiveis.size(); } System.out.println(pontoPA); System.out.println(pontoPB); System.out.println(pontoPDistanciaAB); System.out.println(); System.out.println(); } if(achei) { BuscaMelhorCaminho melhorCaminho = new BuscaMelhorCaminho(pontoOA, pontoOB, listaDePossiveis, pontoPDistanciaAB); int melhorCaminhoNo = melhorCaminho.buscarMelhorCaminho(); //System.out.println(melhorCaminhoNo); } else { //System.out.println("Achei não!"); } } A impressão sai correta. Se eu liberar o break, aí o primeiro loop do for(i=0) não ocorre e o segundo for (j=0..) não faz a ultima volta. O loop esta sendo feito corretamente. Mas deve passar pela validação do if(achei) para chamar a classeBuscaMelhorCaminho. Edited October 13, 2014 by carcleo Link to comment Share on other sites More sharing options...
Carlos Rocha Posted October 13, 2014 Author Report Share Posted October 13, 2014 (edited) Achei. Agora outro problema: O que tem de errado nessa classe? import java.util.ArrayList; public class BuscaMelhorCaminho { int pontoA, pontoB, distancia; ArrayList<Ligacoes> Possiveis; BuscaMelhorCaminho(int pontoA, int pontoB, ArrayList<Ligacoes> Possiveis, int distancia) { this.pontoA = pontoA; this.pontoB = pontoB; this.distancia = distancia; this.Possiveis = Possiveis; } public ArrayList<int> buscarMelhorCaminho () { ArrayList<int> vizinhosB = new ArrayList<int>(); for (int j = 0; j < this.Possiveis.size(); j++) { int pontoPA = this.Possiveis.get(j).getPontoA(); int pontoPB = this.Possiveis.get(j).getPontoB(); int pontoPDistanciaAB = this.Possiveis.get(j).getDistanciaAB(); if( ( (pontoPA == this.pontoB) || (pontoPB == this.pontoB) ) && pontoPA != this.pontoA && pontoPB != this.pontoA ) { //Existe vizinho de B. //Logo, armazenemos esses vizinhos em um ArrayList vizinhosB para depois ver quem é mais perto. vizinhosB.add(pontoPA); vizinhosB.add(pontoPB); vizinhosB.add(pontoPDistanciaAB); } } return vizinhosB; } } Erro de compilação C:\java\AD2>javac BuscaMelhorCaminho.java BuscaMelhorCaminho.java:16: error: unexpected type public ArrayList<int> buscarMelhorCaminho () ^ required: reference found: int BuscaMelhorCaminho.java:18: error: unexpected type ArrayList<int> vizinhosB = new ArrayList<int>(); ^ required: reference found: int BuscaMelhorCaminho.java:18: error: unexpected type ArrayList<int> vizinhosB = new ArrayList<int>(); ^ required: reference found: int 3 errors C:\java\AD2> Edited October 13, 2014 by carcleo Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now