MC336 - Prova Java

Enunciado distribuído na sala.

Gabarito

Questão 1

  1. O código não está correto. Dará erro de compilação. A melhor forma de consertá-lo é remover o modificador static da definição do método distance.
  2. Ao consertar o código conforme acima, será impresso zero em ponto flutuante: 0.0.

Questão 2

  1. As únicas atribuições que NÃO gerarão erro de compilação são:

    a = b; a = c; a = d; c = d;
  2. Os dois comandos poderiam ser:
    a = b; c = d;

Questão 3

  1. Não há garantia de que sempre será impressa esta frase.
  2. A variável mensagem pode receber outro valor, a saber, "A vida é dura", dado pela thread que executa HardLife, antes de ser impressa.

    Note que mensagem é protected, e portanto é herdada pela subclasse Main. Além disso, mensagem é um campo estático, e portanto é compartilhado entre todas as instâncias, tanto da classe mãe quanto da classe filha, e existe mesmo que não haja nenhuma instância destas classes.

  3. Ajudaria, mas não garantiria. No código, cada thread dorme por 1 segundo. Se a thread Main acordar antes, ela provavelmente vai imprimir mensagem sem que a thread HardLife tenha tempo de modificar mensagem. Mas, se HardLife acordar antes, ela provavelmente terá tempo de modificar mensagem antes da impressão.

    Mudando o tempo de sono pode aumentar bastante a chance relativa de que uma ou outra acorde primeiro, mas lembre-se que Java não garante que o tempo de sono será exatamente igual ao argumento dado para Thread.sleep. Assim, apenas mudar os parâmetros não dá uma garantia absoluta.

  4. Para garantir que as mudanças feitas em mensagem sejam todas visíveis antes da impressão. é necessário chamar o método join() antes do comando de impressão. No caso, o código que dispara a thread deveria mudar para:
    Thread t = new Thread(new HardLife());
    t.start();

    para que possamos reter uma referência à thread disparada, e, imediatamente antes do comando de impressão, deveríamos ter:

    t.join();

    Se houvesse mais threads mexendo em mensagem, deveria haver um join para cada uma.

Questão 4

  1. erro de compilação
  2. erro de execução
  3. normal
  4. exceção

Critérios de correção

Questão 1

  1. Valor 1,5.

    Quem deu a explicação correta ganhou o valor integral, mas créditos parciais foram dados nas seguintes circunstâncias:

    Crédito parcial de 1,0

    Percebeu que, apesar dos campos serem privados, o método é público, e portanto o programa principal consegue chamá-lo e indiretamente ter acesso aos campos.

    Crédito parcial de 0,5

    Percebeu que p.distance(p) é a distância do ponto p a ele mesmo.

    Mencionou que o programa faria mais sentido se houvesse outro ponto.

    Considerou "erro" o fato do programa não fazer algo que faça sentido.

    Percebeu que havia problemas relacionados a static mas não soube consertar.

    Falou em distância até a origem.

    Notou que dá erro de compilação e sabe que sem compilar um programa não roda.

    Crédito parcial de 0,0

    Achou que faltou this.

    Achou que é problema de visibilidade ( public , protected , private ).

    Achou que ponto sempre será (0,0).

    Não percebeu que distance era static .

    Disse que não tinha erro de compilação, só de execução, ou então não viu erro nenhum.

  2. Valor 1,0.

    Bastava falar que imprime 0.0 (ou mesmo 0 , que ao pé da letra estaria errado, mas considerei que a pessoa "pegou a ideia") para ganhar o valor integral. Quem falou que é impressa a distância de um ponto a ele mesmo, sem mencionar 0.0 , ganhou 0,9.

Questão 2

  1. Valor 1,5.

    Temos 12 atribuições, sendo 4 que não geram erro de compilação e 8 que geram. A nota foi de 0,125 para cada atribuição que foi classificada corretamente, ou segundo a tabela:

    Número de acertos0123456789101112
    Nota0,00,10,30,40,50,60,80,91,01,11,31,41,5

  2. Valor 1,0.

    Meio ponto para cada comando correto.

Questão 3

Questão 4


MC336 Home

© 2013 João Meidanis