Onde esta o erro?

13 respostas
bru_1987

E ai galera!
Eu gostaria de saber aonde esta o erro em converter a seguinte expressao…

for(int i = 0; i < 4; i++) {

if (i % 3 == 0) continue;

sum += i;

}

Nesta aqui…

int i = 0;

while (i < 4) {

if (i % 3 == 0) continue;

sum += i;

i++;

Mto obrigado desde ja!
=)

13 Respostas

A

voce nao esta declarando a variavel SUM

bru_1987

Imagine que eu ja tivesse declarado previamente. 'E que na verdade existe um erro na conversao de um loop para o outro. Tem alguma ideia arthur?

A

nao entendi!! esses dois loops um esta seguido do outro?!

bru_1987

Ele esta convertendo um loop for para um while (os dois com um if dentro). So que existe um erro, isso ele ja diz, e pede para achar aonde esta esse erro!

Adriano_Almeida

no while, qdo a expressão:

if (i % 3 == 0)

é verdadeira, ele vai pro próximo passo do loop (continue) (sem incrementar i). Logo, vc acaba tendo um looping infinito por isso!

No for isso não acontece porque a mesmo com o continue, ele vai incrementar a variável i.

bru_1987

Mas ele incrementa o i com o i++ no final, nao?

Adriano_Almeida

Não, ele não incrementa. Explico o porque:

a palavra chave continue faz com que o seu looping vá para a próxima iteração imediatamente. Assim sendo, ele não chega a passar pelo código que incrementa i.

Esse problema seria resolvido se a primeira linha dentro do seu while fosse o i++.

Entendeu?

bru_1987

Entendi sim! Perfeitamente! Mto obrigado pela ajuda!
Abraços!
:slight_smile:

mari_sm

alem de nao ter declarado a variavel sum, e alem de nao ter fechado a ultima chave, tua conversao tem 1 erro de logica.

while (i < 4) {

if (i % 3 == 0) continue;

sum += i;

i++;

}

essa é a tua conversao … o problema dela é que tudo o que vem depois do continue nao vai ser executado se o if for verdadeiro. logo a variavel i nao vai sempre ser incrementada e tu vai ficar num loop eterno.

uma solucao seria:

while (i < 4) {

if ( i % 3 == 0){

i++;

continue;

}

sum += i;

i++;

}

deve haver alguma mais elegante. poste ai quem souber.

douglasrusso

Se eu não estiver enganado, tenho aqui outras soluções:

while (i < 4) { 
  if ( i % 3 != 0){ 
    sum += i;
  } 
  i++; 
}

ou

while (i<4)
  sum += i % 3 == 0 ? 0 : i++;

abs.

mari_sm

gostei dessa ultima solucao minimalista : P

LPJava

poe o erro que deu…

G
while (i < 4) {

if ( i % 3 != 0){

sum += i;

}

i++;

}

Solução mais correta enviada no fórum,o contador andará independente do resultado,mas sum só receberá valor quando i for diferente de 0

Criado 29 de janeiro de 2007
Ultima resposta 29 de jan. de 2007
Respostas 13
Participantes 7