Colletion em java

boa tarde, sou iniciante em java e meu prof. de programação e daqueles que só passa teoria a pratica (codigo), vai aprender em casa, mais afinal sem exemplo fica difícil entender quando a teoria e extensa, ele passou um trabalho que seria incrementar as funções de colletions num código já pronto feito com vetores e exceções que eu achei mais fácl. e eu estou perdido por que não sei se esta funcionando ou não, alguém poderia me dar uma dica vou deixar o diagrama por que o código esta em 5 classes.
como sou novo não consigo anexar nenhum arquivo. mais pra vcs entenderem melhor a tarefa é uma locadora de veiculos:
Uma empresa de locação de veículos necessita de um sistema para armazenar as informações de sua frota de veículos. Para todos os veículos, é necessário armazenar informações como: modelo, marca, placa, ano, valor a ser cobrado por quilometro rodado e quilometragem rodada. Além disso, existe a possibilidade de alugar veículos de carga. Ao realizar a locação de um veículo, deve-se informar o cliente que realizou a locação, a km inicial (km do momento da locação) e a data de início. Ao finalizar uma locação, informar a data de fim, atualizar a quilometragem do veículo com base na quilometragem rodada durante a locação e calcular o valor total a ser pago pelo cliente (km final – km inicial * valor km rodado). O sistema deve permitir a listagem de locações ativas, listagem de locações finalizadas e listagem de clientes (contendo somatório dos valores já pagos).

Diagrama de classes de domínio:

class Locadora
Cliente

  • nome: String
  • Cliente()
  • Cliente(String)
  • getNome(): String
  • setNome(String): void

Locacao

  • ativa: boolean
  • cliente: Cliente
  • kmFinal: int
  • kmInicial: int
  • valorKm: double
  • veiculo: Veiculo
  • estaAtiva(): boolean
  • finalizar(int): void
  • getCliente(): Cliente
  • getVeiculo(): Veiculo
  • Locacao(Cliente, Veiculo)
  • setCliente(Cliente): void
  • setVeiculo(Veiculo): void
  • valorTotal(): double

Locadora
~ clientes: Cliente ([])

  • CONTADORCLIENTE: int = 0
  • CONTADORLOCACAO: int = 0
  • CONTADORVEICULO: int = 0
    ~ locacoes: Locacao ([])
    ~ marcas: Marca ([])
    ~ modelos: Modelo ([])
    ~ veiculos: Veiculo ([])
  • adicionarCliente(Cliente): void
  • adicionarVeiculo(Veiculo): void
  • alugarVeiculo(Veiculo, Cliente): Locacao
  • finalizarLocacao(Veiculo, int): void
  • finalizarLocacao(String, int): void
  • getClientes(): Cliente[]
  • getModelos(): Modelo[]
  • getVeiculos(): Veiculo[]
  • Locadora()

Marca

  • nome: String
  • getNome(): String
  • Marca()
  • Marca(String)
  • setNome(String): void

Modelo

  • marca: Marca - nome: String
  • getMarca(): Marca
  • getNome(): String
  • Modelo()
  • Modelo(String, Marca)
  • setMarca(Marca): void
  • setNome(String): void

Veiculo

  • ano: int - km: int
  • modelo: Modelo
  • placa: String
  • valorKm: double
  • getAno(): int
  • getKm(): int
  • getModelo(): Modelo
  • getPlaca(): String
  • getValorKm(): double
  • setAno(int): void
  • setKm(int): void
  • setModelo(Modelo): void
  • setPlaca(String): void
  • setValorKm(double): void
  • Veiculo()
  • Veiculo(Modelo, int, int, String, double)

PARTE 1: Utilizando como base o projeto de Locadora de veículos, modifique as classes de domínio para utilizar a API Collections.

Regras:
 Coleção entre Locadora e Cliente não pode permitir clientes duplicados (utilize o CPF para identificar clientes duplicados);
 Coleção entre Locadora e Veiculo deve ser ordenada por placa;
 Implementar na classe Locadora os métodos para buscar cliente por CPF e buscar veículo por placa;

ATENÇÃO: Todos os arrays deverão ser substituídos por uma implementação de collections.

PARTE 2: Utilizando como base o projeto de Locadora de veículos, modifique as classes para implementar e tratar, utilizando tratamento de exceções, as seguintes regras:

Regras:  O atributo nome do cliente não pode ser nulo;
 Um Veículo não pode ter duas locações simultâneas;
 Ao término de uma locação, a quilometragem final do veículo não pode ser menor que a quilometragem atual;
 Não podem existir dois veículos com a mesma placa;
 O valor do quilometro rodado não pode ser menor ou igual a zero;

