Ajuda com outer, por favor

Fala pessoal , blz?

Agluém pode me explicar por favor o que seria este outer nesta pergunta :

What will be output by the following code?

public class MyFor{
    public static void main(String argv[]){
	int i;
	int j;
    outer:
	for (i=1;i <3;i++)
	    inner:
	for(j=1; j<3; j++) {
	    if (j==2)
		continue outer;
	    System.out.println("Value for i=" + i + " Value for j=" +j);
	}
    }

}
  1. Value for i=1 Value for j=1
  2. Value for i=2 Value for j=1
  3. Value for i=2 Value for j=2
  4. Value for i=3 Value for j=1

“outer” se refere ao primeiro FOR (que é labeled)…Quando é dado “continue outer”, aquela iteração de “outer” é interrompida, o iterador é incrementado e segue ao próximo loop.

Ah sim, as respostas corretas seriam 1 e 2.

[quote=dkenji]Fala pessoal , blz?

Agluém pode me explicar por favor o que seria este outer nesta pergunta :

What will be output by the following code?

public class MyFor{
    public static void main(String argv[]){
	int i;
	int j;
    outer:
	for (i=1;i <3;i++)
	    inner:
	for(j=1; j<3; j++) {
	    if (j==2)
		continue outer;
	    System.out.println("Value for i=" + i + " Value for j=" +j);
	}
    }

}
  1. Value for i=1 Value for j=1
  2. Value for i=2 Value for j=1
  3. Value for i=2 Value for j=2
  4. Value for i=3 Value for j=1 [/quote]

Significa o seguinte.

Quando o método chegar no if (j==2) e esssa condição for verdadeira ele nao printa nada
Ele simplesmente, volta pro primeiro for…

,entendeu ??

As declaracões outer: e inner: que você vê aí são chamadas de rótulos.

Os rótulos podem ser aplicados em laços de repetições, quando temos, como neste exemplo que você colocou, laços for aninhados. Rotulando os laços for, você pode estar dentro de um laço - o mais interno por exemplo - e desejar que quando alguma expressão seja satisfeita, você caia fora do laço mais externo.

Se você dizer dentro do for “inner” que você quer sair fora do “for outer”, será isso que acontecerá. Ou ao invés de sair (que usa a instrução break) você pode desejar encerrar a iteração atual do loop interno, e continuar no loop externo, então é só usar a instrução continuar (em inglês continue).

Deu pra entender??

Valeu Pessoal , obrigado!

[code] public class MyFor{
public static void main(String argv[]){
int i;
int j;
outer:
for (i=1;i <3;i++) //1-)
inner:
for(j=1; j<3; j++) { //2-) 5-)
if (j==2) //3-)
continue outer;
System.out.println(“Value for i=” + i + " Value for j=" +j); //4-)
}
}

} [/code]
1-)Primeiro ele começa pelo primeiro loop do outer - externo, i=1
2-)Entra no loop interno - inner do primeiro loop i=1, i continua valendo 1 e vai entrar no primeiro loop do for interno - inner, j=1
3-)Ainda no primeiro loop do for interno aonde i = 1 e j = 1, não entra no teste if(j==2) retornando false porque j esta valendo 1, sendo assim não entrara no continue outer.
4-)agora ainda no primeiro loop - interno vai imprimir os 2 valores atuais das variáveis Value for i=1 Value for j=1
5-) Ainda no “loop interno inner” agora j valendo 2 aonde o if vai retornar true e entrar no continue, ou seja não vai imprimir o Value for i=" + i + " Value for j=" +j porque ele esta encerrando a iteração atual do loop interno e passando para o loop interno aonde vai começar tudo de novo com o i=2, e entrando no loop interno para imprimir Value for i=2 Value for j=1 e depois encerrando o loop interno com continue e automaticamente o externo.

Me corrijam se estiver errado.