Sie sind auf Seite 1von 14

Solucionario Parcial-Algorítmica II

1. Indique cuál de las siguientes afirmaciones es correcta:

a. Los métodos pueden devolver información de algún objeto mediante un valor


de retorno. (verdadero)

En Java existe una serie de reglas para el retorno de valores en los métodos.
Resumidamente son:

 En un método que devuelve un objeto (de hecho, una referencia), se


puede devolver null
 Un array (o arreglo) es un tipo de retorno legal
 Un método con tipo de retorno void ¡no devuelve nada!
 En un método que devuelve un tipo de dato primitivo, se puede
devolver cualquier valor o variable que pueda ser implícitamente
convertida hacia el tipo de retorno declarado
 En un método con un tipo de dato primitivo como retorno, se puede
devolver cualquier valor o variable que pueda ser casteada hacia el
tipo de retorno declarado
 En un método con un objeto como tipo de retorno, se puede devolver
cualquier tipo de objeto que pueda ser implícitamente convertido
hacia el tipo de retorno declarado
b. Los métodos siempre obtienen parámetros con los que obtener la
información necesaria. (falso)

Utilizar métodos sin parámetros es muy similar, hasta un poco más fácil ya
que no debes enviar ningún valor, pero si obtienes un resultado de vuelta,
igual que al utilizar métodos con parámetros.

static String Metodo1() {


return "Hola";
}
El método anterior está declarado sin parámetros, lo que indica que puede
funcionar solo invocando su nombre:

Metodo1();

Obtendríamos como salida “Hola”, Aunque una de las funcionalidades


primordiales de un método es recibir uno o varios valores, procesarlos y
devolver saludas, en ocasiones se hace necesario el uso de estos sin
argumentos o parámetros.

c. A partir de una clase tan solo se puede crear un objeto. (falso)


Todos los objetos son instancias de una clase: Los objetos se crean por
instanciación. Y, por tanto, se pueden instanciar varios de ellos pertenecientes
a una sola clase.

d. El estado de los objetos se representa mediante los parámetros de su


constructor. (falso)

El estado de un objeto abarca todas las propiedades del objeto, y los valores
actuales de cada una de esas propiedades. Las propiedades de los objetos
suelen ser estáticas, mientras los valores que toman estas propiedades
cambian con el tiempo.

El hecho de que los objetos tengan estado implica que ocupan un espacio, ya
en el mundo físico, ya en la memoria del ordenador.

El estado de un objeto está influido por la historia del objeto.

No deben confundirse los objetos, que existen en el tiempo, son mutables,


tienen estado, pueden ser creados, destruidos y compartidos..., con los
valores (los asignados a una variable, por ejemplo) que son cantidades con
las propiedades de ser atemporales, inmutables.

El estado de un objeto representa el efecto acumulado de su


comportamiento.

2. Indique cuál de las siguientes afirmaciones es correcta:


a. Los campos se conocen como variables de objetos.
b. El alcance de una variable define la sección de código desde donde la variable
puede ser declarada.
c. Los constructores permiten que cada objeto sea preparado adecuadamente
cuando es creado.
d. El tiempo de vida de una variable describe el número de veces que es utilizada
en un método.
3. Indique cuáles de las siguientes expresiones resultan verdaderas:
1. ! (4<5) F
2. (2>2) || ((4==4) && (1<0))  F || (T && F) = F
3. (2>2) || (4==4) && (1<0)  F ||T && F = F
4. (2>2) ||! ((4==4) && (1<0))  F ||! (T && F) =T
5. (¡34! =33) &&! False  T && T = T
a. Las expresiones 3 y 4.
b. Las expresiones 2 y 4.
c. Las expresiones 3 y 5.
d. Las expresiones 4 y 5.
4. Indique cuál de las siguientes afirmaciones es correcta:
a. Un objeto es inmutable si su contenido o su estado no puede ser cambiado
una vez que se ha creado.
b. Un objeto de tipo String puede ser modificado una vez que está creado, por
tanto, no es un ejemplo de objeto inmutable.
c. La clase String tiene un método de nombre trim que permite modificar
caracteres en cualquier posición de una cadena.
d. Como regla general, las cadenas de texto de tipo String se suelen comparar
mediante el operador “==”.
5. Dado el siguiente fragmento de código, indique cuál de las siguientes
afirmaciones es el resultado de su ejecución.
public class Test {
private int i = getJ ();
private int j = 10;

private int getJ () {


return j;
}
Public static void main (String [] args) {
System.out.println (new Test ()). i);
}
}
a. Error de compilación en relación a la restricción de acceso de variables
privadas en clase Test.
b. Error de compilación en relación a las referencias realizadas.
c. Sin errores de compilación, su salida es 0

