POO Examen Solucion Segundo Parcial ESPOL

12
ESCUELA SUPERIOR POLITECNICA DEL LITORAL FACULTAD DE INGENIERIA EN ELECTRICIDAD Y COMPUTACION PROGRAMACION ORIENTADA A OBJETOS EXAMEN FINAL I TERMINO 2007 Nombre: Paralelo: 1. (60 puntos) Implemente el Juego Tres en Raya en AWT o SWING: El jugador que inicia (jugador 1) inicia con X el segundo jugador (jugador 2) sigue con la O, alternándose la colocación de letras en un tablero cuadriculado de tres filas por tres columnas (9 celdas – 9 botones). Gana aquel jugador que pueda llenar una fila o columna o alguna de las diagonales con su letra. Cada vez que se encuentra un ganador (Jugador 1, Jugador 2, o Desconocido), se guarda en archivos o base de datos, quien gano y cuantos pasos dió el ganador hasta completar la fila, columna o diagonal (en el caso de ser desconocido, el numero de pasos es 0). El botón Reiniciar el Juego permite jugar nuevamente. El botón Ver Resultados abre una segunda ventana que contiene un TextArea con la información de los resultados de juegos anteriores, almacenados bien en archivos o bases de datos. No olvide implementar el cerrar de la ventana. Ud. puede hacer uso de las siguientes clases para su implementación: Para archivos Para bases de datos Para las ventanas FileReader, FileWriter DriverManager Frame, JFrame DataInputStream, FileInputStream Connnection, PreparedStatement Label, JLabel DataOutputStream, FileOutputStream ResultSet Button, JButton, TextArea, JTextArea import java.io.*; import java.awt.*; import java.awt.event.*;

description

ESCUELA SUPERIOR POLITECNICA DEL LITORALFACULTAD DE INGENIERIA EN ELECTRICIDAD Y COMPUTACIONPROGRAMACION ORIENTADA A OBJETOSEXAMEN FINAL I TERMINO 2007

Transcript of POO Examen Solucion Segundo Parcial ESPOL

Page 1: POO Examen Solucion Segundo Parcial ESPOL

ESCUELA SUPERIOR POLITECNICA DEL LITORALFACULTAD DE INGENIERIA EN ELECTRICIDAD Y COMPUTACION

PROGRAMACION ORIENTADA A OBJETOSEXAMEN FINAL I TERMINO 2007

Nombre: Paralelo:

1. (60 puntos) Implemente el Juego Tres en Raya en AWT o SWING:

El jugador que inicia (jugador 1) inicia con X el segundo jugador (jugador 2) sigue con la O, alternándose la colocación de letras en un tablero cuadriculado de tres filas por tres columnas (9 celdas – 9 botones). Gana aquel jugador que pueda llenar una fila o columna o alguna de las diagonales con su letra.

Cada vez que se encuentra un ganador (Jugador 1, Jugador 2, o Desconocido), se guarda en archivos o base de datos, quien gano y cuantos pasos dió el ganador hasta completar la fila, columna o diagonal (en el caso de ser desconocido, el numero de pasos es 0).

El botón Reiniciar el Juego permite jugar nuevamente. El botón Ver Resultados abre una segunda ventana que contiene un TextArea con la información de los resultados de juegos anteriores, almacenados bien en archivos o bases de datos. No olvide implementar el cerrar de la ventana.

Ud. puede hacer uso de las siguientes clases para su implementación:Para archivos Para bases de datos Para las ventanas

FileReader, FileWriter DriverManager Frame, JFrameDataInputStream, FileInputStream Connnection, PreparedStatement Label, JLabelDataOutputStream, FileOutputStream

ResultSet Button, JButton, TextArea, JTextArea

import java.io.*;

import java.awt.*;

import java.awt.event.*;

class TresEnRaya{

public int turno;

public static final int EQUIS = 1;

public static final int CERO = 2;

private int matriz[][] = new int[3][3];

public TresEnRaya(){

turno = EQUIS;

Page 2: POO Examen Solucion Segundo Parcial ESPOL

for(int i = 0; i < 3; i++)

for(int j = 0; j < 3; j++)

matriz[i][j] = 0;

}

public String getValor(Coordenada c){

if(matriz[c.i][c.j] == 0) return "*";

if(matriz[c.i][c.j] == EQUIS) return "X";

return "O";

}

public String getTurno(){

if(turno == EQUIS) return "Jugador 1";

return "Jugador 2";

}

public boolean esTresEnRaya(){

return (esFila() || esColumna() || esDiagonal());

}

public void switchTurno(){

if(turno == EQUIS) turno = CERO;

else if(turno == CERO) turno = EQUIS;

}

public void aplastar(Coordenada c){

if(matriz[c.i][c.j]==0)

matriz[c.i][c.j] = turno;

}

private boolean esFila(){

return esFila(0) || esFila(1) || esFila(2);

}

private boolean esColumna(){

return esColumna(0) || esColumna(1) || esColumna(2);

}

private boolean esFila(int i){

Page 3: POO Examen Solucion Segundo Parcial ESPOL

return matriz[i][0]!=0 && matriz[i][0] == matriz[i][1] && matriz[i][1] == matriz[i][2];

}

private boolean esColumna(int j){

return matriz[0][j]!=0 && matriz[0][j] == matriz[1][j] && matriz[1][j] == matriz[2][j];

}

private boolean esDiagonal(){

return (matriz[0][0] != 0 && matriz[0][0] == matriz[1][1] && matriz[1][1] == matriz[2][2]) || (matriz [0][2]!=0 && matriz[0][2] == matriz[1][1] && matriz[1][1] == matriz[2][0]);

}

}

class VentanaResultado extends Frame{

private TextArea t = new TextArea(10,100);

public VentanaResultado(){

add(t, BorderLayout.CENTER);

mostrarResultados();

}

private void mostrarResultados(){

try{

String s= "", cadena;

File inputFile = new File("juego.txt");

BufferedReader in = new BufferedReader(new FileReader(inputFile));

while ((cadena = in.readLine()) != null)

{

s = s + cadena + "\n";

}

t.setText(s);

}

catch(IOException e){

}

Page 4: POO Examen Solucion Segundo Parcial ESPOL

}

}

class Tablero extends Panel implements ActionListener{

TresEnRaya T;

Panel p1 = new Panel();

Panel p2 = new Panel();

Panel p3 = new Panel();

Button B[][] = new Button[3][3];

Button b1, b2;

Label l = new Label(" ");

public Tablero(){

T = new TresEnRaya();

p1.setLayout(new GridLayout(3,3));

this.setLayout(new BorderLayout());

this.add(p1, BorderLayout.NORTH);

this.add(p2, BorderLayout.CENTER);

this.add(p3, BorderLayout.SOUTH);

crearControles();

aniadirListenerBotones();

}

private void aniadirListenerBotones(){

for(int i = 0;i < 3; i++){

for(int j = 0; j < 3; j++){

B[i][j].addActionListener(this);

}

}

b1.addActionListener(this);

b2.addActionListener(this);

}

private void crearControles(){

Page 5: POO Examen Solucion Segundo Parcial ESPOL

int i, j;

for(i = 0;i < 3; i++){

for(j = 0; j < 3; j++){

B[i][j] = new Button("");

p1.add(B[i][j]);

}

}

b1 = new Button("Reiniciar el juego");

b2 =new Button("Ver Resultados");

p2.add(l);

p3.add(b1);

p3.add(b2);

actualizar();

}

private void actualizar(){

for(int i = 0;i < 3; i++){

for(int j = 0; j < 3; j++){

B[i][j].setLabel(T.getValor(new Coordenada(i,j)));

}

}

}

public void actionPerformed(ActionEvent e){

Button b = (Button)e.getSource();

if(b == b1) {

T = new TresEnRaya();

actualizar();

l.setText(" ");

} else if(b == b2){

VentanaResultado v = new VentanaResultado();

v.setSize(300,300);

v.setVisible(true);

Page 6: POO Examen Solucion Segundo Parcial ESPOL

}

else{

marcarBoton(b);

if(T.esTresEnRaya()) {

cambiarEtiqueta(T.getTurno());

guardarResultados();

T = new TresEnRaya();

actualizar();

}

else T.switchTurno();

}

}

private void guardarResultados(){

try{

File outputFile = new File("juego.txt");

FileWriter out = new FileWriter(outputFile,true);

out.write("Ganador " + T.getTurno() + "\n");

out.close();

}catch (IOException e){

System.out.println("error");

}

}

void cambiarEtiqueta(String s){

l.setText("Ganador " + s);

}

void marcarBoton(Button b){

Coordenada c = buscarBoton(b);

T.aplastar(c);

b.setLabel(T.getValor(c));

System.out.println(c.i + "," + c.j + " " + T.getValor(c) + " turno " + T.turno );

}

Page 7: POO Examen Solucion Segundo Parcial ESPOL

Coordenada buscarBoton(Button b){

for(int i = 0; i < 3; i++){

for(int j = 0; j < 3; j++){

if(b == B[i][j]) {

Coordenada c = new Coordenada(i,j);

return c;

}

}

}

return null;

}

}

2. (40 puntos) Seleccione la opción valida y/o responda.

2.1 ¿Qué pasaría si trata de correr y compilar el siguiente código Java? (4 puntos)

interface A{public void innerMeth();

}class B implements A{

public void innerMeth(int memVar){System.out.println(memVar);

}}public class Test {

A a;int memVar = 1;void aMethod(){

a = new B();}public static void main(String[] args){

Test t = new Test();t.a.innerMeth();

} }a) Error de compilación.b) Se lanza la excepción NoSuchMethodException en tiempo de ejecución.c) Compila, corre e imprime 1d) Se lanza una excepción NullPointerException en tiempo de ejecución.

2.2 Se tiene la siguiente porción de código HTML de la página TestEjercicio.html: (5 puntos)

<APPLET CODE="Ejercicio.class" WIDTH=750 HEIGHT=100><PARAM NAME=param1 VALUE=”Ejercicio de Applets”>

</APPLET>

Y el siguiente código del applet Ejercicio.java:

import java.awt.Graphics;import java.awt.Font;import java.awt.Color;import java.applet.*;

Page 8: POO Examen Solucion Segundo Parcial ESPOL

public class Ejercicio extends Applet { Font f = new Font("TimesRoman", Font.BOLD+Font.ITALIC, 24); String param1, param2; public void init() { param1 = getParameter("param1"); param2 = getParameter("param2"); if (param2 == null) param2=""; }

public void paint(Graphics screen) { screen.setFont(f); screen.setColor(Color.red); screen.drawString(param1, 5, 50); screen.drawString(param2, 5, 100); } }

Si se intenta compilar este applet y luego abrir la página HTML, qué resultado obtendrá?a) Se produce un error al tratar de compilar el applet.b) Se muestra en la página HTML: “Ejercicio de Applets”c) Se produce la excepción NullPointerException y no se podrá cargar el applet.d) El applet es cargado en la página HTML, pero no muestra nada.

2.3 Dado el siguiente programa: (9 puntos)

import java.io.*;

class MyException extends Exception{int value;MyException(int val){

value = val;}public int getValue(){

return(value);}

}class TestClass{

public static void foo(int x) throws MyException,IOException{if(x < 0){

System.out.println("X too low");throw(new MyException(x));

}if(x > 100){

System.out.println("X too high");throw(new IOException("Mike"));

}System.out.println("X OK");

}public static void main(String[] args){

try{// convert first argument to foo(x);int x = Integer.parseInt(args[0]); System.out.println("Mike");

}catch(NumberFormatException e){

System.out.println("Bad Number");}catch(IOException e){

System.out.println("Rusty");}catch(MyException e){

System.out.println("Dimitri");System.out.println(e.getValue());

}}

} Qué imprime el programa cuando es invocado de la siguiente forma:

Page 9: POO Examen Solucion Segundo Parcial ESPOL

java TestClass 2 java TestClass 200 java TestClass -200X OKMike

X too high Rusty

X too low Dimitri-200

2.4 Dado el siguiente programa: (18 puntos)

class MyFrame extends JFrame{public MyFrame(){

setTitle("WidgetTest");setSize(300,300); // size in pixelssetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}}class MyPanel extends JPanel{

Color current = Color.red;JButton button = new JButton("Button");

class ButtonHandler implements ActionListener{public void actionPerformed(ActionEvent e){

current = Color.green;System.out.println("Mike");repaint();

}}class MouseHandler extends MouseAdapter{

public void mouseClicked(MouseEvent ev){if(ev.getX() <= 100) System.out.println("Rusty");if(ev.getY() >= 100) current = Color.blue;System.out.println("Dimitri");repaint();

}}MyPanel(){

button.addActionListener(new ButtonHandler());addMouseListener(new MouseHandler());add(button);System.out.println("Alan");

}public void paintComponent(Graphics g){

super.paintComponent(g);Graphics2D g2 = (Graphics2D)g;g.setColor(current);g2.fill(new Rectangle2D.Float(0,100,100,100));

}}

public class WidgetTest{public static void main(String[] args){

MyFrame myframe = new MyFrame();Container contentpane = myframe.getContentPane();contentpane.add(new MyPanel());myframe.show();

}}

1. ¿Cuál de las siguientes DEBE ser una clase interna? (En otras palabras, cuál de las siguientes no trabajará si su implementación es movida fuera de la clase MyPanel) (3 puntos)

a) ButtonHandlerb) MouseHandlerc) Ambas ButtonHandler y MouseHandlerd) Ni ButtonHandler ni MouseHandler

2. ¿Qué es Color.red ? (3 puntos)a) una variable estática pública

Page 10: POO Examen Solucion Segundo Parcial ESPOL

b) una instancia pública de una variablec) un método público estáticod) un método público de instancia

3. ¿Qué es paintComponent (en MyPanel)? (3 puntos)a) una clase internab) un método estático públicoc) un manejador de eventos (listener)d) un método público de instancia

4. ¿Qué imprime el programa cuando se da click con el ratón en el rectángulo lleno creado en paintComponent? (3 puntos)RustyDimitri

5. ¿De qué color se pinta el rectángulo lleno del programa una vez que se da click con el ratón dentro del área del rectángulo? (3 puntos)Azul

6. Si la línea button.addActionListener(new ButtonHandler()); se borra del programa y el programa es recompilado. ¿Qué se imprimirá cuando se dé click en el botón? (3 puntos)Nada

2.5 El resultado de compilar y ejecutar el siguiente código es: (4 puntos)

class Greebo implements Runnable { public void run (String message) { System.out.println("Examen del Segundo Parcial"); } } class GreeboTest { public static void main (String args[]) { Greebo g = new Greebo(); Thread t = new Thread(g); t.start(); } }

a) Sale un error de compilación, puesto que no existe la interfase Runnableb) Compila y ejecuta, se muestra: Examen del Segundo parcialc) Compila, pero al ejecutar no muestra nada en pantalla.d) Sale un error de compilación, puesto que GreeboTest, debe ser declarada abstracta.e) Ninguna de las anteriores