Variaveis Primitivas para um novato! (Resolvido)

Gente é o seguinte to querendo aprender, mas sabem como é to seguindo uma apostila da Caelum FJ11 - com orientacao a objetos. Estou indo até bem so que parei na parte voltada a controle de fluxo e variaveis.
Sei que para os experts isso deve ser baba mas para mim to quebrando a cabeça. O codigo a seguir é um exercicio, onde tem que fazer imprimir de 150 a 300. O javac compilou bonitinho só que nao aparece o resultado, fica lá e nada. Gostaria muito que alguém me desse uma luz. Segue abaixo o codigo do exercicio que não aparece nem resultado nem erro.

Imprima todos os números de 150 a 300.

public class Exercicio1 {

public static void main (String [] args) {

int i = 150;
while (i < 300);

System.out.println (i);
i = i ++;

}

}

Obrigado

Thebadshark

Seu código nao possui erro mas também nao imprime nada porque nao tem mesmo que imprimir. Olhe isso:

while (i < 300);

Enquanto i < 300, faça NADA.

O System.out.println está fora do loop alem do que está gerando um loop infinito, pois o i nunca é incrementado.

[]'s

Na parte de imprimir 150 a 300 pode fazer assim

[code]
for(int i=150 ;i&lt=300;i++){
System.out.println (i);

        }
  [/code]

abraço

Cara,

Reveja a sintaxe do código que você postou. Ao final da linha do while, vc não pode colocar o ‘;’ ! =) E sim a chave {, para iniciar um bloco de comandos, que deverá ser executado enquanto a condição for satisfeita.

E dê preferencia por i = i + 1, fica mais claro =)

Tente novamente os exercicios, e poste seus progressos =)

Um Abraço.

Amigão, o seu exercício 1 estava certo, exceto pelo ponto e virgula depois do while . . . . while é um bloco e tem como delimitadores as chaves ( “{}”)

public class Exercicio1 {

	public static void main(String[] args) {

		int i = 150;
		while (i < 300) {

			System.out.println(i);
			i++;
		}

	}

}

Para vc visualizar os resultados … acredito eu q vc ta tentando fazer o primeiro exercicio … vc tem q usar o laço for …

Ficando assim seu exercicio.

[code]public class Exercicio1 {

public static void main(String[] args) {

	for (int i = 150; i <= 300; i++) {
		System.out.println(i);
	}

}

}[/code]

Bele …

Agora tenta fazer os outros … a medida q ir surgindo duvidas é só pergunta…

Ok

T+

Galera muito brigado pela tão pronta resposta.

Agora vou tentar os outros gostei do for e vou tentar utiliza-lo para os outros exercicios.

Caso tenha duvidas espero poder contar com voces novamente.

O código que deu certo foi esse.

public class Exercicio1 {

public static void main (String [] args) {

for (int i= 150 ; i<=300; i++ ) {

System.out.println (i);


	}

}

}

Obrigado!

The Badshark

[quote=du123]Cara,

Reveja a sintaxe do código que você postou. Ao final da linha do while, vc não pode colocar o ‘;’ ! =) E sim a chave {, para iniciar um bloco de comandos, que deverá ser executado enquanto a condição for satisfeita.

E dê preferencia por i = i + 1, fica mais claro =)

Tente novamente os exercicios, e poste seus progressos =)

Um Abraço.

[/quote]

sempre que puder, use estruturas do tipo i++, pois a jvm vai otimizá-lo de acordo com o ambiente onde ele for executado

O javac gera bytecodes diferentes:

// i++

   0:   iconst_0
   1:   istore_1
   2:   iinc    1, 1
   5:   iload_1
   6:   ireturn

// i = i + 1
   0:   iconst_0
   1:   istore_1
   2:   iload_1
   3:   iconst_1
   4:   iadd
   5:   istore_1
   6:   iload_1
   7:   ireturn

Mas se fosse esse o problema de performance das minhas aplicacoes, eu tava dando pulinhos. Nao se usa operadores de incremento pq eh mais rapido, se usa operadores de incremento pq eles consomem muito menos processamento cerebral pra entender. :wink:

Alias, o bytecode pode ate ser diferente, mas qualquer JVM que sirva pra alguma coisa que nao seja atirar na mae de quem a fez tem essa otimizacao, e dezenas, talvez centenas de outras.

O ganho é irrisório…
Questão de opnião. Eu prezo pela relação clareza x custo …

Tks! =)

Julgando pelo bytecode você deve ter feito algo tipo:

    public int method1() {
        int i = 0;
        i++;
        return i;
    }

    public int method2() {
        int i = 0;
        i = i + 1;
        return i;
    }

É interessante (ou talvez nem tanto :slight_smile: ) notar que eclipse cria o mesmo bytecode para ambos métodos, utilizando sempre a instrução iinc.

   0:   iconst_0
   1:   istore_1
   2:   iinc    1, 1
   5:   iload_1
   6:   ireturn

[]s,
Sami