Sobreescreva os métodos toString das classes

Modela os objetos através de classes.

métodos que utilizem estrutura de repetição para calcular ou processar uma determinada funcionalidade.

Sobreescreva os métodos toString das classes implementadas para apresentar informações completas dos objetos.

package restaurante;



public class Sobremesa {
    
// Declaração dos atributos da classe Sobremesa (características do objeto).
    
    private String nome;
    private String tipo;
    private String descricao;
    private double preco;
    private String tabela_nutricional;
    
    
    
    Sobremesa(){
        
        
    }
    
        
    public Sobremesa (String nome, String tipo, String descricao, double preco, String tabela_nutricional){
    this.nome = nome;
    this.tipo = tipo;
    this.descricao = descricao;
    this.preco = preco;
    this.tabela_nutricional = tabela_nutricional;
    
    }
    
        
    // Metodo nome do prato (Comportamento de Objetos)
    
    public void nome(String nomedasobremesa){
        this.nome =nomedasobremesa;
    }
    
    // Metodo tipo do prato (Comportamento de Objetos)
    
    public void tipo(String tipodasobremesa){
        this.tipo =tipodasobremesa;
    }
    
    
    // Metodo preco do prato (Comportamento de Objetos)
    
    public void preco(double valordasobremesa){
        this.preco =valordasobremesa;
    }    


 
    @Override
        public String toString(){

        return "Tipo da sobremesa: " + tipo +"\n"  +"Nome da sobremesa: " + nome  +"\n"  +"Preco: " + preco +"\n\n";
    }
    





    
                
}

package restaurante;

public class Prato {

// Declaração dos atributos da classe Prato (características do objeto).

protected String nome;
private   String tipo;
private   String descricao;
private   double preco;
private   int    numero_pedido;
private   String tabela_nutricional;



Prato() {
    
}


public Prato (String nome, String tipo, String descricao,double preco, int numero_pedido, String tabela_nutricional){
this.nome = nome;
this.tipo = tipo;
this.descricao = descricao;
this.preco = preco;
this.numero_pedido = numero_pedido;
this.tabela_nutricional = tabela_nutricional;

}


// Metodo nome do prato (Comportamento de Objetos)

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




/* 

Get e Set são métodos utilizados para ler e setar, respectivamente, 
o valor de um atributo em uma classe. 

Desta maneira, os atributos da classe se mantêm privados, e toda 
alteração/leitura dos valores, ficam centralizadas nos métodos get e set. 

private para o encapsulamento. Mas aí como acessar? Getters e setters nela!

http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/



public String getNome() {
return this.nome;

}

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

}

*/

// Metodo tipo do prato (Comportamento de Objetos)

public void tipo(String tipodoprato){
    this.tipo =tipodoprato;
}


// Metodo preco do prato (Comportamento de Objetos)

public void preco(double valordoprato){
    this.preco =valordoprato;
}    



@Override
    public String toString(){

    return "Tipo do prato: " + tipo +"\n"  +"Nome do prato: " + nome  +"\n"  +"Preco: " + preco +"\n\n";
}

}

package restaurante;

public class Cliente {

// Declaração dos atributos da classe Cliente (características do objeto).

 private String nome;
 private int    numero_pedido;
 private String endereco;
 
 
 
 Cliente(){
 
 }
 
 
public Cliente (String nome, int numero_pedido, String endereco){
this.nome = nome;
this.numero_pedido = numero_pedido;
this.endereco = endereco;

}
 

    public String Nome(String novoCliente){
    return this.nome=novoCliente;
}


    
    public void numero_pedido(int novoPedido){
    this.numero_pedido = novoPedido;
}


    public String Endereco(String novoEndereco ){
    return this.endereco = novoEndereco;
}
    
    

    @Override
public String toString() {
	return "Nome: " +nome  +"\nNumero do pedido: " +numero_pedido + "\nEndereço: "  + endereco +"\n";
}

}

    //Criar uma instancia para a classe Cliente.
    
    
    //Adiciona o primeiro cliente
    
    Cliente c = new Cliente();
    
    c.numero_pedido(1789);
    c.Nome("Carlos da Silva");
    c.Endereco("Rua Ana Maria, 130 - Tijuca");
    
    
    //Criar uma instancia para a classe Prato para o primeiro cliente.
    
    Prato p = new Prato();
    
    p.tipo("Massa");
    p.nome("Spaghettini Camarão");
    p.preco(20.78);
    
    
           

  // Criar uma instancia para a classe Bebida para o primeiro cliente.
    
  Bebida b = new Bebida();
  b.tipo("Normal");
  b.nome("Copo de água");
  b.preco(2.00);
  
  
  
        
  //Criar uma instancia para a classe Sobremesa para o primeiro cliente.
    
  Sobremesa s = new Sobremesa();
  s.tipo("gelada");
  s.nome("sorvete de Casquinha");
  s.preco(7.08);

  
// ======================================================================= 


    //Adiciona o segundo cliente
    
    Cliente c1 = new Cliente();
        
    c1.numero_pedido(2000);
    c1.Nome("Maria Gomes da Costa");
    c1.Endereco("Rua Buenos Aries, 30 - Centro");
    
    
    //Criar uma instancia para a classe Prato para o segundo cliente.
    
    Prato p1 = new Prato();
    
    p1.tipo("Parmegiana");
    p1.nome("Parmegiana tipo 1");
    p1.preco(19.18);
    
    
    // Criar uma instancia para a classe Bebida para o segundo cliente.
    Bebida b1 = new Bebida();
    b1.tipo("Normal");
    b1.nome("Suco Laranja");
    b1.preco(5.17);
    
    //Criar uma instancia para a classe Sobremesa para o segundo cliente.
    
    Sobremesa s1 = new Sobremesa();
    s1.tipo("gelada");
    s1.nome("Bolo de Laranja");
    s1.preco(3.50);
    
   


// ======================================================================= 




    
    System.out.println("============================================\n");
    
    System.out.print(c.toString());
    System.out.print(p.toString());
    System.out.print(b.toString());
    System.out.print(s.toString());
    
    
    System.out.println("============================================\n");
    
    
    System.out.print(c1.toString());
    System.out.print(p1.toString());
    System.out.print(b1.toString());
    System.out.print(s1.toString());
    
    System.out.println("============================================\n");

Qual a sua dúvida? Pois me parece que você já sobreescreveu o método toString.

uma parte de mim morre ao ver alguém usando double para operação de valor (dinheiro)

Qualquer coisa com vírgula coloco double já é automático.

Qual seria a melhor indicação para variáveis de números decimais.

double ou float => Usar uma precisão maior, pois quanto mais casas decimais, mais correto será seu resultado.

Resposta no link:

Essa parte de sobrescrever método e instanciar classe é um GRANDE PROBLEMA.

Sei que isso é conceito de POO.

//Adiciona o primeiro cliente

Cliente c = new Cliente();

c.numero_pedido(1789);
c.Nome("Carlos da Silva");
c.Endereco("Rua Ana Maria, 130 - Tijuca");

//Criar uma instancia para a classe Prato para o primeiro cliente.

Prato p = new Prato();

p.tipo("Massa");
p.nome("Spaghettini Camarão");
p.preco(20.78);

Dúvida principal:

Vários clientes possui vários pratos. Vou que repetir esse mesmo comando várias vezes no programa com a criação de novos clientes,novos pratos e etc…? Não fica algo pratico.

É que pelo que entendi, o que vc está fazendo é apenas um exercício, mas num programa real, seja de linha de comando ou de interface gráfica, vc vai oferecer ao usuário meios mais eficientes para inserção e recuperação de dados e estes dados ficarão devidamente guardados em algum tipo de banco de dados.

No Java, pra lidar com dinheiro recomendava-se usar BigDecimal, mas parece que existe solução melhor a partir do Java 9, mas não sei como está.

Conforme o exercício não vai ser usando um banco de dados, acho de um vetor.

