[RESOLVIDO] Problema lógico, qual formula devo usar?

Me foi passado um exercício do qual estou quase terminando mas encontrei dificuldade em um ponto:

Receber o conteúdo de outro balde. Esta operação deve ser realizada de modo que nenhuma gota d´água seja perdida.

derramar o conteúdo em outro balde. Esta operação deve ser realizada de modo que nenhuma gota d’água seja perdida.

Até então eu tinha conseguido concluir sem dificuldade, o problema é que agora eu percebi que quando eu passo a quantidade de litros d’agua de um balde cheio que tem a capacidade maior que outro, o que tem a capacidade menor fica com uma quantidade maior do que o próprio limite, algo que é absurdo e precisa ser corrigido.

Pensei em usar o ‘if’ e colocar algo como:

if(this.quantidade>that.quantidade){
this.quantidade=that.quantidade+this.quantidade;
}

Mas mesmo assim se a quantidade do ‘this’ for 20 enquanto o limite é 25 e o do ‘that’ for 19 enquanto o limite é 20, o limite do ‘this’ vai ser 'quebrado.

Use o Math.min:

int transferencia = Math.min(that.quantidade, this.capacidade - this.quantidade);
this.quantidade = this.quantidade + transferencia;
that.quantidade = that.quantidade - transferência;
1 curtida

Pelo que vi cada variável tem 2 atributos, o primeiro é a quantidade que ele está no momento e o outro é a capacidade. vou fazer o exemplo só do primeiro para você ter uma noção:

public void recebaDe (Balde that){
     if((this.quantidade+that.quantidade)<=this.capacidade){
            this.quantidade+=that.quantidade;
            that.quantidade=0;
     }
     else{
           int quantoFaltaParaChegarNaCapacidade = this.capacidade-this.quantidade;
           this.quantidade=this.capacidade;
           that.quantidade-=quantoFaltaParaChegarNaCapacidade;
    }
}

Consegui achar uma solução(pro outro fiz a msm coisa mas com this e that invertidos):

Blockquote public void recebaDe (Balde that){
int limiteReceber= this.capacidade-this.quantidade;
if(limiteReceber>=that.quantidade){
this.quantidade=that.quantidade+this.quantidade;
that.quantidade=0;}
else {
if(limiteReceber<=that.quantidade){
this.quantidade=this.quantidade+limiteReceber;
that.quantidade= that.quantidade-limiteReceber;}
}
}