Loops, Ajuda! - Resolvido

E ae pessoal! Estou com uma dúvida aqui, se puderem ajudar, ficarei muuuito agradecido! Seguinte, fiz o seguinte código:

[code]
double populacaoEurasia = 1000;
double populacaoEstasia = 5000;
double populacaoOceania = 10000;

    System.out.printf("%5s%30s%30s%30s\n"
            ,"ano","Eurasia", "Estasia", "Oceania");
    for (int i = 0; i <= 1000; i += 10){
        
        double totalEurasia = populacaoEurasia*Math.pow(1 + 0.02, i);
        double totalEstasia = populacaoEstasia*Math.pow(1 + 0.01, i);
        double totalOceania = populacaoOceania*Math.pow(1 + 0.005, i);

        System.out.printf("%5d%,30.2f%,30.2f%,30.2f\n"
                , i, totalEurasia, totalEstasia, totalOceania);
    }

}

}[/code]

Mas a cada 100 anos a população deve diminir pela metade! tentei colocar outro for, mas está dando erro, se alguém puder ajudar a casa agradece! abs!

qual erro?

Cai num loop infinito, pensei em usar o if, tipo:

if (i == 100){ totalEurasia = totalEurasia/2; totalEstasia = totalEstasia/2; totalOceania = totalOceania/2; }

Pensei assim, qdo o i == 100, ele divide a população somada até então por 2, mas fica num loop infinito.

posta seu codigo que cai em loop infinito

então foi o if que eu postei acima, tentei mudar ele agora para:

if (i/10 <= 10){ totalEurasia = totalEurasia/2; totalEstasia = totalEstasia/2; totalOceania = totalOceania/2; }

mas tb nao deu certo, será que eu devo usar um for dentro do for?? alguém sabe como fazer isso?? acho que estou errando na lógica do raciocínio…

Não sei se pode ajudar a entender o meu problema, no Deitel 6 ed, na página 133, tem um exemplo com a mesma idéia, mas ele não muda o valor inicial, neste exemplo seria como se eu quisesse mexer no deposito. Alguma idéia por ai??

ninguém?

Cara, para imprimir o calculo de 100 em 100 anos faça o seguinte:

 for (int i = 0; i <= 1000 ; i += 10){
			 if(i % 100 == 0){
				 double totalEurasia = populacaoEurasia*Math.pow(1 + 0.02, i);  
			     double totalEstasia = populacaoEstasia*Math.pow(1 + 0.01, i);  
			     double totalOceania = populacaoOceania*Math.pow(1 + 0.005, i);  
			     System.out.printf("%5d%,30.2f%,30.2f%,30.2f\n"  
			                 , i, totalEurasia, totalEstasia, totalOceania);
			 }
		 }  

Agora, nao constatei nenhum loop infinito!

Outra coisa, nao entendi porque os totais deveriam diminuir. Explique-se melhor!

Ate mais

É um controle de população, eurasia, estasia e oceania são continentes, e a cada 100 anos, ocorre um desastre que diminui pela metade a população, e a partir disto deve-se analisar o processo, vou testar seu código p ver como fica! Vlw pela ajuda!!!

Bem galera, esta quase saindo!!
fiz isso aki agora:

if ((i)/100 != 0 && (i)%100 == 0){//acontece desastre totalEurasia = totalEurasia/2; totalEstasia = totalEstasia/2; totalOceania = totalOceania/2; }

mas ainda esta errado!

ele progride certo até o ano 100, no ano 100 a população diminui pela metade, e no ano 110, ela está normal, como se não fizesse diferença a queda pela metade!! o código ficou assim:

[code] double populacaoEurasia = 1000;
double populacaoEstasia = 5000;
double populacaoOceania = 10000;

    System.out.printf("%5s%30s%30s%30s\n", "ano", "Eurasia", "Estasia", "Oceania");
    for (int i = 0; i <= 1000; i += 10) {                            

        double totalEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
        double totalEstasia = populacaoEstasia * Math.pow(1 + 0.01, i);
        double totalOceania = populacaoOceania * Math.pow(1 + 0.005, i);

       if ((i)/100 != 0 && (i)%100 == 0){//acontece desastre
            totalEurasia = totalEurasia/2;
            totalEstasia = totalEstasia/2;
            totalOceania = totalOceania/2;
       }


        System.out.printf("%5d%,30.2f%,30.2f%,30.2f\n", i, totalEurasia, totalEstasia, totalOceania);
    

}

}

}[/code]

o programa não está usando o valor da queda de população… alguma idéia do que fazer? vlw!

isso acontece pq vc nao usa as variaveis anteriores para calcular o proximo incremento do for… a população é calculada sem levar em consideração a população anterior, apenas as constantes e o valor de I na interação.

ok?

Então, vi isso tb, só não estou conseguindo fazer o programa empregar as variáveis anteriores, alguém tem algum exemplo simples de como posso fazer isso?

Fiz isso aki, mas cagou mais ainda!! rsrs

