Ao ser executado, o programa gera o seguinte resultado na te...
Considere o seguinte programa escrito em Java:
public class Garrafa{
int capacidade;
int volumeOcupado=0;
Garrafa(int capacidade)
{
this.capacidade=capacidade;
}
boolean inserirLiquido(int qtd){
if ( (capacidade-volumeOcupado)>=qtd){
volumeOcupado+=qtd;
return true;
}else return false;
}
boolean transferirLiquido(Garrafa g)
{
if(this.inserirLiquido(g.volumeOcupado)) {
g.volumeOcupado=0;
return true;
}
else return false;
}
public static void main(String [] args)
{
Garrafa a = new Garrafa(10);
Garrafa b = new Garrafa(12);
a.inserirLiquido(2);
b.inserirLiquido(3);
a.transferirLiquido(b);
b.transferirLiquido(a);
b.transferirLiquido(b);
System.out.print("Volume ocupado em a:"+a.volumeOcupado+", e em b:"+b.volumeOcupado);
}
}
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: B - Volume ocupado em a:0, e em b:0
Para resolver essa questão, é necessário compreender alguns conceitos fundamentais da programação em Java, que incluem o entendimento de classes, métodos, construtores, passagem de parâmetros e a manipulação de atributos de objetos.
O programa Java em questão define uma classe Garrafa com dois atributos: capacidade e volumeOcupado. Há também um construtor que inicializa a capacidade da garrafa e dois métodos: inserirLiquido para adicionar uma quantidade de líquido à garrafa, e transferirLiquido para transferir todo o líquido de uma garrafa para outra, se houver espaço suficiente.
O método main cria duas instâncias da classe Garrafa, a com capacidade 10 e b com capacidade 12. Em seguida, insere-se 2 unidades de líquido na garrafa a e 3 unidades na garrafa b.
A primeira chamada do método transferirLiquido tenta transferir o líquido de a para b. Como a garrafa b já tem 3 unidades e sua capacidade é 12, a transferência de 2 unidades da garrafa a é bem-sucedida, deixando b com 5 unidades e a vazia.
Na segunda chamada, b tenta transferir seu próprio líquido para a. No entanto, a tem capacidade de apenas 10 unidades e b tem 5 unidades. A transferência é bem-sucedida e a fica com 5 unidades, enquanto b fica vazia.
Finalmente, a última chamada de transferirLiquido tenta transferir o líquido de b para b mesma, o que não faz sentido prático e, na forma como o método foi escrito, resulta em nenhuma mudança, pois b já está vazia e a função de inserção é chamada com quantidade 0.
Portanto, ao final do programa, a garrafa a estará vazia porque seu conteúdo foi transferido para b e depois b transferiu seu conteúdo para a, e a garrafa b também estará vazia porque transferiu seu conteúdo para a. Assim, o resultado impresso será "Volume ocupado em a:0, e em b:0", que corresponde à alternativa B.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
a.inserirLiquido(2); -> a=2, b=0
b.inserirLiquido(3); -> a=2, b=3
a.transferirLiquido(b); -> a=5, b=0
b.transferirLiquido(a); -> a=0, b=5
b.transferirLiquido(b); -> a=0, b=0
.
É um código com um bug.
Após chamar "transferirLiquido", o volumeOcupado sempre será setado para zero, mesmo se transferir para ele mesmo.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo