Jump to content

break dentro de for que esta dentro de outro for parando ambos for


Carlos Rocha
 Share

Recommended Posts

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

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 by carcleo
Link to comment
Share on other sites

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 by carcleo
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.