Estacionamento Java POO - Help!

Bom dia devs! To começando agora com Java e POO e estou me desafiando à fazer um estacionamento. Quero que apareça o status dos carros, pode ser só a placa para identificação mas quero que mostre se ele está ou não estacionado e o número de vagas atual. No momento estou com o código assim:

package projestacionamento;

public class Carro {
private String cor;
private String placa;
private int velm;
private boolean estacionado;
private int vagas;

public Carro(String cor, String placa, int velm, boolean estacionado, int vagas) {
    this.cor = cor;
    this.placa = placa;
    this.velm = velm;
    this.estacionado = false;
    this.vagas = 7;
}


public void estacionar(){
    System.out.println("Carro " + this.getPlaca() + " estacionado.");
    this.setVagas(getVagas() - 1);
    this.setEstacionado(true);
    
}

public void manobrar(){
    System.out.println("Carro " + this.getPlaca() + " fora da vaga.");
    this.setVagas(getVagas() + 1);
    this.setEstacionado(false);
}

public void vagasDisponiveis(){
    System.out.println("Vagas disponíveis: " + this.getVagas());
}

public void statusEstacionamento(){
    System.out.println(" O carro da cor " + this.getPlaca() + " está " + this.estacionado + " e o número de vagas atual é: " + this.getVagas());
    
    
}

public void statusVagas(){
    System.out.println("Vagas disponíveis: " + this.getVagas());
}



public String getCor() {
    return cor;
}

public void setCor(String cor) {
    this.cor = cor;
}

public String getPlaca() {
    return placa;
}

public void setPlaca(String placa) {
    this.placa = placa;
}

public int getVelm() {
    return velm;
}

public void setVelm(int velm) {
    this.velm = velm;
}

public boolean getEstacionado() {
    return estacionado;
}

public void setEstacionado(boolean estacionado) {
    this.estacionado = estacionado;
}

public int getVagas() {
    return vagas;
}

public void setVagas(int vagas) {
    this.vagas = vagas;
}

}

package projestacionamento;

public class ProjEstacionamento {

public static void main(String[] args) {
    Carro c[] = new Carro[7];
    c[0] = new Carro("Azul", "DAR-5664", 120, false, 7);
    c[1] = new Carro("Preto", "EAI-6969", 200, false, 7);
    c[2] = new Carro("Branco", "OUO-6763", 300, false, 7);
    c[3] = new Carro("Prata", "DHU-3987", 150, false, 7);
    c[4] = new Carro ("Vermelho", " HDJ-3782", 130, false, 7);
    c[5] = new Carro ("Vinho", "LDO-1432", 100, false, 7);
    c[6] = new Carro ("Amarelo", "KKD-9921", 200, false, 7);
    
    
    
    c[3].estacionar();
    c[2].estacionar();
    c[1].estacionar();
    c[0].estacionar();
    c[0].statusEstacionamento();
    c[1].statusEstacionamento();
    c[2].statusEstacionamento();
    c[3].statusEstacionamento();
    c[4].statusEstacionamento();
    c[5].statusEstacionamento();
    c[6].statusEstacionamento();
    
    
    
    
    
    
}

}
-------------------------------------OUTPUT-------------------------------------

Carro DHU-3987 estacionado.
Carro OUO-6763 estacionado.
Carro EAI-6969 estacionado.
Carro DAR-5664 estacionado.
O carro da cor DAR-5664 está true e o número de vagas atual é: 6
O carro da cor EAI-6969 está true e o número de vagas atual é: 6
O carro da cor OUO-6763 está true e o número de vagas atual é: 6
O carro da cor DHU-3987 está true e o número de vagas atual é: 6
O carro da cor HDJ-3782 está false e o número de vagas atual é: 7
O carro da cor LDO-1432 está false e o número de vagas atual é: 7
O carro da cor KKD-9921 está false e o número de vagas atual é: 7
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
// Queria arrumar esse true e não sei pq o número de vagas não está atualizando, podem me ajudar nessa questão? Ah… e seria desejável que o status de todos os carros aparecesse em um comando só pra eu não ter que executar um por um… Valeu!

Cara, pelo menos pra mim, seu código está executando do mesmo jeito que você escreveu, você só mudou algumas variáveis de lugar. Ele está atualizando somente os carros: c[3], c[2], c[1], c[0], pois você só mandou estacionar eles. O resto está padronizado como 7, do mesmo jeito que você informou no construtor. Se você quer mostrar se está estacionado ou não: vá no método public void statusEstacionamento() e faça uma verificação. Note que você quer informar a cor, mas acabou informando a placa. Eu mudei abaixo.

