Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida no Ex. 2 da Aula 6 - Arrays: trabalhe com muitos dados

for (var i = 0; i < segredos.length; i++) {
        if (segredos[i] == caixaDoNumero.value) {
            achou = true;
            break;
        }
    }

Considerando esse pedaco de codigo, o break quebra o bloco de fora ?

Tenho o bloco do for e do if

for(){
    if (TRUE) {
        BREAK
    }
}

Ele quebra por que o if retorna um break para for ?

6 respostas

Sim, ele irá sair do laço quando atender a condição if.

@Eduardo: sim, neste caso o break quebra o bloco de fora.

A função do break é quebrar o primeiro bloco de repetição dentro do qual ele se encontra. Vamos dar alguns exemplos:

for (int i = 0; i < 10; i++) {
  break;
}

for (int i = 0; i < 10; i++) {
  if (i == 5) {
    break;
  }
}

Nos dois casos acima, o break quebra o laço de repetição for (int i = 0; i < 10; i++).

for (int i = 0; i < 10; i++) {
  for (int j = 10; j < 20; j++) {
    if (i == 5) {
      break; // primeiro break
    }
  }
  break; // segundo break
}

No caso acima, o primeiro break somente quebra o laço for (int j = 10; j < 20; j++), e o segundo break somente consegue quebrar o laço for (int i = 0; i < 10; i++). Isso acontece pois o primeiro laço do primeiro break é o laço que percorre a variável j, seguido então pelo laço que percorre i. O condicional if não interfere na funcionalidade do break, somente impõe uma condição para que este ocorra.

Sim, temos uma condicao true, e dentro dela este break que quebra o for. Posso pensar de forma analoga a um retorno de funcao ?

for (int i = 0; i < 10; i++) {
  break;
}
Soma 1 e quebra

for (int i = 0; i < 10; i++) {
  if (i == 5) {
    break;
  }
}
Soma ate 5 e quebra



for (int i = 0; i < 10; i++) { // entra uma vez
  for (int j = 10; j < 20; j++) { // itera  9 vezes
    if (i == 5) {
      break; // da falso
    }
  }
  break; // envia a parada para este for, logp o i nao incrementa para 2
}
solução!

Na verdade a incrementação da variável ocorre somente ao final do bloco, então seria mais ou menos o que você disse. No primeiro caso seria

Não soma pois quebra antes

e no último seria

logo o i nao incrementa para 1

Pode ser uma analogia sim, mas é um pouco inadequada e pode levar a equívocos no futuro. É mais parecido com uma interrupção forçada, como uma função sem tipo de retorno que é interrompida dada uma condição:

public void funcao() {
  // faz algumas coisas
  if (condicao) {
    return;
  }
  // faz outras coisas
}

Entendi!

Massa!