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