Ejercicios resueltos en Java con fechas (II)
Ejercicios resueltos en Java con manejo de fechas (II)
9. Cuál será la salida del siguiente código:
5: var line = new StringBuilder("-");
6: var anotherLine = line.append("-");
7: System.out.print(line == anotherLine);
8: System.out.print(" ");
9: System.out.print(line.length());
A. false 1
B. false 2
C. true 1
D. true 2
E. It does not compile.
La respuesta correcta es: *D. true 2**.
En la línea 5, se crea un objeto `StringBuilder` llamado `línea` con el valor inicial «-«. En la línea 6, se llama al método `append` en el objeto `línea` para agregar otro «-» al final del objeto `StringBuilder`. El método `append` devuelve una referencia al mismo objeto `StringBuilder`, por lo que `otraLínea` y `línea` apuntan al mismo objeto.
En la línea 7, se imprime el resultado de comparar si `línea` y `otraLínea` son iguales utilizando el operador `==`. Dado que ambas variables apuntan al mismo objeto, el resultado es `true`.
En la línea 8, se imprime un espacio en blanco para separar los resultados.
Finalmente, en la línea 9, se imprime la longitud del objeto `StringBuilder`, que es 2 ya que contiene dos caracteres «-«.
Por lo tanto, la salida del código es «true 2».
Aquí tienes un programa Java completo con el código del ejercicio
public class StringBuilderExample {
public static void main(String[] args) {
var line = new StringBuilder("-");
var anotherLine = line.append("-");
System.out.print(line == anotherLine);
System.out.print(" ");
System.out.print(line.length());
}
}
10. Dado que el horario de verano comienza el 13 de marzo de 2022 a las 2 a.m. y los relojes saltan de 1:59 a.m. a 03:00 a.m., ¿cuál de las siguientes opciones puede completar el espacio en blanco para que el código no lance una excepción?
var localDate = LocalDate.of(2022, 3, 13);
var localTime = LocalTime.of(_________);
var zone = ZoneId.of("America/New_York");
var z = ZonedDateTime.of(localDate, localTime, zone);
A. 2, 0
B. 3, 0
C. Cualquiera de las opciones anteriores se ejecutará sin lanzar una excepción.
D. Ambas opciones causarán que se lance una excepción.
Atención: aunque la opción B. (3, 0) es correcta sería un error no darse cuenta de que la opción A también lo es. Aquí está la explicación:
Mientras que no hay 2 a.m. en el reloj esa noche, Java ajusta la hora a las 3 a.m. automáticamente y cambia la zona horaria. No lanza una excepción, por lo que la opción D es incorrecta. La opción B es una hora válida, ya que cualquier valor después del ajuste de tiempo es solo una hora normal en el reloj. Dado que tanto las opciones A como B son horas válidas, la opción C es la respuesta correcta.
11. Cuál de las siguientes afirmaciones es verdadera sobre este bloque de texto?
var block = """
green
yellow
""";
A. Solo hay espacio en blanco esencial. B. Solo hay espacio en blanco incidental. C. Hay tanto espacio en blanco esencial como incidental. D. El código no se compila.
La opción correcta es A. Solo hay espacio en blanco esencial. Un bloque de texto en Java elimina automáticamente cualquier espacio en blanco al principio y al final de cada línea que no sea esencial para el formato del texto. En este caso, el bloque de texto solo contiene dos líneas con las palabras «green» y «yellow», y no hay ningún espacio en blanco adicional al principio o al final de cada línea que no sea esencial para el formato del texto.
Aquí tienes un ejemplo completo en Java:
public class TextBlockExample {
public static void main(String[] args) {
var block = «»»
green
yellow
«»»;
System.out.println(block);
}
}
Este programa crea una variable llamada block y le asigna el valor del bloque de texto que proporcionaste. Luego, el programa imprime el contenido del bloque de texto, que sería:
green
yellow
Dado que las comillas triples de cierre («»») están al principio de la línea, no hay espacio en blanco incidental. Por el contrario, hay espacio en blanco esencial antes de green y yellow, lo que hace que la opción A sea correcta.
NOTA SOBRE VERSIONES: Los bloques de texto son una característica que se introdujo en Java 15. Si estás utilizando una versión anterior de Java, es posible que el código que proporcionado no se compile y muestre errores. Para utilizar bloques de texto, debes asegurarte de estar utilizando Java 15 o una versión posterior.
Si estás utilizando una versión anterior de Java y no puedes actualizar a una versión más reciente, puedes lograr un resultado similar utilizando cadenas normales y el método System.lineSeparator() para agregar saltos de línea. Aquí tienes un ejemplo de cómo podrías hacerlo:
public class TextBlockExample {
public static void main(String[] args) {
var block = "green" + System.lineSeparator() + "yellow";
System.out.println(block);
}
}
¿Qué es incidental en Java?
La palabra correcta en este contexto es “incidental”. El espacio en blanco “incidental” se refiere al espacio en blanco que no es esencial para el formato del texto y que se elimina automáticamente cuando se utiliza un bloque de texto en Java. Por otro lado, el espacio en blanco “esencial” se refiere al espacio en blanco que es necesario para el formato del texto y que se conserva cuando se utiliza un bloque de texto en Java.
“Indental” no es una palabra en inglés. Si estabas tratando de referirte a la indentación del código, entonces la palabra correcta sería “indentation”. La indentación se refiere a la práctica de agregar espacios o tabulaciones al principio de las líneas de código para mejorar su legibilidad y estructura visual.
12. ¿Cuáles son los tipos de retorno de `cat`, `moose` y `penguin`, respectivamente?
var cat = Math.ceil(65);
var moose = Math.max(7,8);
var penguin = Math.pow(2, 3);
A. double, double, double
B. double, int, double
C. double, int, int
D. int, double, double
E. int, int, double
F. int, int, int
La opción correcta es B. double, int, double**. El método `Math.ceil()` devuelve un valor `double` que representa el entero más pequeño que es mayor o igual al argumento pasado al método. En este caso, el argumento es `65`, por lo que el método devuelve `65.0`, que es un valor `double`. Por lo tanto, el tipo de retorno de `cat` es `double`.
El método `Math.max()` devuelve el mayor de los dos argumentos pasados al método. En este caso, los argumentos son `7` y `8`, por lo que el método devuelve `8`, que es un valor `int`. Por lo tanto, el tipo de retorno de `moose` es `int`.
El método `Math.pow()` devuelve el valor del primer argumento elevado a la potencia del segundo argumento. En este caso, los argumentos son `2` y `3`, por lo que el método devuelve `8.0`, que es un valor `double`. Por lo tanto, el tipo de retorno de `penguin` es `double`.
Aquí tienes un ejemplo completo en Java que utiliza el código:
public class MathExample {
public static void main(String[] args) {
var cat = Math.ceil(65);
var moose = Math.max(7,8);
var penguin = Math.pow(2, 3);
System.out.println("cat: " + cat + ", moose: " + moose + ", penguin: " + penguin);
}
}
Este programa crea tres variables llamadas `cat`, `moose` y `penguin` y les asigna los valores devueltos por los métodos `Math.ceil()`, `Math.max()` y `Math.pow()`, respectivamente. Luego, el programa imprime los valores de las tres variables, que serían:
«`
cat: 65.0, moose: 8, penguin: 8.0
«`
Este código es complicado porque solo se pasan valores `int`. Sin embargo, los parámetros pasados a `ceil()` y `pow()` se convierten implícitamente a `double` ya que esos dos métodos toman parámetros `double` y devuelven un resultado `double`. El método `max()` devuelve un `int`, lo que nos da la opción B.
13. ¿Cuál es el resultado de ejecutar el código dado.?
11: var waffleDay = LocalDate.of(2022, Month.MARCH, 25);
12: var period = Period.of(1, 6, 3);
13: var later = waffleDay.plus(period);
14: later.plusDays(1);
15: var thisOne = LocalDate.of(2023, Month.SEPTEMBER, 28);
16: var thatOne = LocalDate.of(2023, Month.SEPTEMBER, 29);
17: System.out.println(later.isBefore(thisOne) + " "
18: + later.isBefore(thatOne));
A. false false
B. false true
C. true true
D. true false
E. The code does not compile
MAL
El código crea una fecha para el Día del Waffle (25 de marzo de 2022) y luego agrega un período de tiempo a esa fecha (1 año, 6 meses y 3 días). Luego, se crea una nueva fecha llamada “later” que es la fecha del Día del Waffle más el período de tiempo. Después, se comparan dos fechas diferentes con la fecha “later” para ver si “later” es anterior a esas fechas. El resultado impreso es “true false”, lo que significa que la respuesta correcta es la opción D.
BIEN
La línea 12 crea un Periodo que representa un año, seis meses y tres días. Al agregar esto a waffleDay, obtenemos el año 2023, el mes de septiembre y un día 28. Esta nueva fecha se almacena en later en la línea 13 y representa el 28 de septiembre de 2023. La línea 14 no tiene efecto, ya que el valor de retorno se ignora. La línea 17 comprueba que se sabe que isBefore() devuelve false si el valor es una coincidencia exacta. Dado que thisOne es una coincidencia exacta pero thatOne es un día completo antes, la salida es false true, haciendo que la opción B sea correcta.
14. ¿Cuáles operadores funcionan con uno o más tipos booleanos?
(Elige tres)
A. ^
B. ~
C. &
D. +
E. ||
F. @
Y para responder a la pregunta en lenguaje Java, los operadores que funcionan con uno o más tipos booleanos son los siguientes: A. ^ (XOR) C. & (AND) E. || (OR)
Los operadores B (~) y D (+) no funcionan con tipos booleanos. Además, el operador F (@) no es un operador válido en Java.
15. Cuál es un posible resultado de ejecutar el código dado.
var montyPythonDay = LocalDate.of(2023, Month.MAY, 10);
var aprilFools = LocalDate.of(2023, Month.APRIL, 1);
var duration = Duration.ofDays(1);
var result = montyPythonDay.minus(duration);
System.out.println(result + " " + aprilFools.isBefore(result));
A. 2023- 05- 09 false
B. 2023- 05- 09 true
C. The code does not compile.
D. None of the above.
Un posible resultado de ejecutar el código dado es una excepción UnsupportedTemporalTypeException. Esto se debe a que el método minus() en LocalDate no puede aceptar un objeto Duration como argumento. La clase Duration se usa para representar una cantidad de tiempo en términos de segundos y nanosegundos y se supone que se usa con objetos que contienen tiempos. Aunque tiene un método ofDays(), este es un método de conveniencia para representar una gran cantidad de segundos.
La respuesta correcta es D. Se supone que la duración se usa con objetos que contienen tiempos. Aunque tiene un método ofDays(), este es un método de conveniencia para representar una gran cantidad de segundos. Esto significa que llamar a Duration.ofDays(1) está bien. Sin embargo, este código arroja una excepción UnsupportedTemporalTypeException cuando intentas pasarlo al método minus() en LocalDate, lo que hace que la opción D sea correcta. Tenga en cuenta que la pregunta pregunta sobre un posible resultado en lugar del resultado definitivo porque el formato de las fechas varía según la región.”