Exercício:

  • Faça um programa em java que simule um ambiente real, modelando os
    objetos necessários através de classes

  • Defina os requisitos do projeto

  • O sistema deve representar as funcionalidades do mundo real

  • O programa deve possuir ao menos 5 classes que representem objetos
    do mundo real

  • Crie ao menos 2 pacotes para sua aplicação

  • Seu programa deve possuir um menu para seleção das opções
    (switch e do while)

  • O programa deve possuir métodos que utilizem estrutura de repetição
    para calcular ou processar uma determinada funcionalidade

- Sobreescreva os métodos toString das classes implementadas para
apresentar informações completas dos objetos

  • Ao menos 3 classes devem se relacionar

- O programa deve utilizar vetores ou matrizes para agrupar
estruturas com múltiplas intâncias

  • As responsabilidades dos objetos devem estar bem encapsuladas
    através de métodos

  • Você deve utilizar os modificadores de visibilidade de forma adequada

Tem como fazer o método abstrato que modifique o toString e depois cada nova classe criada você usa o comando extends. Mas eu acho que esse jeito está um pouco avançado para o tipo de exercício que você está fazendo, eu particularmente recomento nesse momento você fazer essa substituição nesses métodos todos, pois devem ser uns 5 apenas. Com o passar do tempo você vai aprendendo mais e vai fazendo de forma diferente.

Herança em Java não está no conteúdo do exercício, não foi passado pelo professor.

Será que é um vetor com for e dentro o toString?

O programa deve utilizar vetores ou matrizes para agrupar estruturas com múltiplas instâncias.

por isso falei que ainda não era hora de você usar. Só te esclareci que tinha como fazer, mas eu ainda recomendo que você fique copiando o toString(). Para aprender programação é ruim ficar querendo pular etapas, pois pode confundir mais do que ajudar.

Pelo que eu entendi aqui é que no método toString(), você nas informações deve colocar conteúdo de 3 classes diferentes em um mesmo toString(), como por exemplo colocar informações de prato, junto com bebida e com sobremesa. Acho que para entender melhor o que ele quis dizer com isso deveria tirar dúvida com seu professor.

Pro exemplo em um restaurante eu posso pedir vários pratos, várias bebidas e várias sobremesas, então para eu conseguir fazer isso eu precisaria de um vetor de cada um desses para aceitar meus múltiplos pedidos, para vetor você pode fazer o estático perguntando antes para o usuário quantos pratos por exemplo ele vai querer e depois instanciar o vetor de pratos com essa quantidade informada, ou dinâmico, ou seja que vai aumentando conforme o usuário vai pedindo mais pratos, um jeito de fazer isso é usando ArryaList. Caso não tenha aprendido isso ainda, recomendo fazer o vetor estático perguntando ara o usuário quantos pratos ele quer por exemplo.

O cliente sabe o número de pratos, bebidas ou sobremesas que vai consumir no restaurante neste dia?

Ex: Rodízio de Pizza na Parmê

Ana no dia 19 => TOTAL R$: 15,00
Pedro no dia 27 => TOTAL R$:30,00
Ana no dia 25 => TOTAL R$: 15,00
Pedro no dia 30 => TOTAL R$:50,00
Ana no dia 30 => TOTAL R$: 50,00

O consumo pode varia de pessoa e dia ou não.

Acho que para cada pedido (1 prato 1 bebidas 1 sobremesa) imprima uma comanda para o mesmo cliente.

Informe o nome do cliente 1: Ana
=============================
| Escolha seu prato: |
=============================
| 1 - Massa R$: 19,85 |
| 2 - Parmegiana R$: 17,20 |
| 3 - Estrogonofe R$: 15,00 |
| 4 - Churrasco R$: 35,89 |
| |
==============================

Informe preço do prato do cliente Ana: 19,85
=============================
| Escolha sua bebida: |
=============================
| 1 - Água R$: 2,00 |
| 2 - Água de coco R$: 5,00 |
| 3 - Suco de uva R$: 3,00 |
| 4 - Refrigerante R$: 2,50 |
| |
=============================

