Como funciona o break? [RESOLVIDO]

10 respostas
Rafael_Guerreiro

Olá galera, outra dúvida…

Eu preciso sair de todos os meus loopings quando ele retornar o procedimento…

Estou fazendo desse jeito… Mas com certeza existe um modo mais usual e menos feio… Imagino que seja o break…

for (i = 0; i <= 2; i++)
{
	for (j = 0; j < 20; j++)
	{
		if ((j==10) && (i==1))
		{
			return true;
			i = 2;
			j = 20;
		}
		else
		{
			return false;
		}
	}
}

Se eu usar o break, ele sai de todos os loopings? Ou então, pelo fato de eu usar o return false ele já sai do meu método?

Obrigado a todos.

10 Respostas

juliocesarss

Ele vai parar o laço onde você colocar ele

Exemplo:

for (i = 0; i <= 2; i++)  // Volta pra eese aqui
   {  
       for (j = 0; j < 20; j++)  //ele para esse laço na hora
       {  
           if ((j==10) && (i==1))  
           {  
               return true;  
               i = 2;  
               j = 20;  
           }  
           else  
           {  
               break;  
           }  
       }  
   }

Deu pra entender?

InSeOfKn

Rotule os seu for para escolher qual loop interromper com o break

for1: for (i = 0; i <= 2; i++) { for2: for (j = 0; j < 20; j++) { if ((j==10) && (i==1)) { break for1; } } }

OPS: não testei, mais acho que funciona!

Rafael_Guerreiro

juliocesarss:
Ele vai parar o laço onde você colocar ele

Exemplo:

for (i = 0; i <= 2; i++)  // Volta pra eese aqui
   {  
       for (j = 0; j < 20; j++)  //ele para esse laço na hora
       {  
           if ((j==10) && (i==1))  
           {  
               return true;  
               i = 2;  
               j = 20;  
           }  
           else  
           {  
               break;  
           }  
       }  
   }

Deu pra entender?

Entendi… E quando damos o return, ele sai do método? A ideia é que ele saia do método quando eu der um return true.

Rafael_Guerreiro

InSeOfKn:
Rotule os seu for para escolher qual loop interromper com o break

for1: for (i = 0; i <= 2; i++) { for2: for (j = 0; j < 20; j++) { if ((j==10) && (i==1)) { break for1; } } }

OPS: não testei, mais acho que funciona!

Nossa! Muito inteligente isso, eu posso colocar o nome que eu quiser? Assim facilitaria muito a minha vida!

juliocesarss

Você precisa usar o return pra alguma coisa?

Eu não testei, então eu não sei se ele deixa usar o return e depois o break.

Só testando pra saber, Boa Sorte ! =D

Depois posta ae.

E

Para sair de apenas 1 for, use o break normal.

Para sair de vários níveis de for, use o “labeled break”. Vou dar um exemplo.

int[][] a = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

saida:
for (int i = 0; i < a.length; ++i) {
    for (int j = 0; j < a[i].length; ++j) {
        if (a[i][j] == 5) {
            break saida; // isso vai sair dos 2 níveis de "for"
        }
    }
}
Rafael_Guerreiro
entanglement:
Para sair de apenas 1 for, use o break normal. Para sair de vários níveis de for, use o "labeled break". Vou dar um exemplo.
int[][] a = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

saida:
for (int i = 0; i < a.length; ++i) {
    for (int j = 0; j < a[i].length; ++j) {
        if (a[i][j] == 5) {
            break saida; // isso vai sair dos 2 níveis de "for"
        }
    }
}

Está me parecendo uma espécie de goto...

E o return eu vou usar para um if lá no meu método main.

juliocesarss

Então isso deve resolver:

boolean controle = false;// criei uma variavel pra controlar
        for (int i = 0; i <= 2; i++) {
            for (int j = 0; j < 20; j++) {
                if ((j == 10) && (i == 1)) {
                    controle = true;// Em vez de retornar direto eu guardo o valor na variavel, nesse caso true
                    i = 2;
                    j = 20;
                } else {
                    controle = false;//A mesma coisa aqui, nesse caso false
                    break;// paro o laço
                }
            }
        }

        return controle;// depois retorno a variavel

Ps: não testei.

Rafael_Guerreiro

juliocesarss:
Então isso deve resolver:

boolean controle = false;// criei uma variavel pra controlar
        for (int i = 0; i <= 2; i++) {
            for (int j = 0; j < 20; j++) {
                if ((j == 10) && (i == 1)) {
                    controle = true;// Em vez de retornar direto eu guardo o valor na variavel, nesse caso true
                    i = 2;
                    j = 20;
                } else {
                    controle = false;//A mesma coisa aqui, nesse caso false
                    break;// paro o laço
                }
            }
        }

        return controle;// depois retorno a variavel

Ps: não testei.

Entendi… Muito obrigado… Depois eu começo a postar mais dúvidas e assim vou aprendendo melhor… Agora vou almoçar…

E

No começo era o “goto” - quando o sr. Niklas Wirth escreveu aquele livro “Programação Estruturada em Pascal”, ele dizia que o goto deveria ser usado apenas para tratar uma condição de erro, ou então sair de uma série grande de loops.

No livro dele havia apenas um “goto” - o famoso “goto 99”.

Aí foi criado o “break”, que saía apenas de um nível de loop, e o “try/catch” para tratar erros.
Obviamente, você ainda precisava de um goto para sair de uma série grande de loops. É por isso que o C# ainda tem o “goto” :frowning:

Então, para fechar esse buraco de você querer sair de uma série grande de loops, foi criado o “labeled break”.

Finalmente você não precisa mais usar o goto!

Criado 26 de outubro de 2010
Ultima resposta 26 de out. de 2010
Respostas 10
Participantes 4