Favor ajudem, dúvida com algoritmo

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+".";
}

}[/code]

Seu código esta meio estranho […] toda vez que vc chama o método para passar o dia, vc sobrescreve o objeto de bactéria que vc esta criando.

O erro acredito que esteja no for do seu método da bactéria aí… por que vc ta fazendo i<=count ?
Reveja sua lógica aí…
Abrazz

utroz,

voce pode resolver de n… maneiras.

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;
    }
    
}

analise, adapte, melhore.

at+