Dúvida com Decremento e incremento e cópia de variáveis[Resolvido]

4 respostas
P

Olha gostaria de saber o seguinte:

nessa instrução por exemplo:

if(carrinho.size() == 0){
int incrementc = 1;
int aux;
aux = produto.get(i).getQuant_estoque();
produto.get(i).setQuant_estoque(incrementc);
carrinho.add(produto.get(i));
produto.get(i).setQuant_estoque(aux);
		
				}

Supondo que o valor que aux recebe é 10, ou seja inicialmente produto.get(i).getQuant_estoque() tem valor 10 ,
ai quando eu seto o produto, coloco 1 para quantidade de estoque, quando eu passo produto para o carrinho a variável
quantidade estoque vai estar com 1?

O que acontece, é que estou tentando fazer isso no meu código e preciso que o produto adicionado no carrinho esteja
com quantidade de estoque 1, e não está acontecendo, ele sempre fica com os 10 iniciais, e depois, preciso devolver o valor anterior
para o produto que eu setei, por isso seto ele usando a variável aux.

Queria saber como fazer isso.

Outra dúvida é:

Quando eu adicionei o produto no ArrayList Carrinho, foi criada uma cópia independente desse produto no ArrayCarrinho?

Aguardo respostas urgente.

Grato.

Pablo

Quando eu
fique com a quantidade de estoque

4 Respostas

Eric_Yuzo

pablosnr:
Supondo que o valor que aux recebe é 10, ou seja inicialmente produto.get(i).getQuant_estoque() tem valor 10 ,
ai quando eu seto o produto, coloco 1 para quantidade de estoque, quando eu passo produto para o carrinho a variável
quantidade estoque vai estar com 1?
Sim.

pablosnr:
O que acontece, é que estou tentando fazer isso no meu código e preciso que o produto adicionado no carrinho esteja com quantidade de estoque 1, e não está acontecendo, ele sempre fica com os 10 iniciais, e depois, preciso devolver o valor anterior para o produto que eu setei, por isso seto ele usando a variável aux.
O produto está sendo adicionado no carrinho com quant_estoque == 1. Porém em seguida a quantidade é setada com a quantidade original novamente.

pablosnr:
Queria saber como fazer isso.
Sua classe Produto deve implementar o método clone(), que vai retornar uma nova instância de Produto que deverá ser uma cópia do produto que invocou o método.

pablosnr:
Quando eu adicionei o produto no ArrayList Carrinho, foi criada uma cópia independente desse produto no ArrayCarrinho?
Não. O que é passado para o ArrayList é apenas a referência do objeto. Para fazer a cópia do objeto deve usar o método clone.

pablosnr:
Aguardo respostas urgente.
Pedir urgência não acelera a resposta. O tempo é precioso para todos.

Editando: Aqui tem um exemplo de implementação do método clone: http://www.guj.com.br/posts/list/217944.java#1113316

P

Bom dia Eric,

obrigado por responder.
Você poderia me explicar melhor, como usar o clone para passar somente o o produto na posição i , clonado para o Array de carrinhos?

Eu li o exemplo e não consegui implementá-lo.

Grato

Eric_Yuzo

O exemplo do Vini está muito bom. Vou meio que trocar seis por meia dúzia e escrever um outro exemplo.

Primeiramente chame a implementação de clone de Object, que copia todos os atributos da classe. Mas se o atributo for mutável ela vai copiar apenas a referência, portanto o ideal é fazer uma cópia independente destes atributos em sua implementação do clone().
public class Pessoa implements Cloneable { // Implementa a interface para dizer que a classe dá suporte ao clone()
	
	String nome;
	int idade;
	Date nascimento;
	
	public Object clone() {
		try {
			Pessoa copia = (Pessoa) super.clone(); // Copia todos os atributos, tipos primitivos e objetos imutáveis como Strings já são devidamente copiados nesta chamada ao clone de Object.
			copia.nascimento = (Date) nascimento.clone(); // Como o objeto Date é mutável, tenho que fazer uma cópia deste atributo chamando o seu próprio método clone. Se não fizer isto, quando modificar a data de nascimento da pessoa, estarei modificando a do clone também. Este processo deve ser realizado para todos os atributos que sejam mutáveis.
			return copia;
		} catch (CloneNotSupportedException e) {
			return null;
		}
	}
}
Agora que sua classe dá suporte ao clone, basta chamar o método clone() sempre que precisar copiá-lo.
Pessoa joao = new Pessoa("João"); // Cria um objeto pessoa.
Pessoa cloneDoJoao = (Pessoa) joao.clone(); //Cria uma cópia do objeto pessoa.
P

Problema resolvido…
Muito obrigado pela sua ajuda.

Criado 27 de novembro de 2010
Ultima resposta 27 de nov. de 2010
Respostas 4
Participantes 2