1
resposta

Não entendo a lógica

O seguinte código vai exibir uma matriz de tabuadas. Será que alguém consegue me explicar porque isso acontece?! A minha dificuldade é interpretar o que vai acontecer, só lendo o código. Não sei se me fiz entender.

public class TestaLacos {

    public static void main(String[] args){

        for (int multiplicador = 1; multiplicador <= 10; multiplicador++) {
            for(int contador = 0; contador <= 10; contador++) {
                System.out.print(multiplicador * contador);
                System.out.print(" ");
            }
            System.out.println();
        }

}

}

1 resposta

Fala João Paulo, beleza? Então, pra explicar isso você precisa ter o conhecimento prévio do loop for, sem isso é complicado entender o laço aninhado mesmo. Mas vamos lá: Imagine um for comum

 for (int i = 1; i<= 10; i++) {
    System.out.println(i)
}

pra esse caso a variável i será imprimida de 1 a 10, sempre pulando linha, correto? Isso acontece porque todas as vezes que você imprime a variável i, seu loop for reinicia já com o incremento 1a vez- i = 1 2a vez i = i + 1 E por ai vai.

Para entender o laço aninhado esse conceito é muito importante por o laço externo vide

for(int i = 1; i <=10; i++){
    for(int j = 0 ; j <= 10; j++)    {
        System.out.print( j * i)
    }
}

Nesse caso o laço for externo é o da variável i, portanto o interno é o da variável j.

Pra esse caso, o laço externo é ativado uma vez onde ocorre a ativação do laço interno feito

laço externo --> ativa laço interno; nota* caso haja alguma instrução antes do laço interno, ele executará, por exemplo se pedir para imprimir alguma coisa. A partir dai começa a rodar o laço interno. No exemplo acima, imprime o resultado da multiplicação entre j e i. O programa executa esse laço interno completo vide:

j = 0 && i = 1 --> 0 *1; j = 1 && i = 1 --> 1 *1; . . . . . j = 10 && i = 1--> 10 *1;

E quando terminar essa ultima execução onde j = 10, volta para o laço externo, acrescendo o i por 1 dado a parte do for i++. Então, volta a executar o laço interno mais uma vez:

j = 0 && i = 2 --> 0 * 2; j = 1 && i = 2 --> 1 * 2; . . . . . j = 10 && i = 2 --> 10 * 2;

Ao executar, volta para o laço externo e acresce mais uma vez o valor de i; e por ai vai. Espero ter dado para entender. Abraços!