if ((i)/100 != 0 && (i)%100 == 0){//acontece desastre populacaoEurasia = totalEurasia/2; populacaoEstasia = totalEstasia/2; populacaoOceania = totalOceania/2; }

achei que assim teria a população antiga para o novo incremento, mas nao rolou

cara, ai vc terá que recorrer à sua lógica… como é calculado o crescimento da população nesses países? Se não for considerando a população anterior não faz muito sentido, concorda?

Como está o texto do enunciado?

Putz, glória aos Deuses do Java e da Sun, acho que deu certo aki:

Pari este código aki:

[code] double populacaoEurasia = 1000;
double populacaoEstasia = 5000;
double populacaoOceania = 10000;

    System.out.printf("%5s%30s%30s%30s\n", "ano", "Eurasia", "Estasia", "Oceania");
    for (int i = 0; i <= 1000; i += 10) {                            

        double totalEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
        double totalEstasia = populacaoEstasia * Math.pow(1 + 0.01, i);
        double totalOceania = populacaoOceania * Math.pow(1 + 0.005, i);

       if ((i)/100 != 0 && (i)%100 == 0){//acontece desastre
            populacaoEurasia = populacaoEurasia/2;
            populacaoEstasia = populacaoEstasia/2;
            populacaoOceania = populacaoOceania/2;
       }
        System.out.printf("%5d%,30.2f%,30.2f%,30.2f\n", i, totalEurasia, totalEstasia, totalOceania);       
}

}
}[/code]

Acho que deu certo!

Só precisas de três variáveis de população, uma para cada continente. Para que ter populacaoEurasia e totalEurasia (tal como para os outros continentes)?

Isto está bem: populacaoEurasia = populacaoEurasia/2;

Isto não está, já que não estás a actualizar a população mas sim a guardar um valor numa variável e que nunca vai ser usadodouble totalEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
O correcto seria:populacaoEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);

[quote]cara, ai vc terá que recorrer à sua lógica… como é calculado o crescimento da população nesses países? Se não for considerando a população anterior não faz muito sentido, concorda?

Como está o texto do enunciado?[/quote]

vc tem razão, a lógica da coisa estava errada, o enunciado é assim: tenho 3 continentes com populaões iniciais de 1000, 5000 e 10000, o crescimento é de 2%, 1% e 0.5% anual, calcular e imprimir em intervalos de 10 anos a evolução da população até o ano 1000.
b. a cada 100 anos há um desastre que diminui a população pela metade, qual a nova evolução?

[quote=pmlm]Só precisas de três variáveis de população, uma para cada continente. Para que ter populacaoEurasia e totalEurasia (tal como para os outros continentes)?

Isto está bem: populacaoEurasia = populacaoEurasia/2;

Isto não está, já que não estás a actualizar a população mas sim a guardar um valor numa variável e que nunca vai ser usadodouble totalEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
O correcto seria:populacaoEurasia = populacaoEurasia * Math.pow(1 + 0.02, i); [/quote]

Pelo que eu entendi ai, se eu fizer assim, quando executar o loop, os valores iniciais da população já estarão divididos por 2, sendo que eles só devem ser divididos a cada 100 anos, é isso mesmo?

[quote=pmlm]Só precisas de três variáveis de população, uma para cada continente. Para que ter populacaoEurasia e totalEurasia (tal como para os outros continentes)?

Isto está bem: populacaoEurasia = populacaoEurasia/2;

Isto não está, já que não estás a actualizar a população mas sim a guardar um valor numa variável e que nunca vai ser usadodouble totalEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
O correcto seria:populacaoEurasia = populacaoEurasia * Math.pow(1 + 0.02, i); [/quote]

compilei assim o programa:

[code]
double populacaoEurasia = 1000;
double populacaoEstasia = 5000;
double populacaoOceania = 10000;

    System.out.printf("%5s%30s%30s%30s\n", "ano", "Eurasia", "Estasia", "Oceania");
    for (int i = 0; i <= 1000; i += 10) {                            

         populacaoEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
         populacaoEstasia = populacaoEstasia * Math.pow(1 + 0.01, i);
         populacaoOceania = populacaoOceania * Math.pow(1 + 0.005, i);

       if ((i)/100 != 0 && (i)%100 == 0){//acontece desastre
            populacaoEurasia = populacaoEurasia/2;
            populacaoEstasia = populacaoEstasia/2;
            populacaoOceania = populacaoOceania/2;
       }
        System.out.printf("%5d%,30.2f%,30.2f%,30.2f\n", i, populacaoEurasia, populacaoEstasia, populacaoOceania);
}

}
}[/code]

e deu loop infinito. acho que nao entendi o que vc quis dizer

Bem pessoal, tenho que ir para a aula, agradeço todas as dicas e espero dentro em breve poder contribuir com outras pessoas também! Mais tarde eu posto outra dúvida sobre loops de outro exercício! abs!

vou deixar aqui o codigo fonte que acredito estar certo:

[code] double populacaoEurasia = 1000;
double populacaoEstasia = 5000;
double populacaoOceania = 10000;

    System.out.printf("%5s%30s%30s%30s\n", "ano", "Eurasia", "Estasia", "Oceania");
    for (int i = 0; i <= 1000; i += 10) {                            

        double totalEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
        double totalEstasia = populacaoEstasia * Math.pow(1 + 0.01, i);
        double totalOceania = populacaoOceania * Math.pow(1 + 0.005, i);

       if ((i)/100 != 0 && (i)%100 == 0){//acontece desastre
            populacaoEurasia = populacaoEurasia/2;
            populacaoEstasia = populacaoEstasia/2;
            populacaoOceania = populacaoOceania/2;
       }
        System.out.printf("%5d%,30.2f%,30.2f%,30.2f\n", i, totalEurasia, totalEstasia, totalOceania);       
}

}
}[/code]