Galera sou novo em java e estou com muita dificuldade nesse exercício, se alguém puder me ajudar

Descrição das regras de negócio:
Uma loja vende 3 tipos de produto: livro, CD e software. Para todos os produtos existe código, descrição,
preço e peso. Para o CD existe o nome da banda, para o livro existe o nome do autor e para o software
existe a categoria. Para entregar um produto, o cálculo do frete é feito multiplicando o peso do produto
por R$ 6,50. Implemente as classes que retratam esse cenário.
Programa:
O programa deve permitir ao usuário informar qual é o tipo de produto (livro, CD ou software) e, com
base nesta resposta, solicitar o preenchimento dos atributos de cada tipo de produto. Em seguida, calcular
o valor do frete e imprimir os dados do produto e o valor do frete.
Obs.: tanto a leitura dos valores quando a impressão devem ser realizadas pelo terminal

posta ai o que já fez ate agora e qual parte do seu código vc está com duvida

ainda não consegui sair do zero, o professor passou essa atividade só que não tivemos aula presencial devido as escolas estarem fechadas. estou muito perdido

Basicamente vc criara uma classe abstrata Produto e nela voce criara todas as variaveis necessarias(codigo, descrição, preço,peso),criara os métodos Getter e Setter e por fim criara o metodo calcularFrete que retornara um double, depois criara uma classe para cada tipo de produto (livro, CD, software) e extendera de Produto. No final terá 4 Classes (Produto, Livro, CD, Software). Na classe de teste, dentro do seu método main vc criara um objeto Produto sem instancia e um int que recuperará um numero que o usuario digitar, depois disso irá associar 1 = Livro, 2 = CD, 3 = Software e fazer os if’s, dentro dos if’s, baseado na escolha do usuario, vc instancia o objeto Produto com a classe do objeto em questão (Livro,CD,Software) recupera o que o usuario digitar e utiliza os getter e setter. depois é só exibir. Seria legal sobreescrever o método toString tambem, assim depois de setados os valores bastaria vc chamar a classe dentro do system.out

Agora se tu não conseguir fazer o que eu expliquei acima não vou conseguir te ajudar

vllw mano.

Conseguiu ?


package Loja;


public class Produto {
    
    private int código; 
    private String descrição;
    private Double preco;
    private Double peso;
    
    public int getCódigo() {
        return código;
    }

    public void setCódigo(int código) {
        this.código = código;
    }

    public String getDescrição() {
        return descrição;
    }

    public void setDescrição(String descrição) {
        this.descrição = descrição;
    }

    public Double getPreco() {
        return preco;
    }

    public void setPreco(Double preco) {
        this.preco = preco;
    }

    public Double getPeso() {
        return peso;
    }

    public void setPeso(Double peso) {
        this.peso = peso;
    }
          
    
    private Double calculaFrete(){
       return getPeso() * 6.50;
    }

    @Override
    public String toString() {
        return "Produto [ " + " Codigo: " + código + " Descricao: " + descrição + " Preco: " + preco + " Peso: " + peso + "Frete "+calculaFrete() +']';
    }
    
       
}

package Loja;

public class Livro extends Produto {
    
}
package Loja;

public class CD extends Produto {
    
}
package Loja;

public class Software extends Produto {
    
}



package Loja;

import java.util.Scanner;

public class Teste {
       public static int menu(){
        Scanner scan = new Scanner(System.in);
        System.out.println("Esolha um produto ");        
        System.out.println("Livro - 1");
        System.out.println("Software - 2");
        System.out.println("CD - 3");
        System.out.println("Sair - 4");
        int opcao = scan.nextInt();
        if (opcao <= 0 || opcao >= 5) {
            System.out.println("Incorreto");
            menu();
        }  
        return opcao;
        }
    
    public static void main(String[] args) {
        //menu 
      
        
        switch (Teste.menu()) {
            case 1: Produto livro = new Produto();
                    livro.setCódigo(145);
                    livro.setDescrição("Mar vermelho");
                    livro.setPeso(5.6);
                    livro.setPreco(44.33);
                    System.out.println(livro.toString());
                    break;
            
        }
        
    }
}

1 curtida

esse método não deve ser sobrescrito aqui, e sim nas classes “filhas”

instanciando assim qual o motivo de ter criado as classes Livro, CD e Software ?
o correto é cada case uma instancia diferente ex.: Produto livro = new Livro();

não é necessário esse .toString() o proprio system.out ja chama o toString da classe, pr isso é melhor sobrescrever o toString em cada classe, assim, alem dos atributos que seu professor pediu vc tbm pode retornar o tipo do produto

Como nas classes CD, Livro e Software não tinham metodos nem atrbutos incomuns, poderia ser feito apenas instanciando Produto. O que não seria o correto claro. Fiz com alguns erros mesmo, só para ele ter uma noção de como fazer

Perai, perai.

Por que você tá repetindo o post com OS MESMOS ERROS que eu te indiquei

nesse post?

Qual é, pô. Eu entendo que a vontade de copiar e colar uma resposta pode ser grande, mas pelo menos faz o post conforme te indiquei.

