Ao ser executado, o programa gera o seguinte resultado na te...

Próximas questões
Com base no mesmo assunto
Q690230 Programação

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

}

}

Ao ser executado, o programa gera o seguinte resultado na tela de comando:
Alternativas

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