====== 04 - Operadores ======
Cada tipo de dato en Java puede utilizar determinados operadores para realizar operaciones o cálculos. Vamos a ver los más comunes.
===== Operador de asignación =====
El operador de asignación más común es el signo de igual (**=**). Se utiliza para asignar un valor a una variable:
int a;
a = 5;
Aunque su uso es bastante intuitivo, hay algunas consideraciones a tener en cuenta con el operador de asignación:
* Para asignar un valor a una variable de tipo //char// tenemos que utilizar las comillas simples (**'**).
* Las variables de tipo //boolean// sólo pueden tomar los valores //true// o //false//.
* Las variables de tipo //String// se tienen que definir con las comillas dobles (**"**).
* Si queremos escapar algún carácter cuando definimos un //String// lo debemos hacer con la barra invertida (**\**)
int a;
char c;
boolean e;
String f;
a = 5;
c = 'a';
e = true;
e = false;
f = "Hola mundo";
f = "Hola \"mundo\"";
===== Operadores aritméticos =====
Los operadores aritméticos básicos en Java son la suma (**+**), resta (**-**), multiplicación (*****), división (**/**) y módulo, o resto de la división entera (**%**).
int a, b, resultado;
a = 5;
b = 3;
resultado = a + b;
System.out.println(resultado);
resultado = a - b;
System.out.println(resultado);
resultado = a * b;
System.out.println(resultado);
resultado = a / b;
System.out.println(resultado);
resultado = a % b;
System.out.println(resultado);
8
2
15
1
2
Podemos combinar el operador de asignación con operadores aritméticos para acortar expresiones:
* **+=**: Suma el operando izquierdo con el operando derecho y asigna el resultado a la variable de la izquierda.
* **–=**: Resta el operando izquierdo con el operando derecho y asigna el resultado a la variable de la izquierda.
* ***=**: Multiplica el operando izquierdo con el operando derecho y asigna el resultado a la variable de la izquierda.
* **/=**: Divide el operando izquierdo con el operando derecho y asigna el resultado a la variable de la izquierda.
* **%=**: Calcula el módulo del operando izquierdo con el operando derecho y asigna el resultado a la variable de la izquierda.
Por ejemplo, la expresión:
a += b;
es equivalente a:
a = a + b;
===== Operadores unarios =====
Los operadores unarios se utilizan sobre un solo operando. Se usan para aumentar, disminuir o negar un valor:
* **-**: Multiplicar el valor por -1.
* **+**: Multiplica el valor por +1.
* **++**: Incrementa el valor en una unidad. Si se utiliza delante de la variable, primero aumenta el valor y luego se calcula el resultado. De lo contrario, primero se calcula el resultado y luego se incrementa la variable.
* **--**: Decrementa el valor en una unidad. Si se utiliza delante de la variable, primero decrementa el valor y luego se calcula el resultado. De lo contrario, primero se calcula el resultado y luego se decrementa la variable.
* **!**: Niega el valor (usado sobre operadores lógicos).
a = -3;
System.out.println(-a);
a = 4;
System.out.println(a++);
a = 4;
System.out.println(++a);
e = true;
System.out.println(!e);
3
4
5
false
===== Operadores relacionales =====
Se utilizan para devolver el resultado de una comparación. Algunos de los operandos relacionales son:
* **==**: Devuelve //true// si los operandos son iguales. De lo contrario, devuelve //false//.
* **!=**: Devuelve //false// si los operandos son iguales. De lo contrario, devuelve //true//.
* **<**: Devuelve //true// si el primer operando es menor que el segundo. De lo contrario, devuelve //false//.
* **>**: Devuelve //true// si el primer operando es mayor que el segundo. De lo contrario, devuelve //false//.
* **<=**: Devuelve //true// si el primer operando es menor o igual que el segundo. De lo contrario, devuelve //false//.
* **>=**: Devuelve //true// si el primer operando es mayor o igual que el segundo. De lo contrario, devuelve //false//.
a = 3;
b = 5;
System.out.println(a>b);
false
===== Operadores lógicos =====
Se utilizan para realizar operaciones lógicas //AND// y //OR//:
* **&&**: //AND// lógico.
* **||**: //OR// lógico.
a = 3;
b = 5;
System.out.println(a
false
true
===== Métodos de la clase String =====
Como vimos en el tema anterior, una variable de tipo //String// es en realidad un objeto de la misma clase. Aunque no tiene operadores como tal, tiene algunos métodos muy utilizados que conviene conocer. A continuación veremos algunos de esos métodos. Si quieres saber todos los que tiene, puedes visitar la [[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html|documentación de Java]]:
* **int length()**: Devuelve la cantidad de caracteres cadena.
f = "Hola mundo";
System.out.println(f.length());
10
* **char charAt(int i)**: Devuelve el carácter en la posición //i// (la primera posición es la 0).
System.out.println(f.charAt(3));
a
* **String substring(int i, int j)**: Devuelve la subcadena desde el carácter en la posición //i// hasta la posición //j//. Si no se pasa el parámetro //j//, se devuelve la subcadena hasta el final de la cadena.
System.out.println(f.substring(0, 3));
System.out.println(f.substring(7));
Hol
ndo
* **int indexOf(String s, int i)**: Devuelve el índice de la primera aparición de la subcadena //s// empezando por el índice //i// especificado. Si no se pasa el parámetro //i//, empieza por el principio de la cadena
System.out.println(f.indexOf("mun"));
System.out.println(f.indexOf("o", 4));
5
9
* **toUpperCase()/toLowerCase()**: Devuelve la cadena con todas las letras en mayúsculas/minúsculas.
System.out.println(f.toUpperCase());
HOLA MUNDO
* **equals()**: Compara dos cadenas y devuelve //true// si son iguales o //false// en caso contrario.
String g = "Hola mundo";
System.out.println(f.equals(g));
String h = "Hola universo";
System.out.println(f.equals(h));
true
false
===== Ejercicios =====
**Ejercicio 1.a**
Escribe un programa que pida dos números de tipo //float// al usuario. La aplicación deberá sacar por pantalla la suma, resta, multiplicación, división y resto de la división entera de ambos números.
**Ejercicio 1.b**
Haz que el programa anterior muestre los resultados como enteros, sin modificar el tipo de las variables.
**Ejercicio 1.c**
Utiliza el método //format()// de la clase //String// para formatear el resultado de las operaciones con solo 2 decimales.
**Ejercicio 2.a**
Escribe un programa en Java que saque por pantalla la raíz cuadrada de un número introducido por el usuario. Para calcular la raíz cuadrada, utiliza el método adecuado de la clase [[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html|Math]]
**Ejercicio 2.b**
Haz que el resultado anterior se muestre con 3 decimales.
**Ejercicio 3**
Busca en la clase //Math// el método que permite elevar un número a una potencia. Escribe un programa en Java donde se introduzca por pantalla un número y la potencia a la que elevar dicho número y muestre el resultado formateado a dos decimales.
**Ejercicio 4**
Escribe un programa en Java con una constante de tipo //String// con el valor " hola mundo "
Haz que se muestre por pantalla la frase en mayúsculas y sin espacios en blanco al principio y final de la cadena.
**Ejercicio 5.a**
Utiliza la clase [[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Random.html|Random]] para generar un número entero aleatorio entre 0 y 9
**Ejercicio 5.b**
Modifica la aplicación anterior para que el usuario introduzca el mínimo y el máximo entre los que se generará el número entero aleatorio.