Brincadeira, hein.

import java.util.Scanner;

public class Principal {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
String descricao="";
String codigo="";
double peso=0;
String CVTpeso="";
double preco=0;
String CVTpreco="";
produtos pdts=new produtos(descricao, codigo, peso, preco);
livros lvs=new software(descricao, codigo, peso, preco);
software stfw= new software(descricao, codigo, peso, preco);
cd CD=new cd (descricao, codigo, peso, preco);

	System.out.println( "Digite uma dessas opções: cd, livro, software");
	String opcao=teclado.nextLine();
	
	switch(opcao) {
	
	case "cd":
		System.out.println("banda ?");
		lvs.banda=teclado.nextLine();
		System.out.println("descrição ?");
		lvs.descricao=teclado.nextLine();
		System.out.println(" codigo ?");
		lvs.codigo=teclado.nextLine();
		System.out.println("peso ?");
		CVTpeso=teclado.nextLine();
		lvs.peso= Double.parseDouble(CVTpeso);
		System.out.println(" preco ?");
		CVTpreco= teclado.nextLine();
		lvs.preco= Double.parseDouble(CVTpreco);
		
		System.out.println(lvs.informacoes());
		
		break;
		
	case "livros":
		System.out.println("autor ?");
		lvs.autor=teclado.nextLine();
		System.out.println("descrição ?");
		lvs.descricao=teclado.nextLine();
		System.out.println(" codigo ?");
		lvs.codigo=teclado.nextLine();
		System.out.println("peso ?");
		CVTpeso=teclado.nextLine();
		lvs.peso= Double.parseDouble(CVTpeso);
		System.out.println(" preco ?");
		CVTpreco= teclado.nextLine();
		lvs.preco= Double.parseDouble(CVTpreco);
		
		System.out.println(lvs.informacoes());
		
		break;
		
	case "software":
		System.out.println("categoria ?");
		lvs.categoria=teclado.nextLine();
		System.out.println("descrição ?");
		lvs.descricao=teclado.nextLine();
		System.out.println(" codigo ?");
		lvs.codigo=teclado.nextLine();
		System.out.println("peso ?");
		CVTpeso=teclado.nextLine();
		lvs.peso= Double.parseDouble(CVTpeso);
		System.out.println(" preco ?");
		CVTpreco= teclado.nextLine();
		lvs.preco= Double.parseDouble(CVTpreco);
		
		System.out.println(lvs.informacoes());

		
	}
	
	

	
}

}

eu fiz assim, só que não estou conseguindo calcular o frete

o frete será o peso * 6.50 crie um método que faça esse calculo e chameo após receber os dados (peso no caso) , se ja tiver fazendo assim e dando erro tenta substituir os pontos por virgula, tanto na declaração qto no calculo, configuração de teclado pt usa virgula e us usa ponto.
***EDIT
não tinha visto seu código com atenção, vi só agora, vamos la, a classe “Produtos” deve ser abstrata, logo ela não poderá ser instanciada e deve ser extendida, nela vc criará os atributos ( descrição, codigo, peso, preço), os métodos getter e setter e o método calcularFrete. Fez isso blza, vc criara as classes que serão filhas de “Produtos” (Livros, CD, Software) e todas elas extenderão de produtos, logo herdarão os atributos. Dentro de cada classe filha vc sobreescrevera o método toString e dentro dele chama os atributos getter (getDescricao, getPeso etc.), chame o método calcularFrete() por ultimo e também ja especifica o tipo do produto (ex.: dentro da classe livro vc ja deixa especificado que é um livro) assim dispença o usuario ter que digitar o tipo do produto novamente. No seu método main vc criara uma variavel que vai recuperar um int (que o usuario digitar no caso) e criara um while dizendo que enquanto o usuario entrar com um numero menor que 1 ou maior que 3 o numero é invalido e pedira novamente ao usuario para digitar um numero, digitado o numero valido vc criara um objeto Produto produto porem não o instanciara (não vai fazer = new Produto()) e criara o switch(int que o usuario digitou) dai
case 1:
produto = new Livro();
System.out.println("Qual a descrição do livro?)
produto.setDescricao(new Scanner(System.in).next());

e assim por diante, por fim basta chamar o System.out.println(produto);
(para organizar a exibição da forma que vc quiser, organiza dentro dos metodos toString sobreescritos)

ta ai

eu só repeti porque a primeira vez que fui postar, achei que não tinha ido

eu nao estou conseguindo fazer este código que é um pouco diferente do seu: ~

1Crie uma hierarquia de classes para uma loja que venda livros, CDs e DVDs.
2. Sobrescreva o método imptimir() para que imprima:
a. Para livros: nome, preço e autor;
b. Para CDs: nome, preço e número de faixas;
c. Para DVDs: nome, preço e duração.
3. Evite ao máximo repetição de código, use os conceitos adquiridos de POO.
4. No método main() adicione 5 produtos diferentes (à sua escolha) a um vetor e, por fim, imprima o conteúdo
do vetor.

1 curtida