Olá, alguém poderia me dizer como utilizar o método Equals?
Se eu tenho uma classe Produto com nome e quantidade. Se eu tenho um produto que tem o mesmo nome, como eu armazeno somente a quantidade total a esse mesmo produto usando o Equals?
Agradecido se alguém puder ajudar.
Não deu pra entender direito o que você quer fazer, mas já adianto que provavelmente o equals
não é a solução.
O método equals
serve para comparar uma instância com outra, e dizer se elas são iguais: https://howtodoinjava.com/java/basics/java-hashcode-equals-methods/
Por exemplo, se você tem 2 produtos:
Produto p1 = new Produto(etc...);
Produto p2 = new Produto(etc...);
if (p1.equals(p2)) {
// produtos p1 e p2 são iguais
}
No caso, a classe Produto
teria um método equals
que diz qual é a regra usada para saber se os produtos são iguais. E aí você coloca a regra que precisar (por exemplo, se os nomes são iguais, ou se o nome e código são iguais, ou qualquer outra, dependendo da necessidade).
Ou seja, nada a ver com o que você quer fazer (ou pelo menos, com o que eu acho que entendi que você quer…)
é basicamente, eu inseri um produto com nome: tesoura com quantidade: 3.
como eu faço se eu quiser inserir novamente o produto tesoura sem acrescentar outro produto somente atribuindo o valor a esse produto.
não usa o equals para comparar se já tem um produto com o mesmo nome?
Exemplo
–Digite nome e quantidade----
nome: tesoura quantidade: 3
nome: tesoura quantidade: 5
Imprimir: nome: tesoura quantidade: 3
nome: tesoura quantidade: 5
O que eu queria que acontecesse:
Imprimir: nome: tesoura quantidade: 8
Olá.
Crie um metodo de soma dentro do seu objeto.
Quando quiser adicionar uma certa quantidade basta encontrar o objeto igual pelo nome e adicionar a quantidade que precisa chamado o método de somar passando a quantidade como parametro:
Para encontrar o objeto de nome igual você pode usar:
if(p1.getNome().equalsIgnoreCase("Nome do seu objeto")) {
p1.adiciona("<quantidade a ser somada>");
}
Abaixo um exemplo:
public class Produto {
private String nome;
private int quantidade;
public Produto() {
super();
}
public Produto(String nome, int quantidade) {
super();
this.nome = nome;
this.quantidade = quantidade;
}
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public void adiciona(int quantidade) {
this.quantidade += quantidade;
}
}
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// instancio o produto p1 com nome laranja e quantidade 1
Produto p1 = new Produto();
p1.setQuantidade(1);
p1.setNome("Tesoura");
System.out.println("Nome : " + p1.getNome());
System.out.println("Quantidade : " + p1.getQuantidade());
p1.adiciona(3);
System.out.println("Nome : " + p1.getNome());
System.out.println("Quantidade : " + p1.getQuantidade());
}
}
Saida desse código:
Nome : Tesoura
Quantidade : 1
Nome : Tesoura
Quantidade : 4
Nesse caso eu usaria um Map
que mapeia os nomes aos produtos. Algo assim:
public class Produto {
private String nome;
private int quantidade;
public Produto(String nome, int quantidade) {
this.nome = nome;
this.quantidade = quantidade;
}
public String getNome() {
return nome;
}
public void adiciona(int qtd) {
this.quantidade += qtd;
}
public int getQuantidade() {
return quantidade;
}
}
// e no main
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
Map<String, Produto> produtos = new HashMap<>();
while (true) {
System.out.println("Digite o nome do produto: ");
String nome = sc.nextLine();
System.out.println("Digite a quantidade: ");
int qtd = Integer.parseInt(sc.nextLine());
if (!produtos.containsKey(nome)) {
// se produto ainda não está no map, cria
produtos.put(nome, new Produto(nome, qtd));
} else {
// se produto já existe, só atualiza a quantidade
produtos.get(nome).adiciona(qtd);
}
// imprime os produtos
System.out.println("Produtos:");
for (Produto produto: produtos.values()) {
System.out.printf("- Nome: %s, quantidade: %d\n", produto.getNome(), produto.getQuantidade());
}
}
}