Pessoal preciso de um esclarecimento.
Estou tentando acessar o getValor e outros get´s de outra classe.
mesmo fazendo o relacionamento “Tem Um” (coloquei o tipo de uma variável como a classe que quero acessar).
Não consigo acessar os get´s e sets dessa outra classe…
Vou colocar o código, espero que alguém possa me esclarecer se estou fazendo errado.
Classe Cliente que possui uma variável do tipo Produto - os itens (item.getNome; item.getValor não consigo pegar eles)
public class Cliente {
private String nome;
private int quantidade;
private double dinheiro;
public Produto item;
public Cliente(String nome, int quantidade, double dinheiro) {
super();
this.nome = nome;
this.quantidade = quantidade;
this.dinheiro = dinheiro;
}
public void comprar(Produto i) {
if(this.getDinheiro()>= item.getValor()) {
this.setDinheiro(this.getDinheiro()- item.getValor());
this.setQuantidade(this.getQuantidade()+1);
System.out.println("Você comprou um " + item.getNome() + " e seu saldo agora é "+ this.getDinheiro());
System.out.println(item.getTipo());
}else {
JOptionPane.showMessageDialog(null, "Você não possui dinheiro suficiente");
}
}
A Classe Produto que fornece as informações.
public class Produto {
private String nome;
private String tipo;
private double valor;
public Produto(String nome, String tipo, double valor) {
this.nome = nome;
this.tipo = tipo;
this.valor = valor;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
@Override
public String toString() {
return "Produto [nome=" + nome + ", tipo=" + tipo + ", valor=" + valor + "]";
}
Você nomeou o parâmetro do método comprar como i, e está acessando o produto item. São duas coisas diferentes. Se você instanciar um objeto da classe Cliente e chamar o método comprar antes de setar o item desse cliente, vai tomar um NullPointerException.
Então eu coloquei o nome do parâmetro como “item” também e da a mesa coisa, ai tentei mudar para “i”, esta dando o erro - java.lang.NullPointerException-
já to a mais de um dia tentando aqui e nada.
O NullPointerException acontece porque você está tentando fazer alguma operação em uma referência que não foi inicializada. Por exemplo:
Produto p; // Se você tentar acessar qualquer coisa de p, vai acontecer um NullPointerException
...
p = new Produto(); // A partir de agora, pode acessar os membros de p.
Na mensagem de erro deve dizer aonde está acontecendo o problema. Não tenho como saber onde é sem ter todas as informações.
Reescrevi o código desde o inicio e deu certo, não sei porque estava dando erro.
Mais uma duvida, se puder ajudar, o método abaixo develverProduto, não consigo fazer o dinheiro ser ressarcido, como deve ser o código para atribuição dentro do setDinheiro.
public void devolverProduto() {
if(this.getQuantidade() >0) {
this.setQuantidade(this.getQuantidade()-1);
this.setDinheiro(this.getDinheiro()+item.getValor()); // esta dando erro nessa linha
System.out.println(“Você devolveu o produto e seu dinheiro foi ressarcido” + this.getDinheiro());
}
Os métodos setDinheiro() e getDinheiro() vem de onde? Você está invocando o construtor da superclasse - super(). Qual é a superclasse de Cliente? Por enquanto, está chamando o construtor da classe Object.
Fiz um teste e funcionou. Veja:
1 - Produto
public class Produto {
private String nome;
private String tipo;
private double valor;
public Produto(String nome, String tipo, double valor) {
this.nome = nome;
this.tipo = tipo;
this.valor = valor;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
@Override
public String toString() {
return "Produto [nome=" + nome + ", tipo=" + tipo + ", valor=" + valor + "]";
}
}
2 - Cliente
public class Cliente {
private String nome;
private int quantidade;
private double dinheiro;
public Produto item;
public Cliente(String nome, int quantidade, double dinheiro) {
//super();
this.nome = nome;
this.quantidade = quantidade;
this.dinheiro = dinheiro;
}
public void comprar(Produto item) {
if(this.getDinheiro() >= item.getValor()) {
this.setDinheiro(this.getDinheiro() - item.getValor());
this.setQuantidade(this.getQuantidade() + 1);
System.out.println("Você comprou um " + item.getNome() + " e seu saldo agora é "
+ this.getDinheiro());
System.out.println(item.getTipo());
}else {
javax.swing.JOptionPane.showMessageDialog(null, "Você não possui dinheiro suficiente");
}
}
public void setNome(String nome){
this.nome = nome;
}
public String getNome(){
return nome;
}
public void setQuantidade(int quantidade){
this.quantidade = quantidade;
}
public int getQuantidade(){
return quantidade;
}
public void setDinheiro(double dinheiro){
this.dinheiro = dinheiro;
}
public double getDinheiro(){
return dinheiro;
}
}
3 - Teste
public class Teste {
public static void main(String[] args){
Produto p1 = new Produto("Achocolatado", "Produto alimentício", 4.17);
Produto p2 = new Produto("Sabão em pó", "Produto de limpeza", 12.39);
Produto p3 = new Produto("Guardanapo", "Utilidades", 2.67);
Cliente c1 = new Cliente("Fulano", 5, 122.00);
Cliente c2 = new Cliente("Beltrano", 4, 220.00);
Cliente c3 = new Cliente("Sicrano", 9, 345.50);
c1.comprar(p1);
}
}
Iohannes
Valew Iohannes, eu reescrevi e deu certo.
Realmente o codigo de calculo eu arrumei.
Outro ponto que eu estou tendo dificuldade é em colocar o dinheiro de volta pelo método devolverProduto.
O não consigo fazer o dinheiro ser ressarcido.
public void devolverProduto() {
if(this.getQuantidade() >0) {
this.setQuantidade(this.getQuantidade()-1);
this.setDinheiro(this.getDinheiro()+item.getValor()); // esta dando erro nessa linha
System.out.println(“Você devolveu o produto e seu dinheiro foi ressarcido” + this.getDinheiro());
public class Cliente {
private String nome;
private int quantidade;
private double dinheiro;
public Produto item;
public Cliente(String nome, int quantidade, double dinheiro) {
//super();
this.nome = nome;
this.quantidade = quantidade;
this.dinheiro = dinheiro;
}
public void comprar(Produto item) {
if(this.getDinheiro() >= item.getValor()) {
setProduto(item);
this.setDinheiro(this.getDinheiro() - (this.getQuantidade() * item.getValor()));
System.out.println("Você comprou " + this.getQuantidade() + " " + item.getNome()
+ "(s) e seu saldo agora é R$ " + this.getDinheiro() + ".");
System.out.println("Tipo: "+ item.getTipo());
}else {
javax.swing.JOptionPane.showMessageDialog(null, "Você não possui dinheiro suficiente");
}
}
public void devolverProduto(int quantidade, Produto item){
if(this.getProduto() != null){
if(this.getProduto().getNome().equals(item.getNome())){
if(quantidade >= this.getQuantidade())
quantidade = getQuantidade();
double valorReembolso = item.getValor() * quantidade;
this.setDinheiro(this.getDinheiro() + valorReembolso);
this.setQuantidade(getQuantidade() - quantidade);
System.out.println("\n\nO cliente " + this.getNome() + " devolveu " + quantidade
+ " unidades do produto " + item.getNome() + "\nProduto(s) mantidos : "
+ this.getQuantidade() + "\nReembolso: R$ " + valorReembolso
+ "\nSaldo atual: R$ " + Math.floor(this.getDinheiro()));
}else
System.out.println("\n\nO produto " + item.getNome()
+ " não foi comprado pelo cliente " + this.getNome() + ".");
}else
System.out.println("\n\nO cliente " + this.getNome() + " não comprou nenhum produto.");
}
public void setNome(String nome){
this.nome = nome;
}
public String getNome(){
return nome;
}
public void setQuantidade(int quantidade){
this.quantidade = quantidade;
}
public int getQuantidade(){
return quantidade;
}
public void setDinheiro(double dinheiro){
this.dinheiro = dinheiro;
}
public double getDinheiro(){
return dinheiro;
}
public void setProduto(Produto item){
this.item = item;
}
public Produto getProduto(){
return item;
}
}
Rodando…
Nesse caso, informa-se do total de produtos, quantos se quer devolver. Se for passado um valor maior a se devolver que o comprado, simplesmente devolve tudo. No exemplo passei 9 itens. Logo, devolverá todos os 5.
Iohannes
Nossa muito obrigado.
Deu certo, eu peguei a sua ideia de colocar 2 parâmetros no método devolver e resolveu minha vida.
valeu pela ajuda, estou iniciando no java e seu código ficou muito bom.
ja clareou as ideias aqui. valew mesmo.