Gente estou com problema nesse algoritmo:
A cada dia, as bactérias se dividem em duas e consome metade de seu peso em lixo todos os dias. Cada bactéria dura apenas 5 dias e depois morre.
Deve haver métodos para retornar quanto lixo ela come (que é um valor fixo), criar uma nova bactéria (clonando a atual), simular a passagem de um dia (reduzindo o seu tempo de vida) e retornar o tempo de vida restante. A seguir, em outra classe, implemente uma pequena simulação: crie uma bactéria e simule a passagem de 10 dias
exibindo a quantidade de bactérias existentes e o total de lixo consumido.
Qual a melhor forma para eu fazer, obrigado!
Está dando o seguinte erro:
[quote]Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 50
at Bacterium.passarDia(Bacterium.java:22)
[/quote]
[code]
public class Bacterium {
private int peso, count = 0;
private boolean isViva;
private double lixoConsumido;
public void consumirLixo(int peso) {
lixoConsumido += this.peso / 2;
}
public void passarDia(int dias, int peso) {
int[] bacteria = new int[50];
bacteria[0] = 5; // dias de vida.
while(dias > 0){
for (int i = 0; i <= count; i++){
if (bacteria[i] == 0){
this.isViva = false;
}
else {
consumirLixo(peso);
bacteria[count++] = 5;
bacteria[i]--;
}
}
dias--;
}
}
public String toString(){
return "Lixo Consumido: "+lixoConsumido+".";
}
uma delas seria vc cria um objeto para guardar as informacoes dia a dia.
nesse objeto vc colocaria:
o dia em questao (dia 1, dia2, dia3, …)
a quantidade de bacteria nesse dia.
como vc informou até o quinto dia vai sem o dobro do dia anterior.
aparti do sexto vc tem que verifica quantas morrerao
o lixo comsumido nesse dia.
depois crie um outro objeto que fara analise dessas informacoes.
segue um esboco que criei.
1 - Objeto Dia a Dia
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package lab;
/**
*
* @author Jailes M S PAntoja
* @e-mail jailes.pantoja@gmail.com
* @version 2011-03-27 17:56:32
*/
public class InfoDiaria {
private int dia = 0;
private int qtdBacteria = 0;
private double lixoConsumido = 0;
public int getDia() {
return dia;
}
public void setDia(int dia) {
this.dia = dia;
}
public int getQtdBacteria() {
return qtdBacteria;
}
public void setQtdBacteria(int qtdBacteria) {
this.qtdBacteria = qtdBacteria;
}
public double getLixoConsumido() {
return lixoConsumido;
}
public void setLixoConsumido(double lixoConsumido) {
this.lixoConsumido = lixoConsumido;
}
@Override
public String toString() {
return "InfoDiaria{ : " + "dia=" + dia + ", qtdBacteria=" + qtdBacteria + ", lixoConsumido=" + lixoConsumido + '}';
}
}
=============================================
2 - Objeto para analisar as informacoes
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package lab;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Jailes M S PAntoja
* @e-mail jailes.pantoja@gmail.com
* @version 2011-03-27 18:01:32
*/
public class Acompanhamento {
private int diasAcompanhados = 0;
private int bacteriasIniciais = 0;
private List<InfoDiaria> diario = new ArrayList<InfoDiaria>();
private double pesoBacteria = 1;
public Acompanhamento() {
diasAcompanhados = 5;
bacteriasIniciais = 1;
analise();
}
public static void main(String[] vars){
Acompanhamento acompanhamento = new Acompanhamento();
}
private void analise() {
//anoto a informacao do primeiro dia
InfoDiaria diaAtual = new InfoDiaria();
//informa o dia
diaAtual.setDia(1);
//informo a quantidade bacterias inicias
diaAtual.setQtdBacteria(bacteriasIniciais);
//informo a quantidade lixo consumido que é metada qtd bacteria
diaAtual.setLixoConsumido( pesoBacteria / 2);
//adiciono informacao do dia no diario
diario.add(diaAtual);
for (int i = 1; i < diasAcompanhados; i++) {
int bactDiaAnterior = diario.get(i - 1).getQtdBacteria();
int bactDiaAtual = 0;
diaAtual = new InfoDiaria();
//informa o dia
diaAtual.setDia(i + 1);
if (i > 4) {
bactDiaAtual = atualizaBacteria(i + 1, bactDiaAnterior);
} else {
bactDiaAtual = (bactDiaAnterior * 2);
}
//informo a quantidade bacterias do dia atual
diaAtual.setQtdBacteria(bactDiaAtual);
//informo a quantidade lixo consumido que é metada qtd bacteria
diaAtual.setLixoConsumido(bactDiaAtual / 2);
//adiciono informacao do dia no diario
diario.add(diaAtual);
}
System.out.println(diario.get(diasAcompanhados - 1));
double lixoTotal = 0.0;
for(InfoDiaria dia : diario){
lixoTotal += dia.getLixoConsumido();
}
System.out.println("Lixo total consumido : " + lixoTotal);
}
private int atualizaBacteria(int diaAtual, int bactDiaAnterior) {
int bact4DiasAtraz = diario.get(diaAtual - 6).getQtdBacteria();
System.out.println("Bacteria a 4 dia atraz : " + bact4DiasAtraz);
int retorno = (bactDiaAnterior - bact4DiasAtraz) * 2;
return retorno;
}
}