Operadores y conversiones
Guardar datos es solo el comienzo. Para obtener información nueva necesitamos combinarlos: calcular un total, repartir unidades o comprobar si un valor supera un límite.
Calcular con números
int a = 10;
int b = 3;
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3
System.out.println(a % b); // 1
% devuelve el resto. Resulta útil para saber, por ejemplo, cuántas unidades quedan después de formar grupos completos.
La división entera
Al dividir dos int, Java produce otro entero y descarta la parte decimal:
int total = 10;
int personas = 4;
double repartoIncorrecto = total / personas; // 2.0
double repartoCorrecto = (double) total / personas; // 2.5
El tipo de la variable de destino no cambia cómo se hizo la operación. Convertimos un operando antes de dividir.
Precedencia y paréntesis
Java multiplica y divide antes de sumar y restar:
int resultado = 2 + 3 * 4; // 14
int agrupado = (2 + 3) * 4; // 20
Usa paréntesis cuando expresen mejor la intención, aunque conozcas la precedencia.
Asignar y actualizar
int puntos = 10;
puntos += 5; // equivale a puntos = puntos + 5
puntos -= 2;
puntos++; // suma uno
puntos--; // resta uno
En Java 0 los usaremos como actualizaciones sencillas, sin combinar varios incrementos en una misma expresión.
Texto y números
El operador + también concatena texto:
String producto = "Té";
double precio = 3.5;
System.out.println(producto + ": " + precio + " €");
El orden importa:
System.out.println("Total: " + 2 + 3); // Total: 23
System.out.println("Total: " + (2 + 3)); // Total: 5
Comparar valores
Las comparaciones producen un boolean:
int edad = 20;
boolean esMayor = edad >= 18;
boolean tieneEdadExacta = edad == 20;
boolean esDistinta = edad != 16;
Disponemos de >, <, >=, <=, == y !=. = asigna; == compara.
Combinar valores booleanos
Los operadores lógicos permiten combinar o invertir expresiones cuyo resultado ya es boolean:
int edad = 20;
boolean mayorDeEdad = edad >= 18;
boolean tieneEntrada = true;
boolean puedeEntrar = mayorDeEdad && tieneEntrada;
boolean cumpleAlguna = mayorDeEdad || tieneEntrada;
boolean noTieneEntrada = !tieneEntrada;
&&producetruecuando se cumplen las dos expresiones.||producetruecuando se cumple al menos una.!invierte un valor booleano:truepasa afalsey viceversa.
Aquí solo estamos construyendo resultados booleanos. En JV0-06 los utilizaremos para tomar decisiones con condicionales.
Conversiones numéricas
Java permite realizar algunas conversiones numéricas automáticamente, sin escribir un cast. En este curso utilizaremos como ejemplo la conversión de int a double:
int unidades = 12;
double unidadesDecimales = unidades; // 12.0
Que Java permita una conversión automática no significa que todas esas conversiones sean siempre exactas: con determinados tipos y valores puede perderse precisión.
Para convertir de double a int, en cambio, necesitamos un casting explícito:
double precio = 19.95;
int eurosCompletos = (int) precio; // 19
El casting a int descarta la parte decimal; no redondea. Escribirlo hace visible que aceptamos esa pérdida de información.
long grande = 3_000_000_000L;
int reducido = (int) grande;
Este último ejemplo compila, pero el valor no cabe en int y el resultado se desborda. Que un casting sea posible no significa que sea correcto para el problema.
Práctica: precio por persona
Una compra cuesta 47.50 euros y se reparte entre 4 personas. Calcula el importe individual y comprueba si supera 10 euros.
Solución razonada:
public class Reparto {
public static void main(String[] args) {
double total = 47.50;
int personas = 4;
double porPersona = total / personas;
boolean superaDiez = porPersona > 10;
System.out.println("Por persona: " + porPersona);
System.out.println("Supera 10 €: " + superaDiez);
}
}
La salida es 11.875 y true. Usamos double desde el principio porque el total admite decimales.
Práctica: predice y corrige
int aprobados = 7;
int estudiantes = 10;
double proporcion = aprobados / estudiantes;
¿Qué valor obtiene y cómo conseguirías 0.7?
Solución: obtiene 0.0, porque 7 / 10 es una división entera cuyo resultado es 0. Podemos escribir double proporcion = (double) aprobados / estudiantes;.
Ya sabemos transformar datos. En la siguiente unidad dejaremos de fijarlos en el código y los pediremos al usuario.