INICIACIÓN JAVA 1

Lakukan tugas rumah & ujian kamu dengan baik sekarang menggunakan Quizwiz!

Qué diferencia hay entre method y function? Procedure, subroutines, subprogram...

"A method is similar to a function, but is part of a class. The term method is used almost exclusively in object-oriented programming. A function is something that takes a bunch of inputs and returns one or more values." https://softwareengineering.stackexchange.com/questions/20909/method-vs-function-vs-procedure

- How is the 'and' Boolean operator represented in Java? - When does it return a value of true?

&& When the expressions on both sides of && are true.

What are the math operators used to add, subtract, multiply and divide in Java?

+, -, *, /

- How is the 'not' Boolean operator represented in Java? - What values does it return?

- ! - True if what comes after it is false and the other way around.

¿Qué método tiene la clase String para conocer la letra que hay en una posición concreta de la cadena de caracteres? ¿Qué tipo de dato devuelve? ¿Es un método static? ¿Y si en vez del dato char nos interesara saber el valor Unicode de la letra en un índice?

- .charAt(indexnumber); - OJO!!! Devuelve 'char' - No es static, por lo que se usa sobre una instancia de la clase String. - Usaríamos en ese caso .codePointAt(int index);

¿Dónde debemos crear nuestras variables de instancia o 'campos de clase'?

Dentro de una clase, da igual si antes o después del método constructor.

¿Cuáles son las ventajas de la programación orientada a objetos?

El código es más: - Reutilizable - Se producen menos errores y más fáciles de localizar cuando ocurren gracias a la modularización (el programa se divide en módulos/trozos/partes que son las clases) - estos errores al estar localizados no afectarán a todo el programa - y a la encapsulación o encapsulamiento. - Es más comprensible Además la POO se caracteriza por la herencia y polimorfismo.

What's the purpose of whitespace (space, tab, enter, return...) in Java?

To make code visually presentable to other coders. Java will ignore it.

¿Qué método tiene la clase String para concatenar una String detrás de otra?

- .concat(String s) String s1="Germán "; String s2="Asencio"; String s3=s1.concat(s2); System.out.println(s3);//Germán Asencio

Imagina un output que fuera una frase con mucha concatenación. Ej: System.out.println("Mi nombre es " + nombre + " y tengo " + edad + " años. Mi padre se llama " + nombrepadre + " y tiene " + edadpadre + " años."); ¿Cómo podemos formatear una String de manera que no tengamos que concatenar palabras y variables?

Para formatear Strings usamos los métodos .printf o .format, que hacen lo mismo - incluso reciben mismos parámetros. Pertenecen a la clase PrintStream. Hay muchos, tan solo escribiendo 'format specifiers java' en Google se ven todos - por ejemplo, decenas para formatear fechas. No obstante, los más usados son: %s (o %S si quisiéramos mayúsculas) - STRING %d - Para números sin decimal (byte, short, int, long, big integer) %02d --> el 0 significaría " left padding it with zeroes" y el 2 que son dos dígitos Ej: System.out.printf("Agent %03d to the rescue!", 7); // Agent 007 to the rescue! %f - Para números decimales Por defecto %f dará un valor con 6 decimales. Podemos determinar este número añadiendo un punto después de % con el número de decimales que queremos (ej: %.10f ; %.3f ; etc.). Y, ojo, también podemos poner una coma antes del punto para que así marque los "miles": %,.4f --> daría 1,234,567.8901 Para reflejar importes de dinero queda muy elegante con la coma y con solo dos decimales: %,.2f --> daría 1,234,567.89 %n - Cuando formateemos Strings se usará este símbolo en vez de \n --> pero ojo, este es el único escape sequence que servirá si se cambia. En cambio \t para tabular, \\, \" para comillas, etc darán un error si lo intentamos con %. %% - Si queremos usar el símbolo de porcentaje Por cierto, en una String se pueden repetir las veces que queramos el símbolo de porcentaje para un mismo tipo de valor. La cuestión pasa porque aumentarán los parámetros a pasar y ya está. Ejemplo: System.out.printf("Tu novio %s mide %.2f y tu hermano %s %.2f", "Sergio", 1.75, "Julio", 1.60); También se puede aplicar un formateo específico al valor String que vayamos a incorporar en nuestro String. Punto 6 de https://www.novixys.com/blog/java-string-format-examples/

¿Qué significa que los métodos de una clase en Java sean static o non-static?

Static son los que necesitan el nombre de la clase delante de ellos para poder ser usados: JOptionPane.showInputDialog("Di tu nombre"); Non-static son los que necesitan un objeto de la clase a la que pertenezcan delante para poder ser usados: Scanner nuevoobjetoscanner = new Scanner(System.in); turespuesta = nuevoobjetoscanner.nextLine("Di tu nombre");

¿Cómo podríamos obtener el último caracter de una cadena larga?

String cadenalarga = "......."; int ultimaletra = cadenalarga.length(); System.out.println("La última letra es " + cadenalarga.charAt(ultimaletra - 1));

- What's the meaning of the following relational operators? (<, <=, >, >=) - A relational operator is placed between two _________

- less than - less than or equal to - greater than - greater than or equal to - operands

Di una situación en la que el uso del método .comparteTo de la clase String resulta muy útil.

Es imprescindible reescribir este método cuando implementamos en alguna clase la interface Comparable para ordenar alguna array o List.

¿Por dónde se empezará a ejecutar un programa Java?

Por aquella clase que contenga el método main: public static void main (String [] args) { }

¿Cuál es el dato entero y decimal que se usa como referencia o comodín cuando no sabemos qué dato es el más preciso que necesitaremos?

Para los enteros, int. Para los decimales, double.

¿Qué método tiene la clase Arrays para ordenar una Array? (en el caso de números de menor a mayor, y en el caso de Strings de a hacia z) ¿Es un método static? ¿Hace falta importar el paquete que contiene Arrays? ¿Qué variaciones dispone este método?

- .sort(nombre); - Sí, siempre deberemos usar Arrays.sort(); - Sí, ya que es el paquete java.util - En el caso simple, simplemente pasaremos como parámetro de .sort el nombre de la array que queremos ordenar. También puede recibir dos parámetros más para indicar desde qué índice empieza y acaba de ordenar (en caso de que no queramos ordenar toda la array).

¿Con qué método llenaremos toda una array o parte de una array ya existente con un único valor que queramos?

- Con Arrays.fill Si queremos pasar un mismo valor para toda la array... Arrays.fill(nombrearray, valoraasignar); Ejemplo: int ar[] = {2, 2, 1, 8, 3, 2, 2, 4, 2}; Arrays.fill(ar, 10); --> la array ar se quedaría con todos los valores = 10. Si queremos pasar un mismo valor a solo parte de la array... Arrays.fill(nombrearray, fromIndex, toIndex, valoraasignar);

Cuando coincida el nombre de una variable de clase con el nombre de un parámetro en un método setter/writter ¿cómo los distinguiremos? Pon un ejemplo.

