Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Já tentei de tudo e continua dando erro : Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Porta.estaAberta()" because "this.portas[i]" is null

class Porta {

boolean aberta;
String cor;
double altura, largura;

Porta(boolean aberta, String cor, double altura, double largura) {
    this.aberta = aberta;
    this.cor = cor;
    this.altura = altura;
    this.largura = largura;
}

void abre() {
    this.aberta = true;

}

void fecha() {
    this.aberta = false;

}

void pinta(String novaCor) {
    this.cor = novaCor;

}

boolean estaAberta() {
    return this.aberta;

}

}

class Edificio { String cor; int totalDeAndares; Porta portas[]; int totalDePortas;

Edificio(String cor, int totalDeAndares, int totalDePortas) {
    this.cor = cor;
    this.totalDeAndares = totalDeAndares;
    this.totalDePortas = totalDePortas;
    this.portas = new Porta[totalDePortas];

}

int quantasPortasEstaoAbertas() {
    int q = 0;
    for (int i = 0; i < this.totalDePortas; i++) {
        if(portas[i].estaAberta()) {
            q++;
        }

    }

    return q;
}

void adcionaPorta(Porta p) {// p é a porta que eu quero adicionar
    for (int i = 0; i < this.totalDePortas; i++) {
        if (portas[i] == null) { // Vai varrer e procurar uma posição que esteja vazia.
            portas[i] = p; // parâmetro passado
        }

        break; // para o for pq ele já achou uma posição vazia

    }
}

}

class Principal {

public static void main(String[] args) {
    Porta p1 = new Porta(false, "branca", 1.5, 1.9);
    Porta p2 = new Porta(true, "branca", 1.5, 1.9);
    Porta p3 = new Porta(true, "branca", 1.5, 1.9);

    Edificio e1 = new Edificio("Azul", 10, 10);
    Edificio e2 = new Edificio("Azul", 10, 10);

    e1.adcionaPorta(p1);
    e2.adcionaPorta(p2);
    e1.adcionaPorta(p3);

    System.out.println(e1.quantasPortasEstaoAbertas());
    System.out.println(e2.totalDePortas);


}

}

2 respostas
solução!

Oie Edvan, tudo bem contigo?

Esse erro é causado quando é chamado um método que retorna nulo, isso aconteceu porque a array foi definida com tamanho 10 e apenas os 3 primeiros slots foram preenchidos e no método "quantasPortasEstaoAbertas()", o for olhada todos os 10 slots, só que como ainda tinham slots vazios e ele dava esse erro.

Para arrumar fiz algumas alterações no seu código sendo a principal delas a substituição da "array" por uma "Arraylist", segue o código:

Classe Porta:

public class Porta {
boolean aberta;
String cor;
double altura, largura;

Porta(boolean aberta, String cor, double altura, double largura) {
    this.aberta = aberta;
    this.cor = cor;
    this.altura = altura;
    this.largura = largura;
}

void abre() {
    this.aberta = true;

}

void fecha() {
    this.aberta = false;

}

void pinta(String novaCor) {
    this.cor = novaCor;

}

boolean estaAberta() {
    return this.aberta;

}

@Override
    public String toString() {
        // TODO Auto-generated method stub
        return cor;
    }
}

Classe Edificio:

import java.util.ArrayList;

public class Edificio { 
    String cor; 
    int totalDeAndares; 
    ArrayList<Porta> portas;
    int totalDePortas;

Edificio(String cor, int totalDeAndares, int totalDePortas) {
    this.cor = cor;
    this.totalDeAndares = totalDeAndares;
    this.totalDePortas = totalDePortas;
    this.portas = new ArrayList<Porta>();

}

int quantasPortasEstaoAbertas() {
    int q = 0;

    for (int i = 0; i < this.portas.size(); i++) {
        if(portas.get(i).estaAberta()) {
            q++;
        } 
    }

    return q;
}

void adcionaPorta(Porta p) {
    if(portas.size() == this.totalDePortas) {
        System.out.println("O tamanho máximo foi atingido!");
    } else {
        portas.add(p);
    }
    }
}

Classe Principal:

public class Principal {
public static void main(String[] args) {
    Porta p1 = new Porta(false, "branca", 1.5, 1.9);
    Porta p2 = new Porta(true, "azul", 1.5, 1.9);
    Porta p3 = new Porta(true, "preto", 1.5, 1.9);

    Edificio e1 = new Edificio("Azul", 10, 10);
    Edificio e2 = new Edificio("Azul", 10, 10);

    e1.adcionaPorta(p1);
    e1.adcionaPorta(p2);
    e1.adcionaPorta(p3);

    System.out.println(e1.quantasPortasEstaoAbertas());
    System.out.println(e2.totalDePortas);


}
}

Qualquer dúvida sobre o código eu fico a disposição para te ajudar :)

Bons estudos!

Muito obrigado !!