Variables en Java ejercicios — IMC, segundos y el inventario de la copistería (y el porcentaje que se quedaba en 100)
En la práctica de variables en Java provocamos las tres trampas del tema a propósito: la división entera, el desbordamiento y el == con textos. Ahora te toca a ti, con un giro: aquí no van a ser las protagonistas. Aparecen como herramientas (o como obstáculos) dentro de problemas normales, que es como aparecen en los exámenes.
Lo que me pasó con el ejercicio 2 la primera vez que lo hice: el desglose en días, horas y minutos me salió perfecto y el porcentaje del día se quedaba clavado en 100,00 %, pusiera los segundos que pusiera por encima de un día. Lo tienes en el «¿Qué falla aquí?».
Tabla de Contenidos
Cómo usar este artículo
Hay tres ejercicios de nivel creciente. Cada uno tiene su enunciado, la salida que debe dar tu programa (es la salida real de la solución) y una caja con pistas. Intenta cada uno al menos diez minutos antes de abrir la pista, y la pista antes que la solución. Después, el «¿Qué falla aquí?» con tres errores muy frecuentes, las soluciones comentadas, un cuestionario tipo examen y el chuletario del tema.
Como en la práctica, los datos van escritos en el programa: todavía no usamos Scanner, if ni bucles (llegan en el control de flujo y en los bucles). Eso obliga a resolverlo todo con variables, operadores y tipos, que es justo lo que hay que dominar ahora.
Nivel básico
Ejercicio 1: calculadora de IMC
Escribe un programa que, para un peso de 70 kg y una altura de 1,75 m, calcule el Índice de Masa Corporal, el rango de peso saludable para esa altura y a qué categoría pertenece. Como aún no tenemos if, cada categoría se muestra como un boolean (true en la que toca).
- IMC = peso / (altura × altura).
- Rango saludable: IMC entre 18,5 y 24,9. El peso mínimo es 18,5 × altura² y el máximo, 24,9 × altura².
- Categorías: bajo peso (< 18,5), normopeso (de 18,5 a menos de 25), sobrepeso (de 25 a menos de 30) y obesidad (30 o más).
Salida esperada:
=== CALCULADORA DE IMC === Peso (kg): 70.0 Altura (m): 1.75 IMC: 22,86 Peso saludable: entre 56,7 kg y 76,3 kg Bajo peso: false Normopeso: true Sobrepeso: false Obesidad: false
altura^2 no es una potencia: ^ en Java es el XOR de bits, y con un double ni siquiera compila. Multiplica altura * altura o usa Math.pow(altura, 2). Una comparación como imc >= 18.5 && imc < 25 ya es un boolean: guárdala en una variable y súbela con println. Los límites 18,5 y 24,9 van bien como constantes final.
Nivel intermedio
Ejercicio 2: conversor de tiempo
Escribe un programa que descomponga 90061 segundos en días, horas, minutos y segundos, lo muestre también en formato de reloj (1 d 01:01:01), calcule qué porcentaje de un día completo representan y, para comprobar, vuelva a calcular el total a partir de las cuatro piezas.
Salida esperada:
=== CONVERSOR DE TIEMPO === Segundos totales: 90061 1 d, 1 h, 1 min y 1 s Formato reloj: 1 d 01:01:01 Porcentaje de un día: 104,24 % Comprobación: 90061 segundos
Todo el desglose es división entera y resto: primero los días (/ 86400), y con lo que sobra (% 86400), las horas, y así hacia abajo. No necesitas ningún double hasta el porcentaje, y ahí el cast va antes de dividir. Para que las horas salgan con dos cifras (01), printf con %02d. Y para escribir un % en un printf, %%.
Desafío final
Ejercicio 3: el inventario de la copistería
La copistería de la facultad tiene tres productos (precios inventados):
| Producto | Precio base | Unidades |
|---|---|---|
| Portátil | 899,99 € | 5 |
| Ratón | 29,99 € | 23 |
| Teclado | 79,99 € | 12 |
Escribe un programa que muestre una tabla con el precio base, el precio con IGIC (el impuesto de Canarias, un 7 % en el tipo general) y las unidades; el total de unidades; el valor del inventario (precio × unidades de cada producto, sumado) calculado de dos formas, con double y con céntimos en un long; el producto más caro y el más barato, y el precio medio por unidad. Sin arrays ni if: tres juegos de variables.
Salida esperada:
INVENTARIO DE LA COPISTERÍA Producto Base +IGIC Stock Portátil 899,99 962,99 5 Ratón 29,99 32,09 23 Teclado 79,99 85,59 12 Unidades: 40 Valor con double (println): 6149.599999999999 Valor con double (printf): 6149,60 € Valor en céntimos: 614960 → 6149,60 € Más caro: 899.99 € | más barato: 29.99 € Precio medio por unidad: 153,74 €
Para pasar un precio a céntimos, Math.round(precio * 100), que devuelve un long. El valor en céntimos se puede escribir como euros con / 100 y % 100 (cociente y resto). Para el más caro sin if, Math.max admite dos números: anida uno dentro de otro. Y fíjate bien en la línea del println con double: no es un error de tu programa.
¿Qué falla aquí?
Tres fragmentos con errores muy frecuentes. Antes de leer la explicación, decide qué imprime cada uno (o si compila).
Fragmento 1: el porcentaje que se queda en 100
public class Porcentaje {
public static void main(String[] args) {
int segundos = 90061;
double porcentaje = segundos / 86400 * 100;
System.out.printf("%.2f %%%n", porcentaje);
}
}
Lo que imprime:
100,00 %
segundos / 86400 son dos int: 90061 / 86400 = 1. Después, 1 × 100 = 100, que se guarda en el double como 100.0. Que la variable sea double no ayuda, porque la división ya se ha hecho entera. El arreglo es convertir antes de dividir: (double) segundos / 86400 * 100, que da 104,24. Este era mi 100,00 % del principio.
Fragmento 2: el valor del stock
public class ValorStock {
public static void main(String[] args) {
double precio = 29.99;
int stock = 23;
int valor = precio * stock;
System.out.println(valor);
}
}
Lo que dice javac:
ValorStock.java:5: error: incompatible types: possible lossy conversion from double to int
int valor = precio * stock;
^
1 error
precio * stock es double × int, y el resultado es double (689,77). Guardarlo en un int perdería los céntimos, y Java no lo hace sin permiso. Hay dos arreglos, según lo que quieras: double valor = precio * stock; si quieres el importe, o trabajar en céntimos (long cent = Math.round(precio * 100) * stock;) si quieres un entero exacto. El cast (int) (precio * stock) compilaría, pero tiraría los 77 céntimos.
Fragmento 3: el usuario que no coincide
public class Usuario {
public static void main(String[] args) {
String nombre = "laura";
String usuario = nombre.substring(0, 1) + "santana";
System.out.println(usuario);
System.out.println(usuario == "lsantana");
}
}
Lo que imprime:
lsantana false
La primera línea demuestra que el texto es lsantana. Y aun así, == da false: usuario se ha construido al ejecutar con substring y +, así que es un objeto nuevo, distinto del literal "lsantana". == compara las flechas, no las letras. Arreglo: usuario.equals("lsantana").
Soluciones comentadas
Solución del ejercicio 1
/** Ejercicio 1: IMC con datos fijos y la clasificación con booleanos (sin if, que llega en el tema siguiente). */
public class CalculadoraIMC {
public static void main(String[] args) {
final double IMC_MIN = 18.5; // límites del rango saludable
final double IMC_MAX = 24.9;
double peso = 70; // el int 70 se convierte solo en 70.0
double altura = 1.75;
double imc = peso / (altura * altura); // altura^2 en Java sería otra cosa (XOR)
double pesoMin = IMC_MIN * altura * altura;
double pesoMax = IMC_MAX * altura * altura;
boolean bajoPeso = imc < IMC_MIN;
boolean normopeso = imc >= IMC_MIN && imc < 25;
boolean sobrepeso = imc >= 25 && imc < 30;
boolean obesidad = imc >= 30;
System.out.println("=== CALCULADORA DE IMC ===");
System.out.println("Peso (kg): " + peso);
System.out.println("Altura (m): " + altura);
System.out.printf("IMC: %.2f%n", imc);
System.out.printf("Peso saludable: entre %.1f kg y %.1f kg%n", pesoMin, pesoMax);
System.out.println("Bajo peso: " + bajoPeso);
System.out.println("Normopeso: " + normopeso);
System.out.println("Sobrepeso: " + sobrepeso);
System.out.println("Obesidad: " + obesidad);
}
}
Por qué está escrita así:
double peso = 70;: el70es unint, pero cabe en undoubley Java lo convierte solo (widening). Por eso la salida dice70.0.- Las constantes
IMC_MINeIMC_MAXevitan escribir 18.5 y 24.9 en varios sitios: si cambiara el criterio, se cambia una línea. imc >= IMC_MIN && imc < 25: para normopeso usamos< 25y no<= 24.9. ¿Por qué? Porque un IMC de 24,95 no es ni normopeso (pasa de 24,9) ni sobrepeso (no llega a 25): se quedaría sin categoría. Con< 25no hay huecos entre las categorías.
Cuentas a mano: 1,75 × 1,75 = 3,0625; 70 / 3,0625 = 22,857… → 22,86. Peso mínimo: 18,5 × 3,0625 = 56,66 → 56,7; máximo: 24,9 × 3,0625 = 76,26 → 76,3. (La versión anterior de este artículo decía 80,1 kg: estaba mal, no salía de su propia fórmula.)
Solución del ejercicio 2
/** Ejercicio 2: descomponer 90061 segundos con / y %, y el porcentaje de un día con el cast en su sitio. */
public class ConversorTiempo {
public static void main(String[] args) {
final int SEG_DIA = 24 * 60 * 60; // 86400: que lo calcule Java
final int SEG_HORA = 60 * 60; // 3600
int totalSegundos = 90061;
int dias = totalSegundos / SEG_DIA; // días completos
int resto = totalSegundos % SEG_DIA; // lo que sobra tras quitar los días
int horas = resto / SEG_HORA;
resto = resto % SEG_HORA; // reutilizamos resto
int minutos = resto / 60;
int segundos = resto % 60;
double porcentaje = (double) totalSegundos / SEG_DIA * 100; // cast ANTES de dividir
int vuelta = dias * SEG_DIA + horas * SEG_HORA + minutos * 60 + segundos;
System.out.println("=== CONVERSOR DE TIEMPO ===");
System.out.println("Segundos totales: " + totalSegundos);
System.out.printf("%d d, %d h, %d min y %d s%n", dias, horas, minutos, segundos);
System.out.printf("Formato reloj: %d d %02d:%02d:%02d%n", dias, horas, minutos, segundos);
System.out.printf("Porcentaje de un día: %.2f %%%n", porcentaje);
System.out.println("Comprobación: " + vuelta + " segundos");
}
}
La traza del desglose, paso a paso:
| Paso | Cuenta | Resultado | Lo que queda en resto |
|---|---|---|---|
| Días | 90061 / 86400 | 1 | 90061 % 86400 = 3661 |
| Horas | 3661 / 3600 | 1 | 3661 % 3600 = 61 |
| Minutos | 61 / 60 | 1 | — |
| Segundos | 61 % 60 | 1 | — |
Decisiones de diseño:
SEG_DIA = 24 * 60 * 60en lugar de escribir 86400: Java hace la cuenta (no te equivocas) y el nombre explica qué es. Aquí no hay riesgo de desbordamiento: 86400 cabe de sobra en unint.restose reutiliza: primero guarda lo que sobra tras los días y luego lo que sobra tras las horas. Ahorra variables, pero no lo hagas si complica la lectura.- El porcentaje: (double) 90061 / 86400 = 1,04237… × 100 = 104,24 %.
- La línea de comprobación recompone el total: 1 × 86400 + 1 × 3600 + 1 × 60 + 1 = 90061. Si alguna vez no cuadra, el fallo está en el desglose.
Solución del ejercicio 3
/**
* Desafío: inventario de tres productos de la copistería de la facultad (precios inventados, IGIC del 7 %).
* Sin arrays ni if: tres juegos de variables, Math.max/Math.min y las cuentas en céntimos.
*/
public class Tienda {
public static void main(String[] args) {
final double IGIC = 0.07; // impuesto de Canarias, tipo general
String nombre1 = "Portátil"; double precio1 = 899.99; int stock1 = 5;
String nombre2 = "Ratón"; double precio2 = 29.99; int stock2 = 23;
String nombre3 = "Teclado"; double precio3 = 79.99; int stock3 = 12;
// Valor del inventario con double: precio * stock y suma
double valorDouble = precio1 * stock1 + precio2 * stock2 + precio3 * stock3;
// Lo mismo en céntimos (long): enteros exactos
long cent1 = Math.round(precio1 * 100); // 89999
long cent2 = Math.round(precio2 * 100); // 2999
long cent3 = Math.round(precio3 * 100); // 7999
long valorCent = cent1 * stock1 + cent2 * stock2 + cent3 * stock3;
double masCaro = Math.max(precio1, Math.max(precio2, precio3));
double masBarato = Math.min(precio1, Math.min(precio2, precio3));
int unidades = stock1 + stock2 + stock3;
System.out.println("INVENTARIO DE LA COPISTERÍA");
System.out.printf("%-10s %9s %9s %6s%n", "Producto", "Base", "+IGIC", "Stock");
System.out.printf("%-10s %9.2f %9.2f %6d%n", nombre1, precio1, precio1 * (1 + IGIC), stock1);
System.out.printf("%-10s %9.2f %9.2f %6d%n", nombre2, precio2, precio2 * (1 + IGIC), stock2);
System.out.printf("%-10s %9.2f %9.2f %6d%n", nombre3, precio3, precio3 * (1 + IGIC), stock3);
System.out.println("Unidades: " + unidades);
System.out.println("Valor con double (println): " + valorDouble);
System.out.printf("Valor con double (printf): %.2f €%n", valorDouble);
System.out.println("Valor en céntimos: " + valorCent + " → " + valorCent / 100 + "," + valorCent % 100 + " €");
System.out.println("Más caro: " + masCaro + " € | más barato: " + masBarato + " €");
System.out.printf("Precio medio por unidad: %.2f €%n", (double) valorCent / unidades / 100);
}
}
Lo que hay que mirar de la salida:
- El
printlndeldoubledice6149.599999999999. Las cuentas son 899,99 × 5 = 4499,95; 29,99 × 23 = 689,77; 79,99 × 12 = 959,88; total, 6149,60. Pero 899,99 no se puede guardar exacto en binario (como 1/3 no se puede escribir exacto en decimal), y los pequeños errores se acumulan.printfcon%.2fredondea y lo esconde (6149,60), pero el número guardado es el otro. - En céntimos, el resultado es exacto: 89999 × 5 + 2999 × 23 + 7999 × 12 = 449995 + 68977 + 95988 = 614960. Para escribirlo en euros,
valorCent / 100da 6149 (división entera) yvalorCent % 100da 60. Math.max(precio1, Math.max(precio2, precio3)): el de dentro elige el mayor de 2 y 3; el de fuera, el mayor entre ese y el 1. Lo mismo conMath.min. Sinif, solo podemos saber el precio, no el nombre del producto; conif(tema siguiente) se puede guardar también el nombre.- El precio medio por unidad:
(double) valorCent / unidades / 100= 614960 / 40 / 100 = 153,74 €. El cast va delante para que la primera división ya sea con decimales. - Los precios con IGIC: 899,99 × 1,07 = 962,99; 29,99 × 1,07 = 32,09; 79,99 × 1,07 = 85,59 (redondeados por
printf).
Escribir los euros como valorCent / 100 + "," + valorCent % 100 funciona aquí porque el resto es 60. Si fuera 5, saldría 6149,5 en lugar de 6149,05. Con printf("%d,%02d", valorCent / 100, valorCent % 100) el cero de delante queda garantizado.
Cuestionario tipo examen
Ahora ponte a prueba como en el examen. El cuestionario de Java de FP2 es así: 15 preguntas en 15 minutos sobre todo el temario de Java, de respuesta única, múltiple (los fallos restan), verdadero o falso, huecos, relacionar, respuesta corta y «¿qué imprime este código?». Aquí tienes 11 preguntas originales sobre variables y tipos en Java. Contesta sin ejecutar nada, pulsa Comprobar y lee la explicación de cada una. Estas preguntas son también el banco del simulacro de teoría de FP2, que las mezclará con las de los demás temas de Java.
¿Cuáles de estos tipos primitivos guardan números enteros (sin decimales)?
byteshortintlongdoublefloatboolean
Solución
Respuesta: byte · short · int · long
Los cuatro enteros se diferencian en el tamaño: byte (8 bits), short (16), int (32, el normal) y long (64, para números muy grandes, con L al final del literal). float y double son para decimales.
¿Cómo se llama la clase envoltorio (wrapper) del tipo primitivo char?
Solución
Respuesta: Character
Cada primitivo tiene su clase: int → Integer, char → Character, double → Double, boolean → Boolean… Se necesitan, por ejemplo, para meter números en una colección (List<Integer>) y traen métodos útiles como Character.isDigit(c).
¿Qué imprime este fragmento?
int a = 7, b = 2; double c = a / b; double d = (double) a / b; System.out.println(c + " " + d);
Solución
Respuesta: 3.0 3.5
a / b son dos int, así que la división es entera: 7 / 2 = 3, y solo después se guarda en el double como 3.0. En d, el cast convierte a en 7.0 antes de dividir, y 7.0 / 2 = 3.5. El error típico es pensar que basta con que la variable de destino sea double.
¿Qué imprime este fragmento? (Escribe la salida en una línea.)
System.out.print('A' + 1);
System.out.print(" ");
System.out.println("" + 'A' + 1);Solución
Respuesta: 66 A1
Un char es, por dentro, un número (el código de 'A' es 65). 'A' + 1 es una suma de números: 66. En la segunda línea, "" + 'A' ya es el texto "A" y el 1 se pega detrás: A1. Empezar con "" es un truco para forzar la concatenación.
¿Cuál de estas declaraciones NO compila?
int n = 3.5;double x = 3;long g = 5000000000L;float f = 2.5f;
Solución
Respuesta: int n = 3.5;
Java convierte solo hacia tipos «más grandes» (de int a long o a double). Hacia uno más pequeño exige que lo pidas con un cast, para que quede claro que aceptas perder los decimales o desbordarte.
Indica si es verdadero o falso:
- Una variable declarada
intno puede guardar después unString. - Una variable
final int MAX = 10;no se puede volver a asignar. - Con
var n = 5;el compilador deduce quenes unint. - Una variable local sin inicializar vale 0 y se puede usar sin problema.
- Un
booleanse puede usar como un número (0 o 1), como en C.
Solución
- V — Una variable declarada
intno puede guardar después unString. - V — Una variable
final int MAX = 10;no se puede volver a asignar. - V — Con
var n = 5;el compilador deduce quenes unint. - F — Una variable local sin inicializar vale 0 y se puede usar sin problema.
- F — Un
booleanse puede usar como un número (0 o 1), como en C.
Java tiene tipado estático: el tipo se decide al declarar y no cambia (var solo ahorra escribirlo; el tipo sigue fijo). Las variables locales no tienen valor por defecto: usarlas sin asignarles nada da el error variable might not have been initialized. Y boolean solo admite true y false.
¿Qué imprime este fragmento?
int x = Integer.MAX_VALUE; x = x + 1; System.out.println(x == Integer.MIN_VALUE);
Solución
Respuesta: true
Un int tiene 32 bits: su máximo es 2 147 483 647. Al sumarle 1 no salta ningún error: el valor se desborda y da la vuelta al mínimo (−2 147 483 648). Por eso, para números muy grandes se usa long.
Completa cómo se lee un dato del teclado:
Primero se importa java.util.____. Después se crea el lector con new Scanner(____). Un entero se lee con ____() y una línea entera de texto con ____().
Palabras:
- System.out
- readLine
- nextLine
- System.in
- nextInt
- nextString
- Scanner
Solución
Primero se importa java.util.Scanner. Después se crea el lector con new Scanner(System.in). Un entero se lee con nextInt() y una línea entera de texto con nextLine().
System.in es la entrada estándar (el teclado) y System.out, la salida. Scanner tiene un nextX() por tipo (nextInt, nextDouble, nextBoolean…) y nextLine() para la línea completa. No existen readLine ni nextString en Scanner.
Relaciona cada literal con su tipo:
42 | |
42L | |
4.2 | |
4.2f | |
'4' | |
"42" |
Definiciones:
- int
- char
- String
- boolean
- double
- float
- long
Solución
42→ int42L→ long4.2→ double4.2f→ float'4'→ char"42"→ String
Un número entero sin nada más es int; con L, long. Un número con punto es double salvo que lleve f. Las comillas simples encierran un carácter (char) y las dobles, un texto (String).
¿Qué imprime este fragmento?
String s = "12"; int n = Integer.parseInt(s) + 3; System.out.println(s + 3 + " " + n);
Solución
Respuesta: 123 15
Integer.parseInt("12") convierte el texto en el número 12, así que n vale 15. Pero s + 3 es texto más número: se concatena y sale 123. Es el equivalente a int(s) de Python.
¿Qué imprime esta línea?
System.out.println((int) 9.99 + (int) -2.7);
787.2910
Solución
Respuesta: 7
El cast a int trunca: quita los decimales y se acerca al cero, tanto en positivos como en negativos. Si quieres redondear, Math.round(9.99) da 10.
Míralo paso a paso en Python Tutor
pythontutor.com ejecuta el código línea a línea y enseña el valor de cada variable. Elige Java y pega esta versión del ejercicio 2 con el fragmento 1 dentro:
public class TiempoTutor {
public static void main(String[] args) {
int total = 90061;
int dias = total / 86400;
int resto = total % 86400;
int horas = resto / 3600;
resto = resto % 3600;
int minutos = resto / 60;
int segundos = resto % 60;
double mal = total / 86400 * 100;
double bien = (double) total / 86400 * 100;
System.out.println(dias + " " + horas + " " + minutos + " " + segundos);
System.out.println(mal + " " + bien);
}
}
Salida:
1 1 1 1 100.0 104.2372685185185
Qué observar:
- Mira cómo
restocambia de valor: primero 3661 y, trasresto = resto % 3600;, 61. Es la tabla de traza de la solución. - En
double mal = total / 86400 * 100;el valor aparece como100.0: la división entera ya había dejado un 1. - En
double bien = …aparece104.2372685185185, con todos sus decimales.printflos redondearía a 104,24. - Fíjate en que
dias,horas,minutosysegundossoninten todo momento: el desglose no necesita ni un decimal.
Chuletario: variables en Java
Lo esencial en 30 segundos: cada variable tiene un tipo fijo (int, double, char, boolean, String…). Java calcula con el tipo de los operandos, así que int / int trunca y un int que se pasa de 2.147.483.647 da la vuelta. Subir de tipo es automático; bajar exige cast y trunca. Los textos se comparan con equals().
| Quiero… | Código | Resultado |
|---|---|---|
| Una media con decimales | (7 + 8) / 2.0 | 7.5 |
| Lo mismo con cast | (double) (7 + 8) / 2 | 7.5 |
| El error típico | (double) ((7 + 8) / 2) | 7.0 |
| Un porcentaje entero | 25 / 100.0 * 372 | 93.0 |
| Cociente y resto | 30630 / 4 y 30630 % 4 | 7657 y 2 |
| Quitar decimales | (int) 9.99 | 9 |
| Redondear | Math.round(9.99) | 10 (long) |
| Redondear a 1 decimal | Math.round(7.14 * 10) / 10.0 | 7.1 |
| Un número grande | 365L * 24 * 60 * 60 * 1000 | 31536000000 |
| Letra siguiente | (char) ('L' + 1) | 'M' |
| Cifra de texto a número | '7' - '0' | 7 |
| Texto a número | Integer.parseInt("24") | 24 |
| Comparar textos | a.equals(b) | true si son iguales |
Plantillas de los ejercicios:
// Desglose con / y %
int dias = total / 86400; int resto = total % 86400;
int horas = resto / 3600; resto = resto % 3600;
int minutos = resto / 60; int segundos = resto % 60;
// Dinero en céntimos
long cent = Math.round(precio * 100);
long valor = cent * unidades;
System.out.printf("%d,%02d €%n", valor / 100, valor % 100);
// Clasificar sin if: un boolean por categoría
boolean normopeso = imc >= 18.5 && imc < 25;
| Síntoma | Causa probable |
|---|---|
La media sale con .0 y sin la mitad | División entre dos int |
| Un porcentaje o un descuento sale 0 | n / 100 con n entero |
| Un número enorme sale negativo | Desbordamiento de int: long y L |
integer number too large | Literal long sin L |
possible lossy conversion from double to int | Falta un cast (o el tipo de la variable está mal) |
Dos textos iguales dan false | Comparados con == en lugar de equals() |
NumberFormatException: For input string: "15,50" | parseDouble con coma decimal |
6149.599999999999 en lugar de 6149,60 | double no es exacto: céntimos o printf |
Antes de entregar, pregúntate:
- ¿Hay alguna división cuyos dos lados sean enteros? ¿Quiero decimales ahí?
- ¿Alguna cuenta puede pasar de 2.000 millones?
- ¿He usado
(int)donde quería redondear? - ¿He comparado algún
Stringcon==?
Si quieres seguir, el siguiente tema es el control de flujo en Java: con if y switch, el IMC podrá decir directamente «Normopeso» y la copistería, qué producto es el más caro.
¿Te ha servido este artículo? Así puedes apoyar SergioLearns →




Simulacro del examen práctico de IC2 — diagrama de flujo, fork e hilos en C (y las capturas que no pueden faltar)