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

[Dúvida] Lógica do IF dentro do segundo FOR

Toda vez que o segundo FOR entra em loop ele vai realizar a iteração e rodar o if, mas se o break faz parar e zera o loop em que está, como que a coluna vai ser maior que a linha?. Como vai acrescentando mais uma nova coluna a cada linha, se a coluna teoricamente zerou devido ao break?. Me ajudem, já quebrei a cabeça tentando entender isso.

`public static void main(String[] args) { for (int linha = 0; linha <10 ; linha ++) { for(int coluna = 0; coluna <=10; coluna++) { if (coluna > linha) { break; } System.out.print("*"); } System.out.println(); }'

3 respostas

O comando break interrompe o loop em que ele está inserido e o faz sair do loop. No seu código, o break está dentro do segundo loop, ou seja, ele só vai interromper o segundo loop e não o primeiro.

O primeiro loop é responsável por controlar as linhas da saída, enquanto o segundo loop é responsável por controlar as colunas. Cada vez que o segundo loop termina a iteração, ele vai para a próxima linha e a saída de uma nova linha é dada pelo System.out.println().

Então, mesmo que o break interrompa o segundo loop, o primeiro loop vai continuar a execução até atingir o seu limite. Isso faz com que sejam impressas mais de uma linha na saída.

o código pode ser escrito de duas formas:

Opção 1:

for (int linha = 0; linha < 10; linha++) {
  for (int coluna = 0; coluna <= linha; coluna++) {
    System.out.print("*");
  }
  System.out.println();
}

Opção 2:

for (int linha = 0; linha < 10; linha++) {
  for (int coluna = 0; coluna < 10; coluna++) {
    if (coluna > linha) {
      break;
    }
    System.out.print("*");
  }
  System.out.println();
}

A primeira opção remove o break e o segundo loop só será interrompido quando a variável coluna atingir o valor da variável linha. Já a segunda opção mantém o break, mas a condição de parada do segundo loop é mudada para coluna < 10, o que faz com que o loop execute 10 iterações independentemente da condição de interrupção do break.

Espero ter conseguido esclarecer sua dúvida! Se tiver mais alguma pergunta, sinta-se à vontade para perguntar.

Mas o que eu não estou conseguindo compreender é, se o segundo loop é responsável pelas colunas e a cada break ele zera, como ainda assim continua sendo acrescido mais um valor a cada coluna?

solução!

O primeiro loop, o "for (int linha = 0; linha < 10; linha++)", é responsável por controlar o número de linhas que serão impressas na tela. Ele vai de 0 até 9, ou seja, serão impressas 10 linhas.

O segundo loop, o "for(int coluna = 0; coluna <= 10; coluna++)", é responsável por controlar o número de colunas que serão impressas em cada linha. Ele vai de 0 até 10, ou seja, serão impressas 11 colunas em cada linha.

O "if (coluna > linha)" verifica se o número da coluna é maior que o da linha. Se sim, o comando "break" é executado e o loop é interrompido. Caso contrário, o caractere "*" é impresso e o loop continua.

A cada iteração do loop externo, ou seja, a cada nova linha, o loop interno é reiniciado e começa a percorrer as colunas novamente. Isso faz com que a quantidade de colunas seja sempre 11, independentemente do número da linha.

pense que a cada linha do primeiro for, nasce o segundo for e ali mesmo ele morre. a cada linha é como se fosse a primeira vez do segundo for.

Espero que tenha ficado mais claro. Qualquer dúvida, é só perguntar!