Problema com interação de Objetos

5 respostas
Douglas.Rossignolli

Olá galera estou com um problema meio chato aqui para o termino do meu programa, estou fazendo um sistema de loja como exercicio, mas to numa parte que é crucial e não estou conseguindo resolver:

//Metodo de Acesso que apenas retorna o valor total Da nossa bolsa.
	public double valorTotalDaSacola(){
		int i = 0;
		while(i < sacolaDeCompras.length){
			this.valorTotalDaCompra = this.valorTotalDaCompra + sacolaDeCompras[i].getValorDoProduto();
			i = i + 1;
		}
		return this.valorTotalDaCompra;
	}

Esse metodo acima pega o valor da minha sacola de produtos que é um array, perfeito ele funcionando, agora preciso pegar esse método e rolar ele nessa classe para poder pegar o meu valor total e lançar em um espaço do meu array como vcs podem ver abaixo, só que na hora de coloca-lo o eclipse está dizendo que o meu método precisa ser static… ai você poe o método como static então o eclipse encadeia um monte de solicitação de mudanças:

public class Vendas {
	private double[] valoresDasVendas;
	private int elementoDasVendas;
	
	public Vendas(int i){
		valoresDasVendas = new double[i];
		this.elementoDasVendas = 0;
	}
	
	public void colocarValorDaVenda(String nomeDaSacola){
		valoresDasVendas[this.elementoDasVendas] = SacolaDeCompras.valorTotalDaSacola();

	}
}

alguem tem alguma idéia ai?

5 Respostas

A

me tira uma duvida esse metodo valorTotalDaSacola está dentro da classe vendas ??

Douglas.Rossignolli

Não está esta dentro da classe SacolaDeCompras

discorpio

Boa noite a todos.

O Eclipse está dizendo que o método tem que ser estático porque voce não instanciou a classe SacoladeCompras. Assim:

public class Vendas {   
    private double[] valoresDasVendas;   
    private int elementoDasVendas;   
       
    public Vendas(int i){   
        valoresDasVendas = new double[i];   
        this.elementoDasVendas = 0;   
    }   
       
    public void colocarValorDaVenda(String nomeDaSacola){
        /* Aqui se instancia a classe primeiro,
            para depois usar o seu método.  */ 
        SacolaDeCompras sacola = new SacolaDeCompras();  
        valoresDasVendas[this.elementoDasVendas] = sacola.valorTotalDaSacola();   

    }   
}

Só se invoca métodos por referência ao nome da classe, quando os métodos são estáticos, caso contrário voce tem que instanciar a classe.

Douglas.Rossignolli

Então vou precisar reanalizar o meu contexto por que nesse momento o meu objeto sacolaDeCompras já está criada, eu queria é pegar a informação desse objeto já criado, pois se eu tiver que instância-lo ali eu perco as informações, acho que vou ter que reestruturar

discorpio

Boa tarde Douglas.

Neste caso, então o método como estático lhe serviria, isto porque voce não precisaria instanciar a classe, e todos as informações passadas a classe SacolaDeCompras não se perderia, mesmo que voce criasse uma nova instância para a classe, modifique o método para estático assim:

public static double valorTotalDaSacola(){   
        int i = 0;   
        while(i < sacolaDeCompras.length){   
            this.valorTotalDaCompra = this.valorTotalDaCompra + sacolaDeCompras[i].getValorDoProduto();   
            i = i + 1;   
        }   
        return this.valorTotalDaCompra;   
    }

Antes porém, não se esqueça de que a variável "valorTotalDaCompra tem que ser também éstática, senão ela não poderá ser usada em um método estático e nem reter as informações desejadas.

public static double valorTotalDaCompra;

Agora voce pode fazer referência ao nome da classe para invocar o método, como fez antes, assim:

public void colocarValorDaVenda(String nomeDaSacola){   
        valoresDasVendas[this.elementoDasVendas] = SacolaDeCompras.valorTotalDaSacola();   
    }
Criado 3 de junho de 2010
Ultima resposta 5 de jun. de 2010
Respostas 5
Participantes 3