ATENÇÃO! Toda quebra de regra deverá ser tratada em local específico, de tal forma que permita o retorno do estado atual do sistema e que possibilite um feedback amigável ao usuário.

PARTE 3: Criar a interface com o usuário para permitir a utilização das funcionalidades previstas para o sistema.

OBSERVAÇÕES:
Para se preparar para o próximo semestre, utilize a IDE Netbeans ou a IDE Eclipse.
Você poderá optar por criar uma interface com o usuário totalmente via texto (console), utilizando a classe Scanner para ler a partir do System.in (teclado), ou então utilizar recursos básicos de interface gráfica, como JOptionPane.

Muito do que você precisa pode conseguir assistindo os vídeos da xti java & cia no youtube.


Navegue entre os vídeos e procure um sobre os construtores.

blz, eu ja assistir varias vezes mais esta dificil de modificar algo pronto. mais obg

public class Locadora {
    //Coleção entre Locadora e Cliente não pode permitir clientes duplicados (utilize o CPF para identificar clientes duplicados);
    private final Set<Cliente> clientes = new HashSet<>();
    private final ArrayList<Veiculo> veiculos = new ArrayList<>();//Obs.: não deve ser permitido dois veiculos com a mesma placa
    //- CONTADORCLIENTE: int = 0 a contagem de clientes pode ser realizada pela coleção clientes
    private int contadorLocacao = 0;
    //- CONTADORVEICULO: int = 0 
    private final ArrayList<Locacao> locacoesAtivas = new ArrayList<>();
    private final ArrayList<Locacao> locacaosInativas = new ArrayList<>();

    //~ marcas: Marca ([]) quem tem marca é o veículo não é a locadora
    //~ modelos: Modelo ([]) quem tem modelo é o veículo e não a locadora
    //~ veiculos: Veiculo ([]) substituído pelo arrayList de veículos
    // restante dos métodos é de simples implementação
    public static void main(String[] args) {

    }
}

Classe de referência para fins de comparação

public class Cliente {
    private String nome, cpf;

    public Cliente(String nome, String cpf) {
        this.nome = nome;
        this.cpf = cpf;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }   

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    //se implementar o equals o ideal é fazer o mesmo com o hash, procure saber sobre ele
    @Override
    public int hashCode() {
        int hash = 5;
        hash = 47 * hash + Objects.hashCode(this.cpf);
        return hash;
    }
    //compara os cliente pelo cpf
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        return Objects.equals(this.cpf, ((Cliente) obj).cpf);
    }
}

Para fins de ordenação, procure sobre as interfaces comparable e comparator, se não vai penar mais para fazer a mesma coisa.
A aplicação proposta é simples, assim reitero, assista os demais vídeos da xti, pois eles tratam, de ArrayList, Set, Queue acho que Map, além de funcionalidades, tudo no youtube, fora orientação a objetos, polimorfismo, construtores etc. Té+.

muito obg.

Eu estava com dificuldades em collections olhei o material do java caelum collection algumas comparações voc~e vai usar equals como no caso clientes duplicados, na queustão do cliente não poder ser nulo pode usar um if por exemplo if(this.nome==null){
System.out.println("Impossivel cadastrar o nome esta nulo ;
}
Veiculo com mesma placa voce pode usar um equals
Cria um metodo compara ( Carro outro){
this.carrro.equals.outro
} è só uma ideia que estou dando por exemplo sse codigo ai não é assim no caelum tem a implementação de equals como usar , e tome cuidado com scanner da muito pau ? Quanto tempo vc tem para fazer este trabalho ?

Só uma dica, o caelum pode ser uma referência, mas não é a única.
Se ele conseguir colocar dois clientes com o mesmo “cpf” no HashSet que eu passei pode deportar que é bicho.

Só pra fins de teste:

public static void main(String[] args) {
        Locadora locadora = new Locadora();
        Cliente juli = new Cliente("juli", "321");
        locadora.clientes.add(juli);
        locadora.clientes.add(new Cliente("ana", "123"));
        JOptionPane.showMessageDialog(null, locadora.clientes.add(new Cliente("aul", "123"))
                ? "Cliente cadastrado" : "Já existe CPF cadastrado");
        System.out.println(locadora.clientes.contains(juli));
    }

Estava falando que o codigo que tinha escrito não era daquela forma (no caso o equals ) porém ele poderia olhar no caelum que tem uma implementação do equals, e o equals acho ideal pra verificar a igualdade entre objetos , porém a programação principalmente java você tem n maneiras de implementar algo, citei o caelum por ter me ajudado, como citei no comentário “estava com dificuldades em collections”, e foi através do caelum que sanei minha duvida.

Bonito ein! Vou mudar suas notas das Ms anteriores. Se eu passo conteúdo é pra você exercitar sua mente, e nao vir aqui “colar” online!

1 curtida