Enunciado distribuído na sala.
static
da definição do método distance
.
0.0
.
As únicas atribuições que NÃO gerarão erro de compilação são:
a = b; a = c; a = d; c = d;
a = b; c = d;
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.
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.
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.
Quem deu a explicação correta ganhou o valor integral, mas créditos parciais foram dados nas seguintes circunstâncias:
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.
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.
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.
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.
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 acertos | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Nota | 0,0 | 0,1 | 0,3 | 0,4 | 0,5 | 0,6 | 0,8 | 0,9 | 1,0 | 1,1 | 1,3 | 1,4 | 1,5 |
Meio ponto para cada comando correto.
Cada item da questão valeu 0,6, com mais 0,1 de bônus para quem acertasse os quatro itens. Créditos parciais nos itens foram dados nas seguintes circunstâncias:
Disse que mudar os tempos de sono garantiria algo.
Sugeriu blocos, comandos ou métodos sincronizados, ou sincronização em geral.
Sugeriu imprimir a
mensagem
toda vez que mudar.
Sugeriu manter uma lista com os valores atribuidos a
mensagem
.
Sugeriu que as atribuições a
mensagem
fossem trocadas por comandos de
concatenam o novo valor ao que já está lá.
Sugeriu retirar o comando
Thread.sleep()
de
main
.
Achou que vai haver interrupção.
Achou que o código imprimirá sempre a frase desejada.
Não mencionou os efeitos de
Thread.sleep()
.
Sugeriu trocar visibilidade de
mensagem
para
public
.
Falou apenas do tempo de sono.
Sugeriu imprimir antes do "comando"
throws
(não é um comando).
Cada item da questão valeu 0,6, com mais 0,1 de bônus para quem acertasse os quatro itens.
© 2013 João Meidanis