É possivel que calculo do código saia errado por causa de algum elemento errado? (NetBeans)

Eu to tendo dificuldade em entender o resultado de uma conta em um código porque o valor do resultado NÃO BATE COM O DO CALCULO, estou praticando POO mas a resposta não sai como o esperado

public class BC {
   
    private String tipoCombustivel;
    private float valorLitro;
    float quantidadeCombustivel;
    
    public BC (String tipoCombustivel, float valorLitro, float quantidadeCombustivel){
           this.tipoCombustivel = tipoCombustivel;
           this.valorLitro = valorLitro;
           this.quantidadeCombustivel = quantidadeCombustivel;
    }

    public void alterarValor(float valorLitro) {
        this.valorLitro = valorLitro;
    }

    public void alterarCombustivel(String tipoCombustivel){
        this.tipoCombustivel = tipoCombustivel;
    }

    public void alterarQuantidadeCombustivel(float quantidadeCombustivel) {
        this.quantidadeCombustivel = quantidadeCombustivel;
    }
    public float abastecerPorValor(float valor) {
               float temp;
               temp = valor/valorLitro;
               alterarQuantidadeCombustivel(this.quantidadeCombustivel - temp);
               return temp;
    }
    
    public float abastecerPorLitro(float qtd) {
               float temp2;
               temp2 = qtd * valorLitro;
               alterarQuantidadeCombustivel(this.quantidadeCombustivel - qtd);
               return temp2;
    }
    
}

Esse é o código da classe e observem o métido main
BC a1 = new BC("Gasolina", 5, 500); System.out.println(a1.abastecerPorValor(150)); System.out.println(a1.quantidadeCombustivel); System.out.println(a1.abastecerPorLitro(30));

System.out.println(a1.quantidadeCombustivel);`

Essa ultima saida ta saindo a resposta ERRADA
Saida

Eu não consigo entender como o calculo chegou a esse valor até porque até onde eu entendo
30 * 5 = 150
150 - 500 = 350, não consigo entender como surgiu 440, alguém pode solucionar por favor

Observei 2 coisas.

Primeiro:

Acho que seu código tá errado porque no método abastecerPorValor vc subtrai o tempo da quantidade atual de combustível, mas no método abastecerPorLitro vc está subtraindo a quantidade ao invés do tempo.

Ou seja, vc está fazendo quantidadeCombustivel - 30 e não quantidadeCombustivel - 150.

Era para ser assim mesmo?

Segundo:

Mesmo que o código estive correto e vc estivesse subtraindo o tempo no método abastecerPorLitro vc não estaria subtraindo 150 de 500, vc estaria subtraindo da quantidade atual que é 470.

1 curtida

Obrigado, pra falar a verdade peguei o codigo da net pra poder entender pq tava tendo MUITA DIFICULDADE NA CONSTRUÇÃO DESSE EXERCICIO, n tava conseguindo pegar a lógica, mas vou rever aqui e tentar, obrigado :slight_smile:

1 curtida

Pronto, revi o que aconteceu, o 470 ta dentro da varíavel

quantidadeCombustivel

poderia me explicar como isso aconteceu por favor? no seria 500 que fica guardado na memória? queria entender como o 470 foi parar la se ele é resultado do

alterarQuantidadeCombustivel

O 470 foi para lá nesta linha:

System.out.println(a1.abastecerPorValor(150));

Dentro deste método ele faz valor / valorLitro que é 150 / 5 que dá 30. 500 - 30 é 470.

Vamos por partes.

Quando vc fez BC a1 = new BC("Gasolina", 5, 500);, criou o objeto a1 contendo o seguinte:

Campo valor
tipoCombustivel Gasolina
valorLitro 5
quantidadeCombustivel 500

Depois vc chama a1.abastecerPorValor(150). Dentro deste método, ele faz temp = valor / valorLitro. Bem, valor é 150 (o que foi passado como argumento do método) e valorLitro, como vimos na tabela acima, é 5. Então o valor de temp é 30.

A seguir, vc chama alterarQuantidadeCombustivel(this.quantidadeCombustivel - temp). Sabemos pela tabela acima que quantidadeCombustivel é 500, então no fundo estamos chamando alterarQuantidadeCombustivel(500 - 30), ou seja, alterarQuantidadeCombustivel(470). Então ao final de tudo isso, o objeto a1 foi alterado para:

Campo valor
tipoCombustivel Gasolina
valorLitro 5
quantidadeCombustivel 470

Depois vc chama a1.abastecerPorLitro(30). Dentro dele, é feito temp2 = qtd * valorLitro, e como valorLitro é 5 e qtd é 30 (pois qtd é o valor que foi passado como argumento), então temp2 é 150. Depois é chamado alterarQuantidadeCombustivel(this.quantidadeCombustivel - qtd). Neste ponto, quantidadeCombustivel é 470 e qtd é 30, então isso é o mesmo que alterarQuantidadeCombustivel(470 - 30), ou seja, alterarQuantidadeCombustivel(440).

Ou seja, depois disso, o objeto a1 agora é:

Campo valor
tipoCombustivel Gasolina
valorLitro 5
quantidadeCombustivel 440

Portanto, quantidadeCombustivel é 440. Está correto.

O que pode ter te confundido é que o método abastecerPorLitro retorna o valor de temp2, que no caso é 150. Ele retorna o valor do abastecimento (5 reais por litro, vezes 30 litros, dá 150 reais), e não a quantidade de litros que foi retirada da bomba.

1 curtida

Muito Obrigado, Você é meu heroi, um dos melhores dessa comunidade, sempre me ajuda. :slight_smile: