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

com o while dá errado.

tentei fazer o mesmo prograça utilizando o while, mas o programa não obedece o limite de 10. alguem pode me dizer poque?

public class TestaLacos {
    public static void main(String[] args) {
        int contador = 0;
        int multiplo = 0;
        while(contador <=10) {
            System.out.println(contador);
            contador ++;
            while(contador <=100) {
                multiplo++;
                System.out.println(contador * multiplo);

            }
        }

    }
}
5 respostas

Ola Marcos,

ao entrar no loop interno, o contador não está sendo incrementado.

como assim?

solução!

Como a variável contador não está sendo incrementada no while interno, o loop fica infinito pq o valor da variável será sempre o mesmo.

while(contador <=10) { 
    System.out.println(contador); 
    contador ++; 
    while(contador <=100) { 
        multiplo++; 
        System.out.println(contador * multiplo);
    }
}

Olá Marcos, tudo bem?

No segundo while, você deve ter se enganado ao declarar contador ao invés de multiplo:

  while(contador <=100) {  multiplo++; 

E após a chave do println, zere o multiplo, desta forma: multiplo = 0. Em alguns casos de encadeamento com while, precisamos fazer isto.

Espero ter ajudado!

Oi Marcos, tudo bem?

É como os nossos colegas já disseram. No segundo while, temos como condição, o contador ser menor ou igual a 100, porém perceba que o que está sendo incrementado a cada execução do laço é o multiplo, e não o contador, portanto o contador contador nunca terá seu valor alterado e por consequência, o laço entra em um loop infinito, sem nunca parar de ser executado.

while (contador <= 100) {
    multiplo++;
    System.out.println(contador * multiplo);
}

Já vimos como "transformar" um while em um for nessa atividade. Fazer o inverso não é tão diferente, vamos pegar como base o código feito em aula com o for:

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();
}

Aqui vou mudar "multiplicador" para "multiplo" para que faça mais sentido levando em conta o nome da sua variável

Para começar, antes de criarmos o primeiro while que itera o multiplo, vamos declarar e inicializar o multiplo valendo 1, dessa forma o programa não irá imprimir os múltiplos de 0. Depois sim, iremos criar um while que roda até o multiplo chegar em 10.

public static void main(String[] args) {
    int multiplo = 1;
    while (multiplo <= 10) {

Agora, faremos a mesma coisa com o segundo while que fará a iteração do contador. Perceba que declarando o contador dentro do primeiro while, toda vez que o programa terminar de imprimir todos os múltiplos de um número, conseguimos zerar o contador para que ele já fique pronto para ser calculado pelo próximo múltiplo:

public static void main(String[] args) {
    int multiplo = 1;
    while (multiplo <= 10) {
        int contador = 0;
        while (contador <= 10) {

Agora é que acontece a mágica, a cada execução do segundo while, iremos imprimir o resultado de contador * multiplo e, em seguida, incrementamos o contador:

public static void main(String[] args) {
    int multiplo = 1;
    while (multiplo <= 10) {
        int contador = 0;
        while (contador <= 10) {
            System.out.print(contador * multiplo);
            System.out.print(" ");
            contador++;
        }

E por fim, agora que já temos código suficiente para imprimir os múltiplos de pelo menos um número, vamos incrementar o multiplo. Assim, ao final de cada execução do primeiro while, incrementamos seu valor para que na próxima execução usemos o próximo número na sequência:

public static void main(String[] args) {
    int multiplo = 1;
    while (multiplo <= 10) {
        int contador = 0;
        while (contador <= 10) {
            System.out.print(contador * multiplo);
            System.out.print(" ");
            contador++;
        }
        multiplo++;
        System.out.println();
    }
}

Testando o código, o resultado deve ser algo similar ao feito em aula com o for:

0 1 2 3 4 5 6 7 8 9 10 
0 2 4 6 8 10 12 14 16 18 20 
0 3 6 9 12 15 18 21 24 27 30 
0 4 8 12 16 20 24 28 32 36 40 
0 5 10 15 20 25 30 35 40 45 50 
0 6 12 18 24 30 36 42 48 54 60 
0 7 14 21 28 35 42 49 56 63 70 
0 8 16 24 32 40 48 56 64 72 80 
0 9 18 27 36 45 54 63 72 81 90 
0 10 20 30 40 50 60 70 80 90 100 

Espero ter ajudado, qualquer dúvida é só avisar!

Bons estudos!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software