Estacionamento Java POO - Help!

3 respostas Resolvido
poojava
P

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!

3 Respostas

S

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());
}
S

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:

H
Solucao aceita

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
Criado 19 de fevereiro de 2021
Ultima resposta 19 de fev. de 2021
Respostas 3
Participantes 3