Informe o preço da bebida do cliente Ana: 5,00
================================
| Escolha sua sobremesa: |
================================
| 1 - Torta de Limão R$: 5,00 |
| 2 - Pudim de Leite R$: 4,50 |
| 3 - Mousse de Limão R$: 7,58 |
| 4 - Pavê R$: 8,20 |
| |
================================

Informe o preço da sobremesa do cliente Ana: 8,20


Total para o cliente Ana R$: 33.05

Gorjeta de 10% por pessoa R$: 3.305
Total a pagar R$: 36.355

A pessoa pode não beber nada, ou pode não pedir sobremesa, tem muitas possibilidades, mas cada exercício dado por um professor é com base no que as pessoas aprenderam sobre programação. para fazer certinho tinha que usar arraylist, ou list, ou hashmap, ou banco de dados. Como você não deve ter aprendido isso e o exercício pede explicitamente para usar vetor, você pode criar um com base no que o cliente pedir. exemplo

System.out.println("Informe quantos pratos deseja");
int quantidadePratos= ler.nextInt();
String pratos[quantidadePratos];
int valorPratos[quantidadePratos]; //aqui você pode também apenas fazer a soma total se não quiser armazenar o valor de cada prato escolhido

Você está querendo pular etapas no aprendizado e fazer como se fosse um sistema já totalmente usual, mas não adquiriu o conhecimento suficiente para isso, é muito mais importante para um programador aprender a usar lógica do que programar, pois depois de entender cada conceito você consegue programar em qualquer linguagem. Você tem que tentar fazer o exercício apenas com o que aprendeu até agora, não fique pensando a frente pois os professores costumar repetir os exercícios e ai sim terá mais conteúdo.
Geralmente em um programa demora mais para fazer os menus e toda parte gráfica do que a programação, mas isso só é possível se você vai trabalhando o desenvolvimento da lógica.

Não estou querendo pular etapas no aprendizado.

Só não acho pratico isso para IHC.

    //Criar uma instancia para a classe Cliente.
    
    
    //Adiciona o primeiro cliente
    
    Cliente c = new Cliente();
    
    // Alterando os valores
    
    c.numero_pedido(1789);
    c.Nome("Carlos da Silva");
    c.Endereco("Rua Ana Maria, 130 - Tijuca");

 
    
    //Criar uma instancia para a classe Prato para o primeiro cliente.
    
    Prato p = new Prato();
    
    
    // Alterando os valores
    
    p.tipo("Massa");
    p.nome("Spaghettini Camarão");
    p.preco(20.78);

É util como forma de aprendizado:

Como criar um objeto e instancia uma classe.

Só imagina 100000000000000000000000 objetos já começa o desânimo.

Estava imaginando algo assim:

System.out.print("Informe o nome do cliente “+(i+1)+”: ");
nomes[i] = entrada.next(); <=====================================

    Cliente c = new Cliente();
    
    // Alterando os valores
    
    c.numero_pedido(1789);
    c.Nome("nomes[i]");    <=====================================
    c.Endereco("Rua Ana Maria, 130 - Tijuca");

você ainda vai chegar lá, herança é um método complicado que precisa de bastante entendimento. Toda vez que você finaliza um pedido você ja faz i+=1; ai tira do seu System.out.print("Informe o nome do cliente “+(i+1)+”: "); a parte em negrito por apenas i, pedido é quando o cliente finaliza tudo.

para nomes usar sempre nextLine(); lembrando que antes mesmo de você chamar o menu principal deve criar um vetor com a quantidade de clientes que vai ser lido. depois quando a pessoa escolhe as opções do menu também pede para elas escolherem quantos pratos vão querer e então cria um vetor de pratos com essa informação, para ler os vários pratos é só fazer um for colocando a condição de saída quando atingir a quantidade de pratos que a pessoa falou.

Então o professor está sendo incoerente, pois, você só pode ter sobrescrita (override) com generalização/implementação (herança entre classes e implementação de interfaces). Não existe outro meio.

Gosto muito do Real da API JScience.