Saltar al contenido principal

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;
  • && produce true cuando se cumplen las dos expresiones.
  • || produce true cuando se cumple al menos una.
  • ! invierte un valor booleano: true pasa a false y 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.