d. Sin errores de compilación, su salida es 10


6. Dado el siguiente fragmento de código, indique cuál de las siguientes
afirmaciones es el resultado de su ejecución:
public class Test {
public static void main (String [] args) {
char c = -1;
System.out.println(c);

a. La expresión “car c = -1;” provocará un error de compilación debido a que el


rango de la clase “char” es 0-2(16−1).
b. No habrá error de compilación, la salida será -1.
c. No habrá error de compilación, la salida no será ningún carácter ASCII.
d. No habrá error de compilación, la salida será un carácter Unicode.
La variable c solo acepta valores de 16-bits sin signo (intervalo de valores que
van desde 0 hasta 65535).

7. Indique cuál de las siguientes afirmaciones es correcta:


a. Una superclase es una clase que es implementada por otra.
b. Una subclase es una clase que implementa a otra clase.
c. Las clases que están vinculadas mediante una relación de herencia forman
una jerarquía de herencia.
d. La herencia nos permite heredar, pero no reutilizar en un nuevo contexto
clases que fueron escritas previamente

Una superclase es una clase que es extendida por otra clase.


Una subclase es una clase que extiende otra clase, hereda todos los campos y
métodos de su superclase.
La herencia nos permite definir una clase como extensión de otra y reutilizar en
un nuevo contexto clases escritas previamente.

8. Dado el siguiente fragmento de código, indique cuál de las siguientes


afirmaciones es el resultado de su ejecución:

package Algorítmica II;


class Hotel {
public int reservas;
public void reservar () {
reservas ++;
}
public class SuperHotel extends Hotel {
public void reservas () {
reservas --;
}
Public void reservar (int size) {
reservar ();
super.reservar();
reservas += size;
}
public static void main (String [] args) {
SuperHotel hotel = new SuperHotel ();
hotel.reservas(2);
System.out.println (hotel.reservas)
}
}
a. Error de compilación.
b. Lanza una excepción en tiempo de ejecución.
c. 0.
d. 2.

9. Cuando escribe su propio constructor, el constructor predeterminado ya no está


disponible.

a. Cierto.
b. Falso.

El constructor predeterminado está disponible.

10. Usted crea un objeto Employee con un campo String employeeName. ¿Cuál es
el valor predeterminado para employeeName?

a. Null
b. Un espacio
c. “Name”
d. “default”

No es un valor primitivo en Java.

11. En Java, la palabra clave “this” se puede usar para hacer referencia a los
campos y métodos del objeto actual.
a. Cierto
-Permite que el objeto haga referencia a sus campos y métodos cuando
estos se invoquen en la clase main o en su misma clase. Utilizado
mayormente si los parámetros de los métodos de clase son iguales a los
campos de esta.
b. Falso
12. ¿Qué enunciado es verdadero sobre el constructor predeterminado de una
clase?
a. Java proporciona automáticamente un constructor para cada clase.
- Si el programador no implementa ningún constructor, Java proporciona
uno, sin parámetros y ninguna sentencia en su interior de forma
implícita y es el que se utiliza a la hora de instancia un objeto de esa
clase.
b. Debe escribir un constructor predeterminado.
c. El constructor predeterminado siempre devuelve void.
d. El constructor predeterminado debe tener al menos un argumento.
13. ¿Cómo crearías una instancia de la clase Employee desde un método main
ubicado en otra clase?
public class Employee {
private String name;
private double salary;
public Employee (String n, double s) {
name = n;
salary = s;
}
}
a) Employee emp1 = new Employee ();
b) Employee emp1 = new Employee (50000);
c) Employee emp1 = new Employee (50000, “Noam Chomsky”);
d) Employee emp1 = new Employee (“Noam Chomsky”, 50000);
La clase empleado cuenta con dos campos private, uno para el nombre y
otro para el salario, así como un constructor que asigna valores a estos
campos cuando es creado un objeto, por lo tanto, la respuesta sería la d.
14. Una referencia de objeto con un valor null apunta a una ubicación vacía en la
memoria.
a. Cierto
b. Falso
15. Se accede a los objetos usando variables de referencia
a. Cierto
b. Falso
16. ¿Cuál es el resultado del siguiente código?
String s1 = “hola”;
String s2 = “¡Bienvenido!”;
s1 = s2;
System.out.println(“s1:” +s1);
System.out.println(“s2:” +s2);
a) s1: ¡Bienvenido!
s2: ¡Bienvenido!
Cuando se asigna una variable del tipo String a otra, ya que estos son
objetos lo que se asigna es la dirección de memoria donde se
encuentran, por la tanto al hacer la asignación se logra que ambos
refieran al mismo lugar y por lo tanto almacenen la misma cadena, lo
cual se evidencia al mostrarlos por consola.
b) s1: hola
s2: ¡Bienvenido!
c) s1: hola
s2: hola
d) s1: ¡Bienvenido!
s2: hola
17. Los desarrolladores de Java no necesitan saber la ubicación de un objeto en la
memoria.

a. Cierto
b. Falso
18. En esta porción de código, identifica el tipo de la variable s.
a. String
b. Student
c. Null
d. Class
19. ¿Qué afirmaciones son verdaderas sobre objetos de la misma clase?
a. Cada objeto tendrá la misma variable de referencia para la ubicación en la
memoria.
b. Cada instancia nueva de un objeto tendrá una ubicación diferente en la
memoria.
c. Todos los objetos de la misma clase tienen los mismos métodos.
d. Todos los objetos son iguales.
20. En las siguientes sentencias, ¿Cuantos objetos Employee son creados?
Employee e1= new Employee ();
Employee e2= new Employee ();
Employee e3 = new Employee ();

a. 0
b. 1
c. 3
d. 2
21. ¿Como puede recuperar un valor de un método?
a. Pasar una variable como argumento al método
b. Definir una variable como un miembro campo del método.
c. Use una declaración return y defina el tipo de devolución del método como
no void.
d. Defina el tipo de retorno del método como void.
22. Primero, usted decide el radio de cada círculo. Luego, usando el mismo radio
dibuja 5 círculos del mismo tamaño. Todos estos círculos tendrán propiedades
como el radio y el color. Todos los círculos comparten comportamientos para
calcular la circunferencia y el área. ¿Puedes identificar cuál de los siguientes es
un objeto?
a. Circulo
b. Circunferencia
c. cincoCirculos
d. radio
23. Los objetos se almacenan dentro del montón de la memoria.
a. Cierto
b. Falso
24. Java borra automáticamente la memoria desocupada por un objeto utilizando la
recolección de basura.
a. Cierto
b. Falso
25. Se puede acceder a las variables creadas dentro de un método fuera de ese
método.
a. Cierto
b. Falso
26. ¿Cómo podría escribir el constructor Employee para que sus parámetros tengan
el mismo nombre que los campos que están inicializando?
public class Employee {
private String name;
private double salary;
public Employee (String name, double salary) {
//Inicialice name
//Inicialice salary
}
}
a. public Employee (String name, double salary) {
name=name;
salary=salary;
}
b. public Employee (String name, double salary) {
name=this.name;
salary=this.salary;
}
c. public Employee (String name, double salary) {
this.name=name;
this.salary=salary;
}
d. public Employee (String name, double salary) {
this.name=this.name;
this.salary=this.salary;
}

27. Un constructor es un método especial que se usa comunmente para establecer


los valores iniciales de los campos de un objeto.

a. Cierto
b. Falso
28. ¿Cuál tiene un valor predeterminado de null?
a. Boolean
b. Int
c. String
d. Double
Pregunta 29

PARTE PRÁCTICA [6,5 PUNTOS]:

El juego del Cinquillo Solitario es una variedad del popular Cinquillo en


el cual un jugador puede jugar de manera online contra el ordenador. El juego
se inicia con el reparto de todas las cartas de una baraja española que consta
de 48 naipes o cartas, clasificados en cuatro palos (oros, bastos, copas y
espadas) y numerados del 1 al 12. El objetivo del juego consiste en descartarse
(quedarse sin cartas) antes que el oponente.
El jugador que posee el cinco de oros lo coloca boca arriba encima de la
mesa y de esta forma empieza el turno de descartes. En turnos alternativos,
cada jugador puede descartarse de máximo un naipe. Solo se pueden colocar
cincos o todas aquellas cartas que siguen en progresión ascendente o
descendente a las que hay en la mesa y sean del mismo palo. Es decir, si por
ejemplo solamente está colocado el cinco de oros en la mesa, los jugadores
solo podrán colocar el seis o el cuatro de oros o un cinco de otro palo.
Si un jugador no puede colocar ninguna carta pasa, y le toca el turno al
siguiente jugador. Nunca se puede pasar si se puede colocar alguna carta. El
primer jugador que consigue colocar todas sus cartas sobre la mesa es el
ganador.
En cuanto a la dinámica del juego, uno de los contrincantes será un
jugador humano (introducimos sus datos y sus preferencias por el teclado) y el
otro contrincante será el propio ordenador.
a. Diseñe las clases necesarias que permita desarrollar el juego del Cinquillo Online
utilizando un paradigma orientado a objetos. Debe hacerse uso de los
mecanismos de la programación orientada a objetos siempre que sea posible
y un diseño que permita la reutilización del código y facilite su
mantenimiento.

JUEGO

private Jugador jugador;


private List <Carta> columnaOros;
private List <Carta> columaCopas;
private List Carta> columnaBastos;
private Lit <Carta> columnaEspadas;
private int turno;

publicJuego juego ()
public void iniciarJuego()
public void asignarCartas(Jugadorj)

CARTA JUGADOR

private String palo; private List <Carta> cartas;


private int valor;
public void pasar ();
public void descartar (Carta
carta)

ORDENADOR JUGADOR HUMANO

Private String nombre;

Public void descarteAutomatico () public void introducirPreferencias()


b. Implemente un método que defina el funcionamiento del ordenador, teniendo en
cuenta que todos sus procesos tienen que hacerse automáticamente sin la
intervención del usuario.

public void descartar() {

ArrayList<ArrayList<Carta>>columnas=newArrayList<ArrayList<Carta>>();
columnas = juego.getCartas();
Carta cartaMenor = null;
Carta cartaMayor = null;
boolean descarte = false;

if (esPosibleDescarte(columnas)) {

for (ArrayList<Carta> columna : columnas) {


if (columna.size() > 0) {
String palo = columna.get(0).getPalo();
cartaMayor = columna.get(0);
cartaMayor = columna.get(columna.size());
for (Carta carta : super.getCartas()) {
if (carta.getPalo().equals(palo)) {
if (carta.getValor() + 1 == cartaMenor.getValor()) {
descartar(carta);
descarte = true;
break;
} else if (carta.getValor() --‐1==cartaMayor.getValor()

){ descartar(carta);
descarte = true;
break;
}
}
}
if (descarte) {
break;
}
}
}

if (!descarte) {
for (Carta carta : super.getCartas()) {
if (carta.getValor() == 5) {
descartar(carta);
}
}
}

} else {
super.pasar();
}
}
c. Proporcione un método que muestre la lógica del juego, definiendo la información
necesaria para establecer el uso de clases, interacciones entre elementos,
declaración y uso de variables y métodos necesarios, etc.
public void iniciarJuego() {
boolean cartasPendientes = true;
Jugador jugadorHumano = new Jugador();
Jugador jugadorOrdenador = new Jugador();

asignarCartas(jugadorHumano);
asignarCartas(jugadorOrdenador);
while (cartasPendientes) {
if (jugadorHumano.iniciarTurno()) {
System.out.println("Jugador Humano Ganador");
break;
} else if (jugadorOrdenador.iniciarTurno()) {
System.out.println("Ordenador Ganador");
break;
}
}

d. Indiqué qué modificaciones son necesarias introducir en la aplicación para permitir


la participación de varios jugadores humanos (hasta 4). Para ello el juego en lugar
de constar de partidas individuales en las cuales gana el jugador que antes se
descarta, para a ser una partida formada por un conjunto de rondas. El ordenador
deberá llevar un registro de los puntos que cada jugador ha conseguido en cada
ronda. El jugador que consigue descartarse primero logrará 3 puntos, el jugador o
jugadores que se quede con un mayor número de cartas al finalizar la ronda
obtendrá 0 puntos. El resto obtendrá 1 punto. La partida finaliza cuando un jugador
consiga llegar al menos a los 10 puntos, ganando el que más puntos tenga en caso
de superar esta puntuación varios jugadores. En caso de empate se jugará una ronda
extra para decidir el ganador.

 Para la participación de varios jugadores, tan solo es necesario tener una


instancia de cada jugador y asignar los turnos en un orden lógico. En lugar de
tener una variable con la instancia del jugador, sería necesaria una lista de
jugadores.
 Para que el juego pueda anotar el tanteo de las partidas, se debería crear una
clase “Tanteo” que almacene por cada una de las rondas de la partida, los puntos
conseguidos por cada jugador. También sería necesario que almacenara los
puntos que cada jugador ha conseguido de manera global. Además, para
implementar la asignación de puntos, habría que crear un método que al final
de cada partida analice las cartas que los jugadores no han conseguido
descartar. Este método actualizaría la información de los puntos de cada jugador
y debe dar por finalizada la partida en caso de que un jugador llegase a la
puntuación máxima. La ronda extra también sería responsabilidad de este
método y de la información almacenada en la clase Tanteo.

Das könnte Ihnen auch gefallen