if(this.getEstacionado()){
 System.out.println(" O carro da cor " + this.getCor() + " está  estacionado e o número de vagas atual é: " + this.getVagas());
} else {
System.out.println(" O carro da cor " + this.getCor() + " não está  estacionado e o número de vagas atual é: " + this.getVagas());
}

Se você quer uma única linha de comando para mostrar tudo, faça um laço de repetição. Aqui vai um exemplo adaptando seu código:

for(int i = 0; i < c.length;i++){
   //AQUI SEU COMANDO VAI ACONTECER ENQUANTO ELE PERCORRER TODO O ARRAY
   c[i].statusEstacionamento();
}

Espero que ajude.:v:

Isso é porque você colocou a quantidade de vagas na classe Carro, então cada carro tem o seu próprio valor da quantidade. Por isso, ao fazer setVagas em um carro, você só está mudando a quantidade de vagas daquele carro (a dos outros não é alterada).

Mas isso não faz sentido, pois quem tem a quantidade de vagas não é o carro, é o estacionamento. Então deveria ter outra classe para controlar as vagas.

Ou seja, na classe Carro você remove a quantidade de vagas, e deixa somente os outros campos (na verdade eu removeria também o estacionado, pois achei melhor deixar esse controle no estacionamento mesmo). E depois você cria uma classe para gerenciar o estacionamento:

public class Carro {
    // removi a quantidade de vagas e o "estacionado"
    private String cor;
    private String placa;
    private int velm;

    public Carro(String cor, String placa, int velm) {
        this.cor = cor;
        this.placa = placa;
        this.velm = velm;
    }
}


public class Estacionamento {
    private Carro[] vagas;
    private int vagasLivres;

    public Estacionamento(int qtdVagas) {
        // cria as vagas
        this.vagas = new Carro[qtdVagas];
        // começa vazio (com todas as vagas livres)
        this.vagasLivres = qtdVagas;
    }

    // estaciona o carro, retorna true se conseguiu, false se não conseguiu (porque estava cheio)
    public boolean estacionar(Carro carro) {
        // se não tem mais vagas, não estaciona
        if (this.vagasLivres == 0) {
            return false;
        }
        // procura uma vaga livre
        for (int i = 0; i < vagas.length; i++) {
            if (this.vagas[i] == null) {
                this.vagas[i] = carro;
                this.vagasLivres--; // uma vaga livre a menos
                break; // não precisa continuar procurando vagas
            }
        }
        return true;
    }

    public void manobrar(Carro carro) {
        // procura pelo carro, quando encontrar, tira ele da vaga
        for (int i = 0; i < vagas.length; i++) {
            if (this.vagas[i].getPlaca().equals(carro.getPlaca())) {
                this.vagas[i] = null;
                this.vagasLivres++; // uma vaga livre a mais
                break;
            }
        }
    }

    public int vagasDisponiveis() {
        return this.vagasLivres;
    }

    public void status() {
        if (this.vagasLivres == this.vagas.length) {
            System.out.println("Estacionamento vazio");
            return;
        }
        System.out.println("Vagas disponíveis: " + this.vagasLivres + "\nCarros estacionados:");
        for (Carro carro : vagas) {
            if (carro != null) {
                System.out.println("- Placa " + carro.getPlaca() + ", cor=" + carro.getCor());
            }
        }
    }
}

Pronto, vamos fazer um teste:

Estacionamento est = new Estacionamento(7); // 7 vagas
Carro c[] = new Carro[] {
    new Carro("Azul", "DAR-5664", 120),
    new Carro("Preto", "EAI-6969", 200),
    new Carro("Branco", "OUO-6763", 300),
    new Carro("Prata", "DHU-3987", 150),
    new Carro("Vermelho", " HDJ-3782", 130),
    new Carro("Vinho", "LDO-1432", 100),
    new Carro("Amarelo", "KKD-9921", 200)
};

for (int i = 0; i < 4; i++) {
    est.estacionar(c[i]);
}
est.status();

est.manobrar(c[2]);
est.status();

Saída:

Vagas disponíveis: 3
Carros estacionados:
- Placa DAR-5664, cor=Azul
- Placa EAI-6969, cor=Preto
- Placa OUO-6763, cor=Branco
- Placa DHU-3987, cor=Prata
Vagas disponíveis: 4
Carros estacionados:
- Placa DAR-5664, cor=Azul
- Placa EAI-6969, cor=Preto
- Placa DHU-3987, cor=Prata
2 curtidas