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