- Con el operador this public class Coche { String color; public Coche { color="verde"; } public String estableceColor (String color) { this.color=color; } this.color hace referencia a la variable de clase y le dice que es igual al parámetro del método setter color

¿Cómo debemos definir a una Array bidimensional? ¿Cuál es su sintaxis? Crea una array bidimensional a la que posteriormente hay que añadirle los valores. Luego crea una array bidimensional con inicialización estática, es decir, aquella que se crea con los valores ya asignados.

- Debemos entenderla como una Array cuyos datos que contiene son arrays unidimensionales. - Sintaxis: tipoDato [ ][ ] nombreArray = new tipoDato [tamaño][tamaño]; **La primera parte también podría declararse así: tipoDato nombreArray [ ][ ] ... o bien... tipoDato [ ] nombreArray [ ] - Creación y posterior inicialización: int [ ][ ] mimatriz = new int [4][5]; mimatriz[0][0]= 45; mimatriz[0][1]= 523; ... - Creación e inicialización a la vez: int [ ][ ] mimatriz = { {45, 523, 4, 15, 3}, {1, 435, 478, 415, 53}, {9, 76, 5, 15, 43}, {4, 1003, 48, 150, 632}, {0, 43, 234, 215, 33} }; **Importante fijarse en que el último 'nested brace' no necesita de una coma al final

¿Qué diferencia hay entre un bucle while y otro do-while? ¿Cuál es la sintaxis del bucle do-while?

- Debemos usar el bucle do-while en vez del while cuando queramos que el código que haya dentro del bucle se repita al menos una vez antes de que se compruebe la condición. - La sintaxis es: do { código } while (condición);

Para que en nuestro programa no se produza violación de datos deberemos usar la llamada ___________________ que consistirá en añadir el modificador de acceso _______________ a nuestras variables ______________ de modo que sólo podrán ser accesibles o modificables desde ___________________ con los métodos _______________ y _______________.

- Encapsulación - private - de instancia / campos de clase - la misma clase - getters/readers y setters/writters

¿Qué es una Array? ¿Qué otros nombres recibe? ¿Cuál es su sintaxis? ¿Debemos inicializar sus valores en el momento de la creación?

- Es una estructura de datos que contiene una colección de valores del mismo tipo que tienen alguna relación entre sí. - También se conoce como matriz o, en Sudamérica, 'arreglo'. - Sintaxis: tipoDato [ ] nombreArray = new tipoDato [tamaño]; También puede ir el paréntesis detrás: tipoDato nombreArray [ ] = new tipoDato [tamaño]; Ejemplo con int y otro con una clase: int [ ] misNumeros = new int [5]; Empleados [ ] misEmpleados = new Empleados [10]; (suponiendo que exista una clase en el programa llamada Empleados) - No es necesario. Podría hacerse así: int[ ] misNumeros; misNumeros = new int [5];

¿Qué posición dentro de un array o de una cadena de caracteres ocupará el primer valor? ¿Y el último, cómo podremos acceder a él?

- La posición 0 - Sería así: nombredelaArray.length - 1 nombredelaString.length - 1

Puede que queramos usar la palabra clave this en nuestro código desde dentro de un método para referirnos al Context de nuestra Activity en Android y nos dé un error diciéndonos que no es posible. ¿Por qué puede deberse?¿Cómo lo solucionamos?

- Porque si lo hacemos dentro de un método y ese método lleva parámetros puede interpretar que nos queremos referir al Context del parámetro y esto no es posible. - Para solucionarlo escribiremos el nombre de la activity y luego el this. Ejemplo: MainActivity.this

¿Qué es un método constructor? ¿Qué modificador de acceso debe tener? ¿Qué nombre tendrá el constructor? ¿Debe de tener parámetros el método constructor? ¿Puede que una clase no tenga método constructor? ¿Puede que una clase tenga varios métodos constructores?

- Un método constructor establece el patrón que seguirán todos los objetos de la clase de ese método constructor. - public - Debe tener el mismo nombre que la clase que lo aloja. - No es necesario que tenga parámetros. - Puede que una clase no tenga creado dentro de sí ningún método constructor, lo que significará que por defecto tendrá un método constructor sin parámetros ni ningún código dentro. En este caso se estará usando el llamado 'constructor por defecto'. - Sí, una clase puede tener varios métodos constructores siempre y cuando estos dispongan de diferente número de parámetros para que a la hora de instanciar un objeto Java sepa que constructor debe usar en base a los argumentos que se le pasen.

¿Cómo imprimiríamos en pantalla un valor de la array siguiente? int [ ] misNumeros = {3, 53, 67, 84, 7}; ¿Y cómo los imprimiríamos todos?

- Uno así: System.out.println(misNumeros[0]); que imprimiría el valor del 0, es decir, 3 - Todos mediante un bucle for each: for (int e: misNumeros) { System.out.println(e); } Si fuera con un bucle for sencillo: for (e=0; e<misNumeros.length; e++) { System.out.println(e); }

¿Cómo podemos imprimir en pantalla todos los valores de una array bidimensional?

- Usando el bucle for: for (int x = 0; x < 2; x++) { for (int y = 0; y < 5; y++ ) { System.out.println(numberArray[x][y]); } } - Usando el bucle for each: for (int[] x : number) { for (int y : x) { System.out.println(y); } } --> El bucle for each puede costar entenderlo un poco más. Quizá se entiende mejor si en vez de la variable x se le nombrara a esta primeraarrayunidimensional o 'innerarray' porque realmente lo que está haciendo es coger toda la primera matriz y entonces decirle "ahora con la variable 'y' recorre toda la primera matriz de la matriz bidimensional" --> Hay que fijarse en que el tipo de dato que indicamos en el bucle for each es int[ ] , es decir, con un único corchete ya que pasamos una única array al bucle. Si en vez de un bucle bidimensional tuviera más dimensiones entonces habría que ir añadiendo corchetes. Fíjate en el ejemplo de array 3d de aquí: https://www.programiz.com/java-programming/multidimensional-array

En un archivo en el que haya varias clases, siempre habrá uno que será el principal y dará nombre al archivo.java y que deberá incorporar la palabra clave ___________ delante de 'class'. Será este mismo archivo el que contenga al método ____________.

- public Si hubiera otras clases que debieran ser public se deberían usar en otros archivos distintos para respetar la modularización de ficheros. - main

¿Con qué método compararemos arrays?

Con el método Arrays.equals Pasará 2 parámetros diferentes dependiendo del tipo de dato que se compare.

¿De qué tres formas se puede copiar una Array dependiendo de lo que queramos hacer?

Con: Arrays.copyOf([ ] original, int newLength); Arrays.copyOfRange([ ] original, int from, int to); System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

¿Qué ventaja tiene el bucle for simple respecto del bucle for each?

Nos permite ser más específicos respecto a la posición inicial (int =0 o int=otro número) y nos permite ser más concreto respecto al aumento o decremento de la variable a cada vuelta de bucle (i++ o i+=2, o i+=otra cantidad)

¿Qué es una jagged o ragged array?

Es una array multidimensional cuyas arrays internas disponen de diferentes tamaños, no son todas igual en longitud.

¿Qué significa mutable y immutable en Java?

Este es un tema avanzado, para ver más adelante pero por ahora conviene saber que por mutable nos referimos a que puede cambiar la 'memory adress' e immutable no. Por ejemplo, la clase String en Java es immutable. Si tienes un String: String nombre = "Germán"; y luego lo quieres cambiar: nombre="Juan"; Realmente lo que se acaba de hacer no es modificar el String object existente sino crear un segundo String object. Esto es peligroso porque si estamos realizando una operación que quiere cambiar el valor repetidamente - por ejemplo, un append al final del string - estaremos creando miles de String objects. Para evitarlo se usará un objeto de la clase StringBuffer que sí que es mutable. https://www.youtube.com/watch?v=5qQQ3yzbKp8 Una clase que creemos que tenga métodos getters será mutable por lo que tenemos que tener mucho cuidado: https://www.youtube.com/watch?v=6-xeVrzLF4U https://www.youtube.com/watch?v=-2_P4zJTiog El método .intern de la clase String prueba la inmutabilidad de esta.

Si usamos la encapsulación poniendo la palabra 'private' a las variables, ¿de qué modo podremos acceder a sus valores o modificarlos?

Mediante el uso de los llamados 'métodos de acceso' getter o reader y setter o writter. Es una práctica recomendada que estos métodos vayan por separados, es decir, que no estén juntos en el mismo método la función getter y setter.

¿Podríamos crear una array formada por valores de distintos tipos de dato?

No, las arrays siempre deben ser del mismo tipo de dato. Lo que se plantearía en este caso sería crear una clase cuyos objetos tengan unas propiedades de distintos tipos de datos y que posteriormente se creara una array de los objetos.

¿Cómo podemos simplificar nuestro código si queremos crear dos métodos que hacen básicamente lo mismo excepto algún matiz? Comenta las diferencias que existen en casos de que esos dos métodos sean constructores o no.

Podemos hacer que uno de los dos llame al otro tras haber añadido esa ligera modificación. En el caso de los métodos constructores podemos invocar al otro método con el uso de 'this' si es de la misma clase o 'super' si de su superclase. Si son métodos no constructores podemos usar 'return' para llamar a otros métodos. Ejemplo: public static String greeting (String first, String last) { String greeting = "Hello " + first + " " + last + "."; } public static String greeting (String first) { return greeting(first, " "); } public static String greeting() { return greeting("Person", " ") }

¿Por qué es esta una manera incorrecta de copiar una Array? int [] numbers = {1, 2, 3, 4, 5, 6}; int [] positiveNumbers = numbers;

Porque si posteriormente cambiamos el valor de la array numbers también se cambiará el de la array positiveNumbers, tal y como se demuestra aquí al principio: https://www.programiz.com/java-programming/copy-arrays Es lo que se llama hacer una 'shallow copy' o 'reference copy', en contraposición con 'deep copy'. En una shallow copy se crea otro objeto que copia la reference variable/memory reference de manera que las propiedades del objeto nuevo siempre serán las mismas que las propiedades a las que apunta la memory reference del primer objeto. En otras palabras, si las propiedades del primer objeto cambian las del segundo también. Para hacer una 'object copy' o 'deep copy' podemos usar un copy constructor o el método .clone(); Ejemplo: int[] array = {23, 43, 55, 12}; int[] copiedArray = array.clone(); System.out.println(Arrays.toString(array)); System.out.println(Arrays.toString(copiedArray)); array[0]=234234234; System.out.println(Arrays.toString(array)); Output: [23, 43, 55, 12] [23, 43, 55, 12] [234234234, 43, 55, 12] [23, 43, 55, 12]

¿Qué peculiaridad tiene el método Arrays.sort cuando se le pasa por parámetro una array de Object?

Que deberá implementar la interface Comparable y por tanto deberá desarrollar en la clase del objeto el método abstracto .compareTo que esta interface tiene. Un ejemplo de cómo se implementa este método lo encontramos en este tutorial de Píldoras Informáticas (a partir de 13:50): https://www.youtube.com/watch?v=8xF_BSpSATw&list=PLU8oAlHdN5BktAXdEVCLUYzvDyqRQJ2lk&index=49

¿Qué pasa si escribimos algo después de la palabra return del método getter/reader/captador?

Que tendremos un error del tipo 'unreachable statement' ya que no se leerá, Java sólo leerá hasta return y luego saldrá del método.

¿Qué diferencias hay entre .copyOf, .copyOfRange y .arraycopy? Para ver como se copia una Array bidimensional acudir a final de esta página: https://www.programiz.com/java-programming/copy-arrays

Tanto .copyOf como .copyOfRange crean una nueva array que no existía anteriormente. En el primer caso se pasan por parámetros la array original de la que copiaremos datos y la longitud deseada en int. En el segundo caso, aparte de la array original especificaremos el número de índice de partida y el número de índice que ya no toma. A diferencia de .arraycopy estas pertenecen a la clase Arrays. Por otro lado, System.arraycopy es más potente puesto que se copia la totalidad o parte de una array en el número de índice que nos interese de otra array ya existente, así pues, substituyendo sus valores.

What is 'the signature' of a method? Why is it important when it comes to method overloading?

The sum of the name of the method and the parameters passed. public static String greeting (String greeting) {...} --> En este caso sería 'greeting (String greeting)' - Because we can't have two methods with the same exact signature. We could overload methods with same name, but not same name and same parameters. Things not allowed: greeting (String niceGreeting); greeting (String meanGreeting); public String greeting (); public int greeting (); public String greeting (int num1); public int greeting (int num2); --> En ninguno de los tres casos anteriores Java sabrá a qué método llamar porque coinciden nombre y parámetros, es decir, firma.

Si queremos usar un bucle for en una Array pero la Array es muy larga y nos da pereza contar la cantidad de valores que tiene para poder establecer la condición del bucle for, ¿cuál es la solución más sencilla para no tener que contar los valores?

Usar el método .length sobre el nombre de la Array. Suponiendo que la Array se llamara numeros: for (i=0; i<numeros.length; i++) { código }

Is Java case sensitive?

Yes

¿Cuál es la sintaxis del bucle for each, también conocido como bucle for mejorado ('enhanced for statement')? ¿Para qué se creó? ¿Qué ventaja tiene respecto del bucle for simple?

for (tipoDato nombreVariable: nombreArray) { código } * tipoDato: String, int, char, una clase en concreto... * nombreVariable: da absolutamente igual cuál es (e, i...) * importante no olvidar los dos puntos después de nombreVariable * fijémonos que en ningún caso se escribe la palabra each a pesar de que este bucle se llame for each - Se creó para usarlo en Arrays. - Su comodidad es que no hace falta declarar la posición de partida como con el bucle for (i=0) ni a qué posición llega (i<10, i < variable.length...)

¿Cómo iniciaríamos valores de una Array una vez esta estuviera ya creada? ¿Y, por contra, cómo podríamos crear una Array e inicializar sus valores al mismo tiempo? Pon un ejemplo.

int [ ] misNumeros = new int [5]; misNumeros[0]= 3; misNumeros[1]= 53; misNumeros[2]= 67; misNumeros[3]= 84; misNumeros[4]= 7; - La array anterior la crearíamos e iniciaríamos del siguiente modo: int [ ] misNumeros = {3, 53, 67, 84, 7}; --> Ojo lo que no se puede hacer es usar las llaves en una línea diferente a la que se crea la Array. Así: int[ ] misNumeros; misNumeros = {3, 53, 67, 84, 7}; En este caso estaríamos obligados a poner delante new int: int[ ] misNumeros; misNumeros = new int {3, 53, 67, 84, 7};

¿Con qué dos clases y métodos podemos convertir el valor numérico introducido en una String en tipo de dato Integer o Double? Por ejemplo, si le preguntaramos al usuario: int edad = _________________(JOptionPane.showInputDialog("¿Qué edad tienes?); double altura = _________________(JOptionPane.showInputDialog("¿Cuánto mides?);

int numero = Integer.parseInt(String); double numero = Double.parseDouble(String);

¿Cómo recorrer una única fila o columna de una array bidimensional?

public class PruebaApp { public static void main(String[] args) { //Definimos un array de 3 filas x 5 columnas int array[][]={{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; //Recorremos la primera columna de todas las filas for(int i=0;i<array.length;i++){ System.out.println(array[i][0]); } //Recorremos todas las columnas de la segunda fila for(int i=0;i<array[0].length;i++){ System.out.println(array[ 1 ][i]); } } }

¿Cuál es la sintaxis del método getter, también llamado reader o captador?

public tipodatoquedevuelve nombremetodo(){ código return; } Debe de ser public para accederse desde otros métodos y es imprescindible que incluya la palabra return.

¿Cuál es la sintaxis del método setter, también llamado writter o definidor?

public void nombredelmetodo (parametro/s){ código } - void porque no devuelve valor - Frecuentemente el setter exige uno o varios parámetros (PASO DE PARÁMETROS) en cuyo caso ES IMPRESCINDIBLE DECIR QUÉ TIPO DE DATO ES CADA PARÁMETRO. Ej: String nombre; public void estableceNombre (String nombre){ this.nombre = nombre; }

¿Qué es una clase en Java?

Es un modelo en donde se redactan las características comunes de un grupo de objetos.

¿Qué es el factorial de un número?

La multiplicación de un número por todos los que le preceden.

¿Qué métodos podemos usar para averiguar información sobre los índices de una String?

https://beginnersbook.com/2013/12/java-string-indexof-method-example/ - indexOf(int ch) - primera ocurrencia de ese char en la String - indexOf(int ch, int fromIndex) - primera ocurrencia de ese char en la String a partir de la posición indicada - indexOf(String str) - primera ocurrencia del string que se pasa por parámetro en la nuestra - indexOf(String str, int fromIndex) -primera ocurrencia del string que se pasa por parámetro en la nuestra a partir de la posición indicada https://beginnersbook.com/2013/12/java-string-lastindexof-method-example/ - lastIndexOf(int ch) - lastIndexOf(int ch, int fromIndex) - índice de la última ocurrencia del char con índice menor a fromIndex - lastIndexOf(String str)- posición del índice de la última ocurrencia del string entero que se pasa por parámetro en la nuestra - lastIndexOf(String str, int fromIndex) posición del índice de la última ocurrencia del string entero que se pasa por parámetro en la nuestra con índice menor a fromIndex

What's the syntax of an if statement in Java? ¿Se puede prescindir de las llaves en un if statement? ¿Tiene sentido poner muchos if statements seguidos que estén evaluando valores en base a lo mismo? ¿Qué es mejor para facilitarle el trabajo a Java?

if (Boolean expression) { block of code } - Si el código del if es solo una instrucción podremos quitar las llaves y recordar añadir un punto y coma al final de la instrucción: if (Boolean expression) block of code; No obstante, hay gente que no la considera una buena práctica. - No tiene sentido. Convendría trasladar todos esos ifs a un statement de tipo if-elseif-else de modo que en cuanto encontrara el resultado true saltaría el código restante. Imagina que fuera una persona quien revisara esos valores, ¿te piensas que le haría gracia tener que seguir revisando ifs cuando ya ha dado con el if que da true? Si hay muchos if statements seguidos que sea para analizar condiciones de distinto tipo. Igual que si usamos muchos ifs anidados. ¿No tendrá más sentido reducir la cantidad de ifs anidados poniendo una condición múltiple con operadores &&? Habrá veces en las que necesitemos ifs anidados pero otras no.

What's the syntax of an if-else statement in Java? ¿Se puede prescindir de las llaves del else en un if-else statement?

if (Boolean expression) { block of code } else { block of code } - Si en el else solo se incluye una instrucción, entonces sí. Al igual que en un if statement si solo es una instrucción tampoco hace falta.

What's the syntax of an if-elseif-else statement in Java? How many else if statements can we repeat within an if-elseif-else statement?

if (Boolean expression) { block of code } else if (Boolean expression) { block of code } else { block of code } - As many as we may need.

What is the data type used to represent numerical values in Java?

int (from 'integer'). --> all positive and negative numbers, including zero, (only allows values between -2,147,483,648 and 2,147,483,647)

Cuando queramos usar una clase deberemos importar en nuestro programa el paquete que la contenga. ¿Cómo se importa la clase que queramos usar? ¿Dónde se importa? ¿Las clases de qué paquete son una excepción, de modo que no hará falta importarlas?

- Con la instrucción import. Por ejemplo: import.java.util.Scanner; (si quisiéramos importar sólo la clase Scanner) import.java.util.*; (con el asterisco, si quisiéramos importar todas las clases dentro del paquete util de Java) - Siempre se escribirá la instrucción en la parte de más arriba de nuestro programa, lo primero antes que nada, incluso antes que el main. - El paquete java.lang, dentro de la que por ejemplo están la clase String, Math, Thread, System...

¿Se pueden anidar ternary operators?

Sí. En el siguiente ejemplo vamos a comparar las edades de tres personas para extraer la menor: int german = 27; int alicia = 20; int josemaria = 57; int menor = german<alicia? german<josemaria?german:josemaria: alicia<josemaria?alicia:josemaria; System.out.println(menor); Daría el resultado correcto: 20 Ejemplos de cómo encontrar número menor de entre 3 y número mayor de entre 3: https://beginnersbook.com/2017/09/java-program-to-find-the-smallest-of-three-numbers-using-ternary-operator/ https://beginnersbook.com/2017/09/java-program-to-find-largest-of-three-numbers-using-ternary-operator/ https://stackoverflow.com/questions/12548857/multiple-conditions-in-ternary-conditional-operator

¿Cómo podemos averiguar rápidamente el paquete al que pertenece una clase si no nos acordamos?

Una opción rapidísima es en el propio IDE. Ides como Eclipse te puede escribir inmediatamente los imports (Dándole a Source y Organize imports). La otra opción es buscar la clase en la API de Java. En la parte de arriba de la página de cualquier clase en la API de Java aparecerá el paquete al que pertenece.

¿Qué otra forma existe para obtener un número aleatorio del 0 o del 1 al 100?

Usar la clase Random con su método .nextInt(numqueexcluye) Si fuera de 0 a 100 sería sencillo. Primero siempre toca crear una instancia del método Random ya que este no es static y sus métodos deberán llamarse sobre instancias. Random rnd = new Random(); Luego usaríamos el método .nextInt con un parámetro, que será el número que excluya. int myNum = rnd.nextInt(101); En el caso de ser del 1 al 100 lo podemos hacer creando un par de métodos muy simples como se demuestra en este fantástico tutorial: https://www.youtube.com/watch?v=dlA67TRejww

How must char values be enclosed?

With single quotes. Ej: char Germán = 'G'

What is the name of the data type that can be either true or false?

boolean

¿Qué método tiene la clase Arrays para buscar un valor dentro de una Array? ¿Qué es lo que devuelve este método? ¿Es un método static? ¿Hace falta importar el paquete que contiene Arrays? ¿Qué variaciones dispone este método? ¿Qué dos especificaciones tiene este método que debemos tener en cuenta? Este tutorial de Youtube muestra ejemplos muy buenos de uso de este método: https://www.youtube.com/watch?v=DC7UxNZV-j4

- .binarySearch(); --- ojo leer especificaciones finales - Devuelve un int que es equivalente al número de índice dentro de la array en el que se encuentra el valor buscado. - Sí, siempre deberemos usar Arrays.binarySearch(); - Sí, ya que es el paquete java.util - Este método dispondrá al menos de dos parámetros, uno que indique el nombre de la array y otro que indique la 'key' que se busca, es decir, el valor que se busca. También podrán añadirse dos parámetros más para indicar desde qué índice empieza y acaba de buscar (en caso de que no queramos buscar toda la array). - "The array must be sorted prior to making this call. If it is not sorted, the results are undefined." "If the array contains multiple elements with the specified value, there is no guarantee which one will be found."

¿Qué método tiene la clase String para saber si dentro de un objeto String hay una secuencia de caracteres determinada?

- .contains(CharSequence s) String str1 = "tutorials point" String str2 = "http://"; CharSequence cs1 = "int"; boolean retval = str1.contains(cs1); System.out.println("Method returns : " + retval); retval = str2.contains("_"); System.out.println("Methods returns: " + retval); Output: Method returns : true Methods returns: false

¿Qué método tiene la clase String para comparar si dos cadenas de caracteres son iguales o no? ¿Y si se quieren ignorar diferencias de mayúsculas y minúsculas? ¿Qué tipo de dato devuelve? ¿Es un método static? ¿Por qué no usamos el relational operator == para comparar cadenas? ¿Y qué método usaríamos para comparar una String con un CharSequence o StringBuffer?

- .equals(); - .equalsIgnoreCase(); - Boolean - No es static, por lo que se usa sobre una instancia de la clase String. - No podemos usar == ni con objetos String ni con cualquier otro tipo de objeto porque realmente lo que hace Java en esos casos es ver si esos objetos están guardados en el mismo slut de la memoria. String a = "Hello"; String b = "Hello"; System.out.println(a==b); --> daría true porque realmente Java optimiza aquellas variables que valen lo mismo guardándolas en el mismo lugar. En cambio si String a = new String("Hello"); esto resultaría en falso porque el uso de new obliga a guardar este valor en una nueva localización de la memoria. - Usar los métodos .contentEquals(CharSequence cs) o .contentEquals(StringBuffer bs)

¿Qué método tiene la clase String que devuelve la longitud de la cadena de caracteres? ¿Qué tipo de dato devuelve? ¿Es un método static?

- .length(); - Devuelve int - No es static, por lo que se usa sobre una instancia de la clase String.

¿Qué método tiene la clase String que devuelve una parte concreta que queramos de la cadena de caracteres? ¿Ese método dispone de sobrecarga de parámetros? ¿Qué tipo de dato devuelve? ¿Es un método static? ¿Qué método existe muy parecido a este pero que devuelve otro tipo de dato?

- .substring(beginIndex, endIndex); siendo beginIndex la posición dentro del String desde la que se empieza a coger y endIndex la posición que ya se ignora. El método .substring dispone de otra posibilidad que pasa por solo pasar un número de índice como parámetro, de modo que lo que se copia es desde ese número hasta el final de la cadena de caracteres. - Devuelve string - No es static, por lo que se usa sobre una instancia de la clase String. - El método .subSequence(int beginIndex, int endIndex) devuelve un CharSequence con valor equivalente a la substring entre beginIndex y endIndex.

¿Qué método tiene la clase String que devuelve toda la cadena de caracteres en mayúsculas?¿Y el mismo método para las minúsculas? ¿Qué tipo de dato devuelve? ¿Es un método static?

- .toUpperCase(); / .toLowerCase - String - No es static, por lo que se usa sobre una instancia de la clase String.

¿Cuántos y cuáles son los tipos de datos (primitivos) en Java? (Primitive data types in Java) ¿Qué datos primitivos de otros lenguajes de programación no lo son en Java?

- 8: byte, short, int, long, float, double, boolean, char - la fecha y el texto, que se considerarán respectivamente objetos de la clase Date y String

What symbols do we use to express the equality operators 'equal to' and 'not equal to'?

- == - != By the way, you can test equality across different data types.

Why don't we need to use case ==X in a switch statement? Why is the break keyword important in a switch statement? Is it always needed? Are there any cases in which we could be interested in not writing a break? Can we use strings for cases?

- Because case only checks equality, you cannot write, for example, case x > 10: - Without break, Java will continue to check other cases in the switch statement. It is thus not necessary in the last case to check because it will go out of the switch block anyway. - Unless we wanted to run the code for different cases if the first happened it wouldn't be intelligent to do it. BUT, IT MAY HAPPEN THAT WE WANT TO PRINT THE SAME CODE FOR SEVERAL CASE OPTIONS. WE COULD JOIN ALL CASE OPTIONS IN ONE LINE TO AVOID WRITING THE SAME CODE FOR EACH. This is called "fall through". Example: switch (month) { case 12 : case 1 : case 2: System.out.println("It is winter"); case 3 : case 4 : case 5: System.out.println("It is spring"); case 6 : case 7 : case 8: System.out.println("It is summer"); case 9 : case 10 : case 11: System.out.println("It is autumn"); break; default: System.out.println("Invalid month"); } - Yes, in the previous example it could be case "January"...

¿Cómo redondeamos un número en Java? - Qué clase usamos? - Hace falta importar el paquete? - Qué dos métodos podemos usar? - Qué tipo de dato requiere el parámetro y qué tipo de dato devuelve, por lo tanto, qué tipo de variable almacenará el resultado? - El método se aplica sobre la clase (es static)?

- Con Math.round() o con Math.rint() dependiendo de si queremos que el .5 se redondee al siguiente int o al anterior. Ej: 3.5 se convertiría en 4 con .round() y en 3 con .rint() https://stackoverflow.com/questions/37256550/difference-between-math-rint-and-math-round-in-java/37257027 - Math - No, porque pertenece a la clase java.lang que está por defecto ya importada. - .round(float) devuelve int .round(double) devuelve long .rint(double) devuelve double - Sí, es static.

¿Qué hace el método Math.abs(parámetro);?

Retorna el valor absoluto de la variable pasada por parámetro, que puede ser double, float, int o long. Ese valor absoluto vendrá con decimales. El valor absoluto es el valor no negativo de un número. Tanto de 10 como de -10 sería 10. Se puede entender como la distancia respecto 0.

¿Qué devuelve el uso del método Math.random? ¿Cómo podríamos conseguir un número aleatorio entre el 0 y el 100 usándolo? Ejemplifícalo.

- Devuelve un número positivo double aleatorio entre 0 y 1. - Deberemos multiplicar el resultado de Math.random por 100 para obtener un número entre 0 y 100 y posteriormente usar el método .round para obtener un número entero en vez de decimal. int aleatorio = (int)(Math.random*100);

¿Qué diferencia hay entre los métodos .matches(String regex) y .regionMatches(int toffset, String other, int ooffset, int len)? ¿Hay sobrecarga de parámetros en .regionMatches()?

- El método .matches(String regex) comprueba si la regular expression del parámetro coincide en alguna parte de la string: String str = new String("Java String Methods"); System.out.println(str.matches("(.*)String(.*)")); System.out.println(str.matches("(.*)Strings(.*)")); true false - El método .regionMatches(int toffset, String other, int ooffset, int len) no tiene nada que ver con una expresion regular sino que compara si una substring de nuestra String coincide con la substring de otra String. El índice de salida de una y otra lo aporta toffset y ooffset y la longitud int len. Se puede añadir un parámetro boolean antes de los cuatro que si es true ignoreCase. String str1 = new String("Hello, How are you"); String str2 = new String("How"); String str3 = new String("HOW"); System.out.println(str1.regionMatches(7, str2, 0, 3)); System.out.println(str1.regionMatches(7, str3, 0, 3)); System.out.println(str1.regionMatches(true, 7, str3, 0, 3)); true false true

¿En qué dos categorías podemos dividir los bucles o 'loops' en Java? ¿Qué bucles encontramos en cada una? ¿A qué se debe esa clasificación?

- Indeterminados (while y do-while). Son aquellos en los que no sabemos cuántas veces van a repetirse las líneas dentro del bucle hasta que no se ejecute el programa. - Determinados (for y for-each). En este caso de un vistazo al código sabemos cuántas veces se repetirá el código de su interior.

Imagina ahora que en una empresa todos los nuevos empleados deben de tener un nombre, un apellido, un id y un departamento y que buena parte de los nuevos trabajadores empiezan por el departamento "administración". Podríamos crear dos constructores, uno para los que meteremos el departamento a mano y otro para los que sea "administración". Prográmalo. Al uso de varios constructores dentro de una clase se le llama ______________________

- La clave pasa por utilizar el operador this en el segundo método constructor para así llamar al otro método constructor dentro de la misma clase y no tener que reescribir nuevamente las variables locales dentro del segundo método constructor. Su utilidad es poder crear objetos con valores por defecto cuando no todos los objetos tienen que tener ese o esos valores por defecto, sino solo unos pocos. class Empleados { public Empleados (String nom, String apell, String departam) { nombre=nom; apellido=apell; departamento=departam; id = idSiguiente; idSiguiente++; } public Empleados (String nom, String apell){ this(nom, apell, "Administración"); } private final String nombre; private final String apellido; private String departamento; private int id; private static int idSiguiente = 1; } - Sobrecarga de constructores

¿Qué resultado se imprimiría? public class MyClass { public static void main(String args[]) { int i = 3; String abc = "abcdefghijklmnopqrst"; System.out.println(abc.charAt(i++)); } }

- La letra d, ya que abc.charAt(i++) es igual a: abc.charAt(i); i = i + 1; **En cambio abc.charAt(++i) sería: i = i + 1; abc.charAt(i); **Y si no quisiéramos cambiar el valor de i sino que simplemente quisiéramos obtener el valor siguiente a la i usaríamos abc.charAt(i+1); Otro buen ejemplo para entenderlo: class PrePostDemo { public static void main(String[] args){ int i = 3; i++; // prints 4 System.out.println(i); ++i; // prints 5 System.out.println(i); // prints 6 System.out.println(++i); // prints 6 System.out.println(i++); // prints 7 System.out.println(i); } }

¿Cómo sacamos la potencia de un número en Java? - Qué clase usamos? - Hace falta importar el paquete? - Qué método usamos? - Qué tipo de dato requiere el parámetro y qué tipo de dato devuelve, por lo tanto, qué tipo de variable almacenará el resultado? - El método se aplica sobre la clase (es static)?

- Math - No, porque pertenece a la clase java.lang que está por defecto ya importada. - .pow(base, exponente); - double (aunque si ponemos un número entero el programa mismo lo considerará como double añadiéndole .0), double (por lo que es importantísimo que la variable a la que le asignemos ese resultado sea double, no float!). - Sí, es static. Ejemplo: double resultado = Math.pow(9, 2); System.out.println(resultado);

¿Cómo sacamos la raíz cuadrada de un número en Java? - Qué clase usamos? - Hace falta importar el paquete? - Qué método usamos? - Qué tipo de dato requiere el parámetro y qué tipo de dato devuelve, por lo tanto, qué tipo de variable almacenará el resultado? - El método se aplica sobre la clase (es static)?

- Math - No, porque pertenece a la clase java.lang que está por defecto ya importada. - .sqrt(n); - double (aunque si ponemos un número entero el programa mismo lo considerará como double añadiéndole .0), double (por lo que es importantísimo que la variable a la que le asignemos ese resultado sea double, no float!). - Sí, es static. Ejemplo: double resultado = Math.sqrt(9); System.out.println(resultado);

¿Cómo creamos comportamiento en los objetos? ¿Cuál sería la sintaxis para aplicar ese comportamiento?

- Mediante métodos. - nombredelobjeto.nombredelmetodo(); ......... o si el método es static nombredelaclase.nombredelmetodo();

Given 2 int values, return whichever value is nearest to the value 10, or return 0 in the event of a tie.

- Podríamos programar fácilmente lo que se pide con el método Math.abs(); public int close10(int a, int b) { int aDiff = Math.abs(a - 10); int bDiff = Math.abs(b - 10); if (aDiff < bDiff) { return a; } if (bDiff < aDiff) { return b; } return 0;

¿Qué método tiene la clase String que devuelve un String de un valor que es no String (char, boolean, int, double, etc.)? ¿Es un método static?

.valueOf(); - Ojo, sí que es un método estático y deberemos escribir delante String.valueOf ... Esto es lógico puesto que sería tonto tener que crear una String previamente sin inicializar... También se puede usar Object.toString(); ¿Cuándo conviene uno antes que otro? Mejor leerlo más adelante: https://stackoverflow.com/questions/27465731/string-valueof-vs-object-tostring

What is the Boolean operator precedence (in which order are they evaluated first)?

1. Whatever is inside parenthesis 2. ! 3. && 4. || --> Expressions are read from left to right

String word1 = "ape"; String word2 = "zebra"; word1.compareTo(word2) da -25 ¿Por qué? String word1 = "ape"; String word2 = "apple"; word1.compareTo(word2) daría -11 ¿Por qué? String word1 = "cat"; String word2 = "catfish"; word1.compareTo(word2) da -4 ¿Por qué? String word1 = "Ape"; String word2 = "ape"; word1.compareTo(word2) da -32 ¿Por qué? String word1 = "1ape"; String word2 = "Ape"; word1.compareTo(word2) da -16 ¿Por qué?

- Porque el valor Unicode de 'a' es 97 y el de 'z' 122, por lo que 97 - 122 = -25 - Porque el valor Unicode de 'e' es 101 y el de 'p' 112, por lo que 101 - 112 = -11 - Porque cuando una String se termina sin haber ninguna diferencia hasta el momento - como en cat - lo que hace Java es contar los caracteres de más de la otra String - en el caso de catfish serían 4 de 'fish' - entonces resta 0 (de cat) - 4 (de catfish) - Porque en Unicode los caracteres de letras mayúsculas tienen un valor menor a las minúsculas. A mayúscula vale 65 y a minúscula 97 por lo que 65-97 = -32 - Porque en Unicode los valores de los números son menores que los de las letras, tanto mayúsculas como minúsculas. 1 vale 49 y A 65 por lo que 49-65= -16

¿Qué es lo opuesto a una variable? ¿Qué palabra se utiliza para marcarla? ¿Dónde situamos esa palabra? Ejemplo de uso.

- Una constante - Se marca añadiendo la palabra 'final' delante del tipo de dato que vayamos a crear. (ej: static final int latitud = 49) - Las constantes se usan frecuentemente, por ejemplo, en programas que tratan con conversión de unidades (ej: double final a_pulgadas = 2'54; km a milla, Celsius a Fahrenheit...). - También existen constantes de clase en Java, ej: Math.PI (puesto PI nunca cambia será una constante)

¿De qué forma atajada podemos incrementar o disminuir en 1 el valor de algo en Java? Por ejemplo, ¿qué forma abreviada tendríamos para evitarnos escribir lo siguiente? personas = 5; personas = personas + 1; personas = personas - 1;

- Usando el operador de incremento ++ y de decremento -- - Lo escribiríamos así: personas = 5; personas++; personas--;

¿Qué forma abreviada hay en Java para escribir que un valor aumenta o disminuye X cantidad, siendo X un número? ¿Cómo podríamos evitar escribir lo siguiente? personas = 5; personas = personas + 7; personas = personas - 2;

- Usando el operador de incremento +=nº y de decremento -=nº - Lo escribiríamos así: personas = 5; personas+=7; personas-=2;

Values are stored in __________, and all of them must have a specified ___________.

- Variables - Data type

- How is the 'xor' or 'exclusive' Boolean operator represented in Java? - When does it return a value of true?

- With a caret (^), that's why it's also called caret operator. - Solo devuelve true si una de las dos operaciones a lado y lado es true pero la otra no. Si las dos son true devolverá false. Y si ambas son false también dará false. int num1 = 1; int num2 = 2; int num3 = 3; int num4 = 4; out.print(num1<num2 ^ num3<num4); FALSE out.print(num1>num2 ^ num3<num4); TRUE out.print(num1<num2 ^ num3>num4); TRUE out.print(num1>num2 ^ num3>num4); FALSE

How do you mark a single-line comment in Java? And a multi-line comment in Java? What's the purpose of commenting?

- With two forward slashes (//) - With: /asterisco Text asterisco/ - To avoid the program from reading that/those line/s but sometimes to check how the code runs with or without something.

Can you write an if-else statement in one line of code with Java? How?

- Yes, it is called the ternary conditional statement. Syntax is: result = condition ? value-if-true : value-if-false; If condition is true then value-if-true is assigned to result variable else value-if-false is assigned to result variable.

¿Qué método tiene la clase String para comparar dos String lexicográficamente?¿Tiene alguna variación este método? ¿Qué quiere decir lexicográficamente? ¿Qué devuelve?

- compareTo(String s) - compareToIgnoreCase(String s) - Lexicográficamente quiere decir que se basa en los valores Unicode de los caracteres del String. Los 128 primeros valores de Unicode son los mismo que ASCII (http://www.asciitable.com/). - Deberemos almacenar el resultado en una variable de tipo int ya que: *Si la string pasada en el parámetro tiene caracteres con valores Unicode que van antes que los de la string a comparar devolverá un número positivo. *Si la string pasada en el parámetro tiene caracteres con valores Unicode que van después que los de la string a comparar devolverá un número positivo. * Si los caracteres de las String son exactamente iguales devuelve 0 Ejemplo: public class Test { public static void main(String args[]) { String str1 = "I'm a String"; String str2 = "I'm a String"; String str3 = "You're a String"; int result = str1.compareTo(str2); System.out.println(result); result = str2.compareTo( str3 ); System.out.println(result); result = str3.compareTo( str2 ); System.out.println(result); } } Output: 0 -16 16

¿Qué métodos tiene la clase String para saber si una String empieza o termina con una secuencia de caracteres determinada?

- endsWith (String suffix) - startsWith (String prefix) - startsWith (String prefix, int index) a diferencia del anterior evalúa si esa secuencia se produce a partir del índice indicado en el segundo parámetro. String str= new String("quick brown"); System.out.println(str.endsWith("brown")); System.out.println(str.endsWith("quick")); System.out.println(str.startsWith("quick")); System.out.println(str.startsWith("brown")); System.out.println(str.startsWith("brown", 6)); System.out.println(str.startsWith("quick", 6)); Output: true false true false true false

¿Qué métodos en la clase String nos ayudan a reemplazar caracteres de un String por otro/s?

- replace(char oldChar, char newChar). Cambia caracteres oldChar por newChar. - replace(CharSequence target, CharSequence replacement) Cambia cada instancia de la secuencia de caracteres target por la secuencia de caracteres replacement. Ejemplo: String str = "aacdeaa"; CharSequence s1 = "cde"; CharSequence s2 = "ghi"; String replaceStr = str.replace(s1, s2); System.out.println(replaceStr); // Da aaghiaa - replaceAll(String regex, String replacement) Cambia cada instancia de regex por el replacement. - replaceFirst(String regex, String replacement) Cambia la primera instancia de regex por el replacement.

Java es estricto con los tipos de datos y la declaración de variables ya que no permitirá...

... Crear una variable sin especificar el tipo de dato que es o intentar utilizar una variable que no esté iniciada, es decir, que no disponga de un valor (Podrá crearse sin valor, pero no usarse sin él. De hecho, a veces será obligatorio crear la variable sin valor porque no sabremos su valor hasta más adelante).

¿Cuáles son los datos primitivos para números decimales en Java? ¿Qué les diferencia? ¿Y por qué hacen falta todos?

2: float, double Float: 6 a 7 cifras decimales. Debe escribirse F al final del número float. Double: hasta 15 cifras decimales aprox. Conviene usar el tipo de dato que nos permita realizar las operaciones que queremos pero que sea más pequeño posible ya que así consumiremos menos espacio de la RAM del ordenador.

¿Cuáles son los datos primitivos para números enteros en Java? ¿Qué les diferencia? ¿Y por qué hacen falta todos?

4: byte, short, int, long Byte: números entre -128 y 127 (útil ej. para edades) Short: números entre -32768 y 32767 Int: de integer, números entre -2,147,483,648 a similar en positivo Long: un porrón. Cuando escribimos el número debemos añadir una L mayúscula al final. --> para manejo de datos todavía mayores está la clase BigInteger Conviene usar el tipo de dato que nos permita realizar las operaciones que queremos pero que sea más pequeño posible ya que así consumiremos menos espacio de la RAM del ordenador.

¿Cómo podemos describir una variable?

Como un espacio reservado en la memoria RAM de nuestro ordenador que dispone de un valor que puede cambiar a lo largo de la ejecución del programa.

¿Cómo podemos saber si un String está vacía?

Con el método .isEmpty(). Daría true si el length() del string es igual a 0.

¿Cómo podemos formatear un resultado en Java? Por ejemplo, decidir con qué cantidad de decimales queremos que se nos muestre en pantalla.

Con el método .printf. Ejemplo: double ganancias = 10000 System.out.printf("%1.2f", ganancias/3); - Lo aplicamos sobre System.out - el primer parámetro entre comillas llevará un símbolo de porcentaje + 1.X siendo X la cantidad de decimales que queremos + imprescindible añadir una f antes de cerrar comillas. - el segundo parámetro es la operación a realizar.

¿Cómo se usa la clase JOptionPane para obtener datos de un usuario?

Con el método .showInputDialog Antes que nada, importaremos el paquete de la clase JOptionPane al principio del programa: import.javax.swing.JOptionPane; .showInputDialog es un método estático por lo que se declarará con el nombre de la clase JOptionPane delante. Ejemplo: String nombreusuario = JOptionPane.showInputDialog("Introduce tu nombre"); --> A diferencia de la clase Scanner que dependiendo de los métodos que usemos nos devolverá un tipo de dato u otro, .showInputDialog sólo nos devolverá String por lo que si queremos pasar un número a int deberemos usar la clase Integer con el método .parseInt. Ejemplo: String edad = JOptionPane.showInputDialog("Introduce tu edad"); int edadusuario = Integer.parseInt(edad);

¿Cómo podemos quitar los espacios en blanco que pueda haber en un String al inicio y al final?

Con el método .trim(). String str = new String(" How are you?? "); System.out.println(str.trim()); Output: How are you?

¿Cómo se usa la clase Scanner para obtener datos de un usuario?

Con los siguientes métodos: - .nextLine(); para Strings --> .next(); para Strings si sólo queremos tomar la primera palabra de la frase que introduzcamos, es decir, hasta el primer espacio en blanco. En este caso, retornará la primera palabra sin salto de línea al final. - .nextInt(); para números enteros - .nextDouble(); para números decimales - ... Antes que nada, importaremos el paquete de la clase Scanner al principio del programa: import.java.util.Scanner; Ninguno de estos métodos es estático, por lo que para declararlos deberemos en primer lugar crear una instancia/objeto/ejemplar de la clase Scanner del siguiente modo, con System.in como parámetro: Scanner entrada = new Scanner(System.in); Luego podría seguir... System.out.println("Introduce tu nombre"); String nombreintroducido = entrada.nextLine();

Imagina que tenemos una variable booleana 'abierto' que es igual a true. ¿Cómo escribiríamos un if statement en el que quisiéramos llevar a cabo un código si la variable 'abierto' es igual a true y otro si la variable abierto es igual a false. ¿Cómo trasladaríamos esto a código?

Cuando evaluamos una variable de tipo booleana no es necesario poner ==true en la condición booleana. Podríamos escribir: if (abierto) { código } else { código } No es necesario escribir 'if (abierto ==true)'

Pon un ejemplo útil de ternary operator anidado.

Cuando vamos a comparar objetos para ordenarlos en el método sobreescrito compareTo de la interfaz Comparable. Por ejemplo, comparando la propiedad sueldo de objetos de la clase Empleado: public int compareTo(Empleado e) { return this.sueldo<e.sueldo?-1:this.sueldo>e.sueldo?1:0; }

¿Qué hace el método .toCharArray de la clase String?

Devolver una array de char con todos los caracteres contenidos en el String que le pasemos.

¿Qué hacen los siguientes métodos de la clase String? - .split(String regex) - .split(String regex, int limit) ¿Qué devuelven?

Devuelven una array de String formada por las strings a los lados de la expresión regular que se pase como parámetro. El segundo parámetro int limit determina el número de String máximo que acogerá la array. The string "boo:and:foo", for example, yields the following results with these parameters: Regex Limit Result : 2 { "boo", "and:foo" } --> no parte and y foo porque se le dice que el límite máximo es 2 : 5 { "boo", "and", "foo" } --> aunque el límite máximo son 5 como no hay tantos da 3 : -2 { "boo", "and", "foo" } --> si es negativo da todos los que haya o 5 { "b", "", ":and:f", "", "" } o -2 { "b", "", ":and:f", "", "" } o 0 { "b", "", ":and:f" }

¿Qué método dispone la clase Scanner para averiguar si el objeto de tipo Scanner dispone de un tipo de información determinada (ej: tipo primitivo, String, Pattern, Line...)

El método .hasNextXXX, por ejemplo: - hasNextInt(), hasNextDouble(), etc. con los primitivos - hasNext(String) para las Strings - hasNext(Pattern) para las regexs - hasNextLine() para frases

¿Qué método se llama automáticamente dentro de System.out.println? ¿Cómo podemos sobreescribirlo? ¿Por qué es esto útil?

El método .toString Si por ejemplo tenemos una ArrayList de objetos de la clase Student podemos reescribir el método .toString en la clase Student: public String toString() { return "Name is: "+this.studentname+" & Age is: "+this.studentage; } Para que después al imprimir la ArrayList: for (Student tmp: al){ System.out.println(tmp); } De: Name is: Chaitanya & Age is: 26 Y no: beginnersbook.com.Student@10b28f30

Sabemos que debemos usar .equals o .equalsIgnoreCase para comparar Strings y no el operador ==. ¿Sucedería lo mismo si quisiéramos comparar variables de tipo char, es decir, no sería aconsejable usar el operador == ?

En el caso de variables de tipo char NO SE PUEDE USAR el método .equals, sino que SE DEBE USAR EL OPERADOR ==. Hay que pensar que en el fondo lo que está haciendo este operador es comparar los números a los que corresponden esos valores (los que aparecen aquí: http://www.asciitable.com/). char a = 'a'; char b = 'b'; System.out.println(a>b); --> Esto es lo mismo que si dijera: System.out.println(97>98) Comparar char es extremadamente útil en aplicaciones de diccionario.

Si necesitamos usar el número PI, por ejemplo, para calcular el área de un círculo, cómo lo haremos (ya que no podemos poner todos los números infinitos decimales de PI)?

Escribiendo Math.PI es como si escribiéramos el valor equivalente de PI.

La POO traslada la naturaleza de los objetos de la vida real al código. Así pues los objetos (ej: un coche) disponen de _____________, _______________ y ________________.

Estado: parado, circulando, aparcado... Comportamiento (métodos): arrancar, frenar, girar, acelerar... Propiedades: color, peso, tamaño...

A veces no podremos cambiar el tipo de datos que almacenará una variable. Para estos casos, ¿qué solución le daremos si un método nos devuelve un tipo de dato que no nos interesa? Pon un ejemplo.

Haremos una REFUNDICIÓN o lo que en inglés se dice 'the process of CASTING a variable', es decir, escribimos entre paréntesis delante de la expresión el tipo de dato al que queremos convertir. double num1 = 5.85; int resultado = (int)Math.round(num1); System.out.println(resultado); Igual pasaría con .pow(a,b); o .random(); si quisiéramos guardarlos en int deberíamos usar la refundición (int).

¿Qué resultado da estas declaraciones y por qué? int a = 5; int b = 7; int c = b/a; System.out.println(c);

Imprimiría 1 y no 1.4, esto es porque se está usando la variable int que desecha decimales y no redondea. Si queremos trabajar con decimales (por ejemplo, con divisiones) deberemos usar un tipo de dato de decimales como float o double.

What's the math operator 'modulo' (%) used for? Di tres ejemplos en los que el uso de modulo nos pueda ayudar.

It returns the remainder of dividing two numbers. For example, 15 % 6 will return the value of 3, because that is the remainder left over after dividing 15 by 6. Ejemplos: - Si quisiéramos averiguar si dos números terminan en el mismo dígito... return (a%10==b%10); [Se ve muy claro que 15%10 da 5, pero ¿y 1%10?¿cómo es que da 1? Pues porque el número más alto por el que se puede multiplicar 10 que quede por debajo de 1 o que sea 1 es el 0, ya que si se multiplicara por 1 daría 10 y se excedería. Al multiplicar por 0 da 0 y entonces la resta de 1-0 da 1] - Si quisiéramos saber si un número es múltiplo de otro... return (numero1%numero2==0); - Si quisiéramos saber si un número es par o impar: return (numero%2==0)

¿Qué 2 clases hay en Java?

Las propias - que creemos nosotros - o las predefinidas que ya vienen con Java.

¿Qué clases permiten la entrada de datos en Java?

Lo suyo sería usar una IGU pero por ahora podríamos usar las clases Scanner o JOptionPane

La API de JAVA dispone de todas las clases en paquetes. ¿Qué son los paquetes y por qué existen?

Los paquetes son como si fueran las carpetas de un ordenador. Los motivos son varios: - Mejor organización - Evitar conflictos de nombres - Controlar la visibilidad de las clases --> esto está relacionado con la Encapsulación

¿Cómo cambiamos la propiedad de un objeto? Por ejemplo las propiedades color, peso y ancho siguientes: public class Coche { public Coche(){ String color="verde"; int peso=100; int ancho=2000; } }

Mediante: nombredelobjeto/nombreclasesiesestatica.nombredelapropiedad = valor; public class Main { public static void main(String[] args) { Coche Ibiza = new Coche(); Ibiza.color="rojo"; System.out.println("El color del coche es " + Ibiza.color); }

¿Es lo mismo escribir i++ que ++i ?

No, depende del contexto puede que sí o que no. Si hay otro operador matemático a su alrededor puede alterar el resultado. Imagina: a=0 b=3 Si decimos que a = b++ ... a será igual a 3 y posteriormente cambiará el valor de b a 4. Si decimos que a = ++b ... a será igual a 4 y b también valdrá 4. Esto es así porque las operaciones van de izquierda a derecha. Se ve más claro si ponemos un paréntesis así... (a=b)++ (a=++b) Vídeo con más ejemplos: https://www.youtube.com/watch?v=aSVoqoZ_5Pk&index=11&list=PL72Es31dJnK7bCyERqbpgZwlMDf1N18Kv

Cuando queramos formatear una String, ¿podremos utilizar un 'format specifier' para valores de tipo boolean?

No, una solución pasa por usar el format specifier de String, es decir, %s y luego utilizar un ternary operator en el lugar que se espera su parámetro para que devuelva una opción u otra dependiendo de si el resultado es true o false. Ejemplo: String.format("...... Gender: %s" male ? "Male" : "Female") Este ejemplo se explica muy bien en este tutorial: https://www.youtube.com/watch?v=KXfZNYDizMQ&list=PL72Es31dJnK7bCyERqbpgZwlMDf1N18Kv&index=36

¿Qué problema puede haber con una refundición?

Podremos hacer refundiciones cuando no haya pérdida de información. Obviamente nos dará error si queremos guardar un short con valor 130 en un byte, si queremos guardar un int con valor 33000 en un short, si queremos guardar un long con valor 2,148,000,000 en un int... Si el valor excede lo que tipo de dato puede almacenar se truncará y no tendrá nada que ver con el valor real.

¿Qué significa la encapsulación o encapsulamiento?

Que diversos objetos se comunican en el programa - mediante métodos - pero no por ello deben saber el funcionamiento de cada uno de ellos.

En la página principal de la API de Java aparecen a la izquierda dos recuadros. Arriba todos los paquetes y abajo todas las clases dentro del paquete seleccionado arriba. Si vemos lo siguiente qué quiere decir: java.awt java.awt.image java.awt.image.renderable

Quiere decir que son carpetas/paquetes distintos pero que el renderable está dentro del de image y el de image dentro del de awt.

Si el día de mañana entro a trabajar en una empresa que usa Java, es importante averiguar...

Qué versión de Java usa, ya que Java ha sufrido tantos cambios entre unas versiones y otras que parecen diferentes e incluso algunas pueden romper su compatibilidad hacia atrás: https://youtu.be/poeKLD-dZp0?t=1019

¿Qué pasa si sumamos un valor string con un número?

Se convierte todo en un String traduciendo el número a String. System.out.println("ab" + 3 + 2); da ab32 System.out.println("5" + 3 + 2); da 532 System.out.println("5" + 3 * 2); da 56 System.out.println("5" + (3 + 2)); da 55 System.out.println(3 + 2 + "1" + 3); da 513 System.out.println(1 + 4 + 2 + "4" + 1 + 7); da 7417 System.out.println(1 + 4 + 2 + "4" + (1 + 7)); da 748

A ___________ is used to end all Java single code statements.

Semicolon (;)

¿Qué significaría esto num1%=num2? Pon un ejemplo

Sería igual que decir num1 = num1%num2 int num1 = 20; int num2 = 10; num1 %= num2; System.out.println(num1); // El resultado sería 0, ya que 20 entre 10 da 2 y deja 0 restante

¿Cuál es la sintaxis de un método constructor? Imagina que quieres crear una clase Empleados para ir instanciando empleados. También quieres asignarle un nombre cada vez que crees un empleado pero darle un departamento fijo a todos los nuevos empleados. ¿Cómo se haría?

Sintaxis: public nombredelaclase(parámetrosopcionales){ código } class Empleados { public Empleados (String nombre) { this.nombre = nombre; departamento = "Administración"; } private final String nombre; private String departamento; }

¿Qué son los constructores en Java? Ejemplo ¿Puede que una clase disponga de varios métodos constructores?

Son métodos especiales que tienen el mismo nombre que la clase. Se usan para crear nuevas instancias de la clase. Siempre se crean así: Nombreclase Nombreobjeto = new Nombreclase(parámetros si los hay); - Sí. Los métodos constructores pueden tener diferente cantidad de argumentos obligatorios. Cuantos más argumentos tenga el método constructor de más características de estado inicial dispondrán las instancias que se generen.

¿Cómo almacenamos una cadena de caracteres?

String nombrecadena = "loquesea"; - Importante las comillas dobles - Se puede decir que nombrecadena es una 'variable objeto', una instancia o ejemplar de la clase String.

What is the statement that prints whatever argument it is passed?

System.out.println(); (crea nueva línea después) System.out.print(); (no crea nueva línea después) --> Shortly called SOP

Si queremos imprimir en líneas separadas un texto, ¿hay algún modo más sencillo que tener que escribir varios System.out.println(); seguidos?

Sí, escribir dentro del String de parámetro \n cuando queramos una nueva línea. Ejemplo: System.out.println("Elige una opción: \n1: Cuadrado \n2: Círculo \n3: Rectángulo \n4: Triángulo");

¿Se pueden declarar diferentes variables o constantes en una misma línea de código?

Sí, se pueden crear sin iniciar varias variables o constantes al mismo tiempo. Ejemplo: int operador1, operador2, resultado; operador1 = 9; operador2 = 7; resultado = operador1 + operador2;

Cuando usamos el método .next de la clase Scanner, ¿podemos establecer nosotros hasta dónde queremos que corte del input entrado por el usuario para almacenarlo en un objeto de Scanner?

Sí, utilizando el método .useDelimiter() antes de .next . El método .useDelimiter() puede pasar como argumento tanto un String como un Pattern, esto es, un regex o regular expression.

What statement do we use in Java to run different blocks based on the equality to the variable inside the condition?

With the switch statement: switch (something) { case X : dosomething; break; case XX: dosomething; break; case XXX: dosomething; break; default: dosomething; break; // innecesario } - No es obligado poner un valor de default

¿Cuáles son las 'escape sequences' más comunes dentro de un String en Java?

\n para nueva línea \t para añadir un espacio similar al del tabulador \" para añadir comillas dentro de un String \' para añadir comillas simples. En algunos casos no hará falta pero en otros será la única forma de ponerals \\ para añadir una barra invertida. Por ejemplo para dar el path de un documento dentro de un ordenador: "C:\\Users\\Germán\\Desktop"

What data type is used to represent single characters?

char

¿Cuál es la sintaxis del bucle for? ¿Qué palabra se usa para la parte de inicialización del bucle? ¿Cómo se les suele denominar a la variable que se inicializa? (qué letras?) ¿Para qué se suelen usar mucho los bucles for?

for (inicio bucle; condición; contador bucle) { código } - Se usa int. Ej: for (int i=0; i<10; i++) { código } *Ojo que lo que separa a los argumentos es un punto y coma y no una coma - i, j y z - Para analizar las letras de las Strings o los valores de las Arrays

¿Cuál es la sintaxis de un bucle while en Java? ¿Cómo llamamos al bucle que no acaba nunca, si la condición de while nunca deja de ser verdadera?

while (condición) { código } - Bucle infinito o infinite loop en inglés.


Set pelajaran terkait

Human Growth and Development Final

View Set

CHAPTER 7: TRAINING AND DEVELOPMENT

View Set

C++ Ch 15 Inheritance, Polymorphism, and Virtual Functions

View Set

Ultrasound Physics: Period and Frequency (Chapter 3 Part 1)

View Set

Chapter 9 Compensating Employees STUDY!!!!

View Set

Chapter 4: Health of the Individual, Family, and Community

View Set

ACCT 2301-01 - Chapter 11 Homework

View Set