Dúvidas na Ultilização de Métodos JAVA

Galera estou em duvida se um metodo qualquer de uma classe pode haver entrada de dados exemplo abaixo

public void CadastrarCliente(){
System.out.print("NOME: ");
this.nome = teclado.nextLine();
System.out.print("TELEFONE: ");
this.telefone = teclado.nextInt();

}

faz de conta que estes atributos já estavam criado na classe.
Minha dúvida é, se é correto fazer um metódo desse jeito, ou se esses argumentos eu faço no próprio main e não dentro de um metódo.

Construtor não tem que solicitar nada, ele serve só para CONSTRUIR o OBJETO

Seria mais correto assim:

public void cadastrarCliente() {
    //Se é um método de cadastro de cliente, então crie um cliente
    Cliente cliente = new Cliente();

    System.out.print("NOME: ");
    cliente.nome = scanner.nextLine();

    System.out.print("TELEFONE: ");
    cliente.telefone = scanner.nextInt();
}

Se você já viu sobre Getters e Setters, considere trocar os atributos pelos set correspondente

1 curtida

não entendi o porque de instanciar a classe cliente dentro do método, sendo que o método já está na classe cliente.

Um cliente não cadastra um cliente, né?

Quem cadastra um cliente é outra classe

Um cliente não tem o dever e nem o poder de cadastrar um outro cliente, quem faz isso é a empresa

1 curtida

áahhhh acho q entendi então devo criar outra classes com os comandos que eu queira ultilizar com os atributos da classe cliente né isso?

No meu caso, estou fazendo um projeto para minha faculdade, estou querendo desenvolver um programa de fazer pedidos de livros, que no caso coloquei as seguintes classes: Principal, Clientes, Pedidos, Editoras e por fim usando sua ideia criei outra classe CadastrarCliente.

Para adicionar os clientes estou criando uma arraylist, para simular um “banco de dados” ,
e nesse programa preciso cadastrar as editoras e também os pedidos. preciso criar outras classes como fiz para o cliente ? tipo CadastrarEditora e a classe CadastrarPedidos??

estou indo pelo caminho certo?

CadastrarCliente, CadastrarEditoras e CadastrarPedidos estão mais para ações(métodos) do que Classes.

Então seria uma boa criar os métodos: cadastrarCliente, cadastrarEditoras e cadastrarPedidos em uma classe que não representa algo concreto, pode ser uma classe Sistema, ou até mesmo na Principal (dependendo de como você esta fazendo ou pensa fazer)

EDIT:
Ou como você esta simulando um banco de dados, você pode criar uma classe chamada BancoDeDados e colocar os métodos la.

1 curtida

Muito obrigado mano, agora compreendi, tava fazendo tudo bagunçado mais agora deu um tchã no cérebro kkk, vlw mesmo man.

public class Sistema {
Scanner teclado = new Scanner(System.in);

//LISTA PARA CLIENTES
ArrayList clientes = new ArrayList();


//CLASSES INSTANCIADAS
Clientes cliente = new Clientes();
Pedidos pedido = new Pedidos();
Editora editora = new Editora();


public void CadastrarClientes(){
    
    System.out.print("NOME DO CLIENTE: ");
    cliente.setNome(new Scanner(System.in).nextLine());
    System.out.print("TELEFONE: ");
    cliente.setTelefone(new Scanner(System.in).nextLine());
    System.out.print("DOCUMENTO: ");
    cliente.setDoc(new Scanner(System.in).nextLine());
    
}

}
é correto eu fazer isto na minha classe sistema q criei?

Sim é correto, mas não precisa fiar criando um Scanner toda hora né?

Seria melhor se a classe chamasse Cliente e não Clientes, pois os atributos que vão nela representa um cliente só, a mesma coisa vale para as outras classes

1 curtida

Eu fiquei dando esses new scanner dentro dos set pra limpar o buffer, pq se n fica dando um bug quando vou preencher as strings.

outra dúvida q estou tendo, é que o seguinte vou cadastrar os clientes e depois as editoras, e quando eu for fazer um pedido eu tenho q seleciona o cliente q irá fazer o tal pedido e como estou usando arrayList estou ficando um pouco perdido, na minha classe Sistema criei os seguintes métodos

//LISTA DOS CLIENTES CADASTRADOS
public void ListarClientes(){
Iterator i = clientes.iterator();
System.out.println("\n\tCLIENTES CADASTRADOS\n");
while(i.hasNext()){
cliente = (Cliente)i.next();
System.out.println("CLIENTE "+(j+=1)+"º: "+cliente.getNome());
}

    j=0;
}
//SELECIONANDO CLIENTE DE ACORDO COM A POSIÇÃO QUE ELE ESTA NA LISTA
public void SelecionarCliente(){
    System.out.print("\nSELECIONE O CLIENTE: ");
    es = teclado.nextInt();
    cliente = (Cliente) clientes.get(es-=1);
    System.out.print("\nCLIENTE SELECIONADO: "+cliente.getNome());
}

se tiver outro jeito para eu poder selecionar os clientes melhor q este, pfv me da uma luz.

Supondo que você queria selecionar pelo cpf:

cpf = scanner.nextLine();

for(Cliente c: clientes) {
    if(c.getCpf().equals(cpf)) {
        //faz algo
        break;
    }
}

não sei pq esta dando este erro.