Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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;
    }
}