Lógica com arrays

3 respostas
mozProgs

Olá pessoal,

Estou aprendendo a programar, e estou tentando resolver o seguinte exercício que retirei da apostila fj11 da caelum. http://www.caelum.com.br/caelum/curso-11.jsp :

Classe: Casa
Atributos: cor, totalDePortas, portas[]
Método: void pinta(String s), int quantasPortasEstaoAbertas(), void
adicionaPorta(Porta p), int totalDePortas()
Crie uma casa, pinte ela. Crie três portas e coloque-as na casa através do
método adicionaPorta, abra e feche as mesmas como desejar. Utilize o método
quantasPortasEstaoAbertas para imprimir o número de portas abertas e o método
totalDePortas para imprimir o total de portas em sua casa.

Criei 3 classes Casa, Porta e TestCasa.

//Casa
class Casa
{
    String cor;
    int totalDePortas;
    Porta portas[];

    void pinta(String s)
    {
        System.out.println("Casa pintada com cor " +s);
    }

    //devolve o numero de portas abertas
    int quantasPortasEstaoAbertas()
    {
        int portasAbertas = 0;
        for(int i=0; i<portas.length; i++)
        {
            if(portas[i].estaAberta()==true)
            {
                portasAbertas++;
            }else
            {
                portasAbertas=portasAbertas;
            }
        }
        return portasAbertas;
    }


    // adiciona a porta p se a casa ainda tiver espacos p montar porta
    void adicionaPorta(Porta p)
    {
        for(int i=0; i<portas.length; i++)
        {
            if(portas[i]==null)
            {
                portas[i] = p;
            }
            else
            {
                System.out.println("Ja tem portas Completas");
            }
        }
    }

    //Devolve num de portas na Casa
    int totalPortas()
    {
        int totPortas=0;
        for(int i=0; i<portas.length; i++)
        {
            if(portas[i] != null)
            {
                totPortas++;
            }
        }
        return totPortas;
    }
}


/////Porta
class Porta
{
    String cor;
    boolean aberta;
    double dimensaoX;
    double dimensaoY;
    double dimensaoZ;

void abre()
{
    System.out.println ("Porta aberta");
}

void fecha()
{
    System.out.println("Porta fechada");
}

void pinta(String s)
{
    System.out.println("Porta pintada com cor " +s);
}

boolean estaAberta()
{
    return this.aberta;
}

}


//Class de Teste
class TestCasa
{
    public static void main(String[] args)
    {
        Casa minhaCasa = new Casa();

        minhaCasa.pinta("branca");

        Porta p1 = new Porta();
        Porta p2 = new Porta();
        Porta p3 = new Porta();

        minhaCasa.adicionaPorta(p1);
        minhaCasa.adicionaPorta (p2);
        minhaCasa.adicionaPorta(p3);

        minhaCasa.portas[0].abre();
        minhaCasa.portas[1].abre();
        minhaCasa.portas[2].fecha();
    }
}
Quando tento correr a class TestCasa ele  a seguinte mensagem:

Exception in thread main java.lang.NullPointerException

at Casa.adicionaPorta(Casa.java:30)

at TestCasa.main(TestCasa.java:14)

Agradeço desde já a ajuda.

Abraço

3 Respostas

andreiribas

o erro acontece porque você não declarou o tamanho do array.
você devia ter feito algo

public Casa(int portas) {
   portas = new Porta[portas]; 
}
o método main ficaria:
# public static void main(String[] args) 
#    { 

#  
#        Porta p1 = new Porta(); 
#        Porta p2 = new Porta(); 
#        Porta p3 = new Porta(); 
           int tamanho = 3;

#        Casa minhaCasa = new Casa(tamanho); 
#  
#        minhaCasa.pinta("branca"); 
#  
#        minhaCasa.adicionaPorta(p1); 
#        minhaCasa.adicionaPorta (p2); 
#        minhaCasa.adicionaPorta(p3); 
#  
#        minhaCasa.portas[0].abre(); 
#        minhaCasa.portas[1].abre(); 
#        minhaCasa.portas[2].fecha(); 
#    }

ou........
você pode usar uma List e não se preocupar com a quantidade de elementos.

Marky.Vasconcelos

Mas faz com arrays do jeito que ele disse que mais pra frente na apostila ensina sobre Lists

mozProgs

Valeu andreiribas consegui resolver pela primeira opção.

Segui tbm o conselho da Mark_Ameba porque ainda não sei como funciona uma list.

Abraço.

Criado 5 de setembro de 2007
Ultima resposta 6 de set. de 2007
Respostas 3
Participantes 3