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

Duvida sobre atributo static

Ola!

Fazendo minhas brincadeiras aqui para reforcar as licoes, me deparei com uma duvida. Como manter a relacao entre dois atributos static ao longo de adicoes de novos objetos? Eu quero que o totalCost seja atualizado de forma a ser reduzido dos funds.

Mas o que obtenho nao eh o esperado.

No exemplo abaixo.


public class MyHangar {

    String name;
    String role;
    double cost;
    static double totalCost;
    static double funds = 300;

    public MyHangar(String name, String role, double cost) {
        this.name = name;
        this.role = role;
        this.cost = cost;
        totalCost += this.cost;
        funds -= this.totalCost;

        System.out.println("Adding new ship to hangar. Name: " + name + ". Role: " + role + ". Cost: " + cost);
        System.out.println("Your total operational cost is: " + totalCost + ". Your funds left:" + funds + ".");
        System.out.println();

    }

}

public class Ships {

    public static void main(String[] args) {
        MyHangar ship1 = new MyHangar("Hammerhead", "Patrol ship", 100);

        MyHangar ship3 = new MyHangar("Caterpillar", "Trading", 50);

    }
}

// ao executar esse vem o resultado abaixo.

Adding new ship to hangar. Name: Hammerhead. Role: Patrol ship. Cost: 100.0
Your total operational cost is: 100.0. Your funds left:**200.0**.

Adding new ship to hangar. Name: Caterpillar. Role: Trading. Cost: 50.0
Your total operational cost is: 150.0. Your funds left:**50.0.**

Negritei a parte que me incomoda. Notei que o calculo que montei esta fazendo confusao, mas mesmo com duas cervejas ainda nao achei o meu erro.

edit: por negritar me refiro aos astericos duplos ali em "funds left".

Alguem ajuda o novato aqui? :]

2 respostas
solução!

Boa tarde, Gabriel! Como vai?

O problema é que sempre que vc cria um objeto do tipo MyHangar vc passa o custo para o construtor mas subtrai o valor total do seu fundo fazendo:

funds -= this.totalCost;

Daí a subtração que será feita será sempre em relação ao valor total de todos os navios.

Para ficar do jeito que eu imagino que vc queira, é só substituir a linha anterior por:

funds -= this.cost;

Pegou a ideia?

O senhor eh um nobre, muito obrigado!