Test de Java 21 para estudiantes de programación (Programación orientada a objetos y Arrays unidimensionales y matrices) {CV.A + JM}
1
Si un array está declarado como Carta[] c = new Carta[40], explica qué ocurre si intentamos ejecutar la asignación c[39] = new Carta("rey", "bastos"); Supón que tenemos el siguiente objeto de tipo Carta (ver imagen)
2
Di qué error de compilación producirá la siguiente sentencia
3
El array bidimensional int[][] a = new int[2][5];
4
En Java, ¿cómo se accede al tercer elemento de un array ESTÁTICO llamado numeros?
5
El siguiente código intenta inicializar a 0 todas las posiciones de un array a de enteros de tamaño A x B. ¿Hay algún error?
6
¿Qué sale por la pantalla al ejecutar este programa?
7
¿Qué sale por la pantalla al ejecutar este programa?
8
¿Qué sale por la pantalla al ejecutar este código?
9
Dada la siguiente clase, ¿qué imprimirá la consola, si desde el método main ejecutamos el siguiente código?
10
Dada la siguiente clase, ¿cuáles de estos códigos se ejecutará correctamente, sin producir un error de compilación?
11
Dada la siguiente clase, ¿cuál sería la salida por pantalla correcta?
💡 Nota: El método imprimirAtributos() está correctamente implementado y solo es necesario conocer su documentación para resolver esta pregunta
12
Dada la siguiente clase, ¿qué versión del método imprimirAtributos() de la clase MiClase, debemos implementar para obtener la siguiente salida en consola?
13
Dada la siguiente clase, ¿qué le falta a la clase MiClase para obtener la siguiente salida por consola?
14
Dada la clase MiClase, ¿qué versión del método setMiTexto() obtiene la siguiente salida por consola?
15
Dada la clase Persona, ¿cuál es la forma más corta en el main de crear un objeto persona con todos sus atributos rellenados e imprimirlo por consola?
Explicación
✏️ Explicación:
Ya que los arrays comienzan siempre su primera posición por 0, si su tamaño es 40, la última posición será 39
✏️ Explicación:
Se produce un error de compilación, ya que el méto-do Integer.parseInt() recibe un
String y devuelve un int. Este resultado int lo estamos intentando guardar en una
variable de tipo String en vez de en una, de tipo int.
Error exacto 🔴: "java: incompatible types: int cannot be converted to java.lang.String"
💡 Nota: Si lo ejecutamos desde el IntelliJ o cualquier IDE dará un error NullPointerException,
al ser una consola simulada.
Para probarlo bien, desde el cmd, ejecuta para compilar:
-> javac Pregunta2.java
y para ejecutar:
-> java Pregunta2.java
✏️ Explicación:
En una matriz siempre su tamaño es [filas][columnas].
Podemos realizar comprobaciones con el siguiente código:
int[][] a = new int[2][5];
System.out.println("a = " + Arrays.deepToString(a));
System.out.println("La matriz tiene [" + a.length + "] filas");
System.out.println("La matriz tiene [" + a[0].length + "] columnas");
System.out.println("El número total de elementos es [" + (a.length * a[0].length) + "]");
✏️ Explicación:
Debido a que la primera posición de un array es 0, la 3º, sería una menos (2)
numeros[0] = 1
numeros[1] = 2
numeros[2] = 3
numeros[3] = 4
numeros[4] = 5
numeros[2] = 3
✏️ Explicación:
El código es correcto, la única diferencia es que se rellenarán primero,
las columnas, en vez de las filas, pero la matriz quedará al completo
inicializada.
💡 Nota: Para entender mejor esto último, haz debug 🪲, en esta línea
"a[f][c] = 1;" para ver como se rellena la matriz.
Podemos poner un número distinto de cero, como por ejemplo, 1, para comprobar
si se está inicializando realmente bien, ya que al usar el primitivo int, java,
inicializará la matriz a 0, por lo que es más difícil comprobar si la estamos
inicializando bien.
✏️ Explicación:
Se imprime el mismo texto que el original, esto ocurre debido al tipo
de méto-do de replaceAll(). Este es, de tipo String, no es void, por tanto,
lo que hace es producir un tipo de dato de tipo String, el cual, sino se
guarda en una variable o se imprime por consola, el resultado de este, se
pierde, que es lo ocurre en este código.
✏️ Explicación:
Se produce un error de compilación, ya que el objeto StringBuilder,
no se puede inicializar directamente con = "".
Podría corregirse con "new StringBuilder("Que la fuerza te acompañe");"
✏️ Explicación:
En este caso, aunque el méto-do reverse() es de tipo StringBuilder y no void,
este sí que afecta al objeto que lo llamó a diferencia del String, esto ocurre
porque el objeto StringBuilder es mutable, lo cual, significa que se puede modificar
el objeto ya creado. Mientras que String es inmutable, esto quiere decir, que los
objetos String no se pueden modificar una vez creados, hay que crear otros nuevos
o hacer una reasignación (s = s.replaceAll(" ", "");) para que afecte el resultado
✏️ Explicación:
Si no creamos un constructor por defecto, Java lo creará, por tanto, la primera
línea funciona.
La segunda línea imprime el valor 0.0, ya que el método getMiAtributo2() obtiene
el valor de una variable primitiva (no puede ser null) de tipo float, esta se
corresponde con el atributo "miAtributo2" de la clase "MiClase". Al no haber
inicializado el valor del atributo "private float miAtributo2;", Java lo inicializa
con el valor por defecto, para este tipo de dato, que es 0.0
✏️ Explicación:
Tanto el código 1 y 2 acceden correctamente al atributo estático con la sintáxis
NombreClase.metodoEstatico(). Respecto al acceso a los atributos no estáticos, ambas
sintaxis son correctas. "nombreDeVariableDeUnaInstanciaDeLaClase.metodoNoEstatico()" permite
utilizar el mismo objeto más tarde, mientras que "instanciaDeLaClase.metodoNoEstatico()" solo
se puede utilizar una vez.
El código 3 produce un error de compilación al intentar acceder a un atributo no estático a través
de la clase. Respecto a esta otra línea "miObjeto2.getMiAtributo1()", aunque no es buena práctica,
si compila y funciona.
- El código 1, en este caso, se ha guardado el objeto en la variable "miObjeto1" para utilizarlo
más de una vez, si fuera necesario.
- El código 2, en este caso, se ha creado una instancia de la clase y se ha utilizado al
mismo tiempo, no se ha guardado en una variable, por lo que no se podrá utilizar más adelante.
- El código 3, en este caso, se ha guardado el objeto en la variable "miObjeto2" para
utilizarlo más de una vez, si fuera necesario.
✏️ Explicación:
La opción correcta es la salida 3, debido a que "miAtributo1" es
estático, por lo que solo podremos guardar el último valor del set.
Mientras que, del atributo "miAtributo2", no es estático, por lo que
podremos tener tantos valores como objetos creemos.
✏️ Explicación:
En el bucle con "arrayObjetos[i]" accedemos a cada objeto de tipo
MiClase del array y con ".getMiAtributo2()" accedemos a los valores
de "miAtributo2" de cada objeto enviado desde el main
💡 La opción del método, toString(), no es válida, ya que no está implementado
en nuestra clase MiClase, por lo que Java usará el de la clase Object, que
no tiene el mismo formato que aparece en la salida de consola
✏️ Explicación:
- El constructor por defecto + arrayObjetos[i].toString() en el método
imprimirAtributos() (Comprobar el código de la imagen)
💡 No es correcto, ya que no se sobrescribe el método toString() (se llama
al de la clase Object)
- El constructor por defecto + sobrescribir el método toString() utilizando super
(Comprobar el código de la imagen)
💡 No es correcto, ya que, aunque se sobrescribe el método toString() se utiliza
la palabra reservada super.toString(), provocando que se vuelva a llamar
al método toString() de la clase Object
- El método setMiTexto() + sobrescribir el método toString()
(Comprobar el código de la imagen)
💡 El método setMiTexto() no se utiliza desde el main, por tanto, el atributo
"miTexto" se queda en null
✏️ Explicación:
- Versión 1
💡 Al coincidir el nombre del parámetro del método set con el nombre del
atributo, se asigna así mismo y la asignación no surte efecto. "miTexto" se
queda en null
- Versión 2
💡 Al no coincidir el nombre del parámetro del método set con el nombre del
atributo, se asigna el valor del parámetro al atributo funcionando así la
asignación correctamente (this, sería opcional).
- Versión 3
💡 Aunque coinciden el nombre del parámetro del método set con el nombre del
atributo, se asigna el valor del parámetro al atributo funcionando así la
asignación correctamente (ya que se utiliza this para hacer referencia al atributo).
✏️ Explicación:
La forma más rápida es usar el constructor con todos los argumentos, sin
crear variable, ya que, solo queremos imprimir el objeto, no necesitamos
utilizarlo más adelante.
|