O código a seguir define e implementa a classe ListOfNumbers

Propaganda
Prova Final de Características das Linguagens de Programação – 2008-02
Atenção: nas questões 1 e 3 , cada opção errada assinalada descontará uma opção
corretamente assinalada!
1a questão (2 pontos): Considere o código abaixo:
class SophisticatedForDemo {
public static void main(String[] args){
int[] mynumbers = {1,2,3,4,5,6,7,8,9,10};
for (int item : mynumbers) {
System.out.println("Count is: " + item);
}
}
}
Assinale apenas as alternativas corretas:
a)
b)
Há apenas um um erro de sintaxe: em for (int item : mynumbers);
Há dois erros de sintaxes: um em for (int item : mynumbers) e o outro em
("Count is: " + item);
c) O array deveria obrigatoriamente ter sido declarado como
int mynumbers[] = {1,2,3,4,5,6,7,8,9,10};;
d) Se acrescentarmos o comando
System.out.println(mynumbers.length); logo após o comando
System.out.println("Count is: " + item); teremos um erro de compilação, pois
a variável mynumbers.length deveria ter sido declarada imediatamente após
class SophisticatedForDemo {;
e) O loop for do código acima seria corretamente substituído por:
for(int i=1; i<11; i++){
System.out.println(mynumbers[i])
};
f) Todas as afirmações anteriores são incorretas;
2a questão (2 pontos): Considere o código a seguir de um applet, denominado
UpdateApplet, que mantém um thread para automaticamente atualizar o seu display em
intervalos regulares.
//package exploringjava.threads;
public class UpdateApplet extends java.applet.Applet implements Runnable {
private Thread updateThread;
int updateInterval = 1000;
public void run() {
while ( true ) {
try {
Thread.sleep( updateInterval );
} catch (InterruptedException e ) {
return;
}
repaint();
}
}
public void start() {
if ( updateThread == null ) {
updateThread = new Thread(this);
updateThread.start();
}
}
public void stop() {
if ( updateThread != null ) {
updateThread.stop();
updateThread = null;
}
}
}
Usando o mecanismo de herança codifique um applet que,alternadamente, a intervalos de um
segundo,
desenhe círculos vermelhos e amarelos
no terminal.
Dica: O método Graphics.fillOval (int x, int y, int width, int height); desenha uma oval com a
cor corrente.
3a questão (3 pontos): Considere o código abaixo, que implementa um servidor para jogar jogo
da velha com diversos clientes simultaneamente. Assuma que o protocolo existente entre o
cliente e o servidor consiste de uma descrição do jogo em seu estágio atual [já incluindo a jogada
do cliente e/ou servidor, seguida de um caráter de <new line> (\n)]. Assinale apenas as
afirmações corretas após o código que se segue.
import java.net.*;
import java.io.*;
import java.util.*;
public class ServidorJogoDaVelha {
public static void main( String argv[] ) throws IOException {
ServerSocket ss = new ServerSocket( Integer.parseInt(argv[0]) );
while ( true )
new JogoDaVelhaConnection( ss.accept() );
}
}
class JogoDaVelhaConnection extends Thread {
Socket sock;
JogoDaVelhaConnection ( Socket s ) {
sock = s;
setPriority( NORM_PRIORITY - 1 );
start();
}
public void run() {
try {
OutputStream out = sock.getOutputStream();
String req = new DataInputStream(sock.getInputStream()).readLine;
// processa a requisição do cliente, isto é, comandos para
// "ler" a descrição atual do jogo
// (já incluída a jogada do cliente), e analisá-la;
// Repare que, no início do jogo, o cliente simplesmente
// realiza a conexão – solicitando jogar // e não envia nenhuma descrição do
jogo.
// A descrição inicial do jogo é, então, enviada pelo
// servidor ao cliente.
....
....
// o servidor responde adequadamente, isto é, envia para o cliente
// uma nova descrição do jogo (já incluída a jogada-resposta do
// servidor)
...
...
// algo como:
// PrintStream(out).println (“representação simbólica de uma
descrição do
// jogo”);
nova
sock.close();
}
catch ( IOException e ) {
System.out.println( "I/O error " + e );
}
}
}
Afirmações:
1. O servidor jamais sairá do loop iniciado pelo comando “while (true)”.
2. Todos os comandos deste servidor podem ser executados em “paralelo”, devido à
presença de múltiplos threads de execução.
3. Caso só exista apenas um cliente e após findo o jogo deste único cliente com o servidor,
será executado o comando “sock.close()”, que fechará o socket entre o cliente e o
servidor, terminando, assim, a execução do servidor.
4. O comando “setPriority( NORM_PRIORITY - 1 );” indica que o atendimento a cada
cliente terá uma prioridade diferente, para evitar que o servidor entre em “deadlock”, em
virtude de não ter como atender a mais de um cliente com a mesma prioridade.
5. Apenas um cliente de cada vez poderá executar o trecho correspondente aos comandos:
OutputStream out = sock.getOutputStream();
String req = new DataInputStream(sock.getInputStream()).readLine;
6. Apenas um cliente de cada vez poderá executar o trecho correspondente aos comandos:
JogoDaVelhaConnection ( Socket s ) {
sock = s;
setPriority( NORM_PRIORITY - 1 );
start();
7. Somente podem ser executados em paralelo no servidor, os commandos compreendidos
pelo método “run()”.
8. Caso já exista um servidor atuando na porta indicada por “argv[0]” o loop
while ( true )
new JogoDaVelhaConnection( ss.accept() );
}
não será executado.
4a questão (3 pontos): Considere a public class LinkedList<E> constante da Java™ Platform
Standard Ed. 6. Empregando o conceito de Generics, desenvolva um programa que use
LinkedList<E> para criar duas listas encadeadas, uma contendo apenas objetos do tipo Integer e
outra objetos do tipo String. Adicione pelo menos 3 objetos a cada lista. Depois use os métodos
de LinkedList<E> para recuperar o primeiro elemento e o último elemento de cada lista. Por fim
mostre os elementos recuperados na tela do seu terminal.
Download