Dúvida for

11 respostas
M

Eae pessoal do forúm.
Então… estou lendo o livro dos Deitel e tive uma dúvida aqui numa opção do “for”, por exemplo:

public class Sum {

     public static void main(String[] args) {

          int total = 0;

          for ( int number = 2; number <= 20; total += 20, number += 2) ;

     }

}

Como o compilador le e executa a instrução “for” acima, tipo… alguém poderia fazer o teste de mesa ai por favor?

11 Respostas

Renan_Celso

for (é criada uma variável number e ela é igualada a 2; enquanto number for menor ou igual a 20; incremente 20 no valor da variavel total; incremente o valor de number de 2 em 2 )

Esse for faz a mesma coisa que o código abaixo:

for (int number = 2; number <= 20;number += 2){
total += 20;
}

:slight_smile:

userguj

Broder... é o msm que:

public class Sum {

     public static void main(String[] args) {

          int total = 0;

          for ( int number = 2; number <= 20; number += 2){
                total += 20; 
          } 

     }

}
ou seja, o primeiro item
(total += 20)
do terceiro parametro do método, a cada iteração do loop, adiciona 20 ao valor da variavel total... conseguiu entender :?: :!:

:)

M

putz, desculpem escrevi o código errado.

Alguém poderia fazer o teste de mesa do código abaixo:

public class Sum {

public static void main(String[] args) {

int total = 0;

for ( int number = 2; number <= 20; total += number, number += 2 );

System.out.printf(" sum is %d\n ", total);

}

}
userguj

so muda que agora o valor da variável total vai ser incrementada com o valor da variável number, sakou ?!

eh interessante VC conseguir fazer estes testes tbm… pra treinar e ficar bom…

:slight_smile:

M

Sim então userguj, eu sei o que ele faz, mas gostaria de saber como ele faz, ou seja, o passo a passo que a JVM segue na hora de executar o código. Por isso eu pedi o teste de mesa.

userguj

primeira instruçao
number = 2; total += number

ou seja… number = 2, quando executar total +=number, o total passa a valer 2
dai eli ai incrementa number += 2, ou seja, number agora é igual a 4, pois number = number + 2; sakou ?!
agora number = 4, quando executar total += number, o total passa a valer 6, pois total = total + number, onde total = 2 e number = 4… sakou ?!

i dai vai rolar isso enquanto number <= 20…

M

Agora eu já consegui fazer userguj, é que eu tinha feito o teste de mesa aqui em casa e não tinha dado certo, ai eu pensei que não tinha entendido, mas agora eu refiz e deu certo.

Rivan_Henrique

Fala m-bax.

Dê uma olhadinha no código que fiz, o feedback está no próprio código comentado!
Qualquer dúvida mandaê, espero que ajude!

public class Simulado {
    public static void main(String[] args) {
        new Simulado().forNormal();
        System.out.println("------");
        new Simulado().forTeoria();
    }

    public void forNormal() {
        int total = 0;
        for(int i = 0; i < 5; total = 10, i++) {
            System.out.println(i + " - " + total);
        }
    }

    public void forTeoria() {
        /*
         * Este método é equivalente ao método forNormal(), vamos dizer de uma
         * forma explodida ;)
         */
        int total = 0;
        int i = 0;
        // for([inicialização]; [condição lógica]; [incremento])
        for(;;) { // Laço infinito.
            if(i < 5) {
                System.out.println(i + " - " + total);
            } else {
                break;
            }
            /*
             * Últimas instruções a serem executadas no laço, ou seja, as que
             * veêm depois do segundo (;).
             * Depois de imprimir na tela você vai reparar que a primeira
             * impressão de total vai ser igual a "0", devido ela ser a última
             * parte do laço.
             */
            total = 10;
            i++;
        }
        /*
         * Observando a forma como o for é construido, a parte de
         * inicialização vem antes do primeiro (;), então como mostrado acima
         * é como se a variável fosse criada antes do laço começar,
         * exatamente como mostrado, nesta parte também poderia ser criado
         * mais variáveis do mesmo tipo, por exemplo(int i = 0, j = 10;;).
         * Entre o primeiro (;) e o segundo, é onde fazemos o teste lógico
         * para dar continuidade ou parar o laço.
         * E por fim na terceira parte, ou seja, depois do segundo (;) é onde
         * o laço é incrementado, podendo atribuir valores a variáveis que
         * pertençam ao escopo do método e que tenham sido inicializadas.
         */
    }
}

plugado!

Rivan_Henrique

Opa não tinha visto o seu post :lol:

plugado!

userguj

Tranquilo…

Abraços !!

M

Opa rivan henrique,
Eu já tinha entendido essa condição do for, onde vc pode colocar várias expressões separadas por virgulas nas expressões de inicialização e incremento, e como elas são executadas pela JVM.
Mas mesmo assim muito obrigado por se dar ao trabalho de desenvolver esse código e comentá-lo ahahha.
É sempre bom ver pessoas no fórum com o intuito de ensinar ao invés de criticar.

Criado 29 de junho de 2011
Ultima resposta 29 de jun. de 2011
Respostas 11
Participantes 4