Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Problemas com tipos static

Tentei iniciar um projeto pessoal para controlar o meu dinheiro.

Criei três pacotes

br.com.bruno.financeiroPessoal - Teste.java

br.com.bruno.financeiroPessoal.fluxo -Conta.java

br.com.bruno.financeiroPessoal.gastos -Gastos.java

A Conta.java possui a variável Saldo, então criei um método getSaldo para retornar esse valor. Daí no Gastos.java eu importei o Conta.java e tentei retirar o valor referente ao gasto do saldo , mas o eclipse alerta que :

"Cannot make a static reference to the non-static method getSaldo() from the type conta"

para a seguinte linha do código

double temp = Conta.getSaldo();

10 respostas

Tem como compartilhar o seu código?

Não precisa bruno, agora eu entendi.

O teu método getSaldo não é estático, é preciso ter uma instância da classe Conta para poder chamá-lo.

Conta conta = new Conta(); //instância de um objeto da classe Conta
double temp = conta.getSaldo(); //chamando o método não estático.

Então mas mesmo assim não funcionou. Os códigos são esses :

package br.com.bruno.financeiroPessoal.Gastos; import br.com.bruno.financeiroPessoal.Fluxo.*;

public class Gastos {

String descricao; int valor;

public void gasto(double valor){ double temp = Conta.getSaldo();

}

}


package br.com.bruno.financeiroPessoal.Fluxo;

//Classe que define o dinheiro em conta

public class Conta {

private double saldo;

//Método que retorna o saldo da conta

public double getSaldo() { return this.saldo; }

public void deposita(double valor){ saldo += valor; }

}

Por que nos gastos tu recebe um double? Ele está sendo usado para nada.

Então, a minha idéia era que na classe gasto, ele pegasse o saldo da classe conta e subtraisse o gasto.

Porque eu queria ter um objeto gasto em que eu poderia associar o valor e a sua descrição.

Oi Bruno, tudo bom? O seu código:

public void gasto(double valor) { 
    double temp = Conta.getSaldo();
}

Você precisaria receber um objeto do tipo Conta e fazer da seguinte forma:

public void gasto(Conta conta) { 
    double temp = conta.getSaldo();
}

Mas perceba que você cria uma variável dentro do método gasto() e nao tem como fazer nada com ela.

O correto não seria?

public void gasto(Conta conta) { 
    this.valor += conta.getSaldo();
}
solução!

Ah! então:

public void gasto(Conta conta, double gasto) { 
    double gasto = conta.getSaldo() - gasto;
    System.out.println(gasto);
}

ou

public double gasto(Conta conta, double gasto) {
    double gasto = conta.getSaldo() - gasto;
    return gasto;
}

Opa obrigado Gabriel ! Coloquei para receber o objeto Conta como argumento e agora funcionou :)

Antes tinha a variavel valor ali meio jogada porque eu ainda estava tentando resolver aquele problema rs

Agora funcionou ! :)

Ops, esqueci de mudar o nome da variavel double gasto para double temp e return temp;

Duas alterações bem simples no teu código

public class Gastos {

    private String descricao;
    private double    valor;


    public Gastos( String descricao, double valor ) {
        this.descricao = descricao;
        this.valor = valor;
    }

    public void pagaGasto(Conta conta){
//Caso tu queira verificar se o gasto não é maior que o teu saldo
//        if(valor > conta.getSaldo()){
//            System.err.println( "Saldo insuficiente" );
//        }else{
//            conta.paga( this.valor );
//        }

        conta.paga( this.valor );
    }
}
public class Conta {

    private double saldo;


    public double getSaldo() {
        return this.saldo;
    }

    public void deposita( double valor ) {
        this.saldo += valor;
    }

    public void paga(double valor){
        this.saldo = this.saldo - valor;
    }
}