- Aprender
- Informática
- Programación
- Programación orientada a objetos con Java
- Primeros programas en Java
Primeros programas en Java
PrincipianteUnidad 1 de 11 del curso Curso de Programación orientada a objetos con Java
Lo que aprenderás
- Crea un programa Java completo en torno a un método main, conviértelo en un programa ejecutable con el compilador y el lanzador de Java, corrige los errores que impiden su ejecución e imprime texto exactamente como se pretende.
- Estructura un programa en torno al método mainReconoce las partes de un programa Java mínimo, coloca las sentencias correctamente dentro del método main y sigue las reglas de nombres, llaves, puntos y coma y comentarios.
- Compila, ejecuta y corrige erroresConvierte código fuente en un programa ejecutable con el JDK y distingue los errores en tiempo de compilación, los errores en tiempo de ejecución y los errores lógicos para poder encontrar y corregir cada uno.
- Imprime texto con print y printlnImprime texto y valores en la pantalla línea por línea, controla dónde comienzan las nuevas líneas y utiliza secuencias de escape para comillas, tabulaciones y barras invertidas.
- Estructura un programa en torno al método main
- Declara y actualiza variables, elige un tipo primitivo adecuado para cada valor y almacena y combina texto en valores String.
- Declara variables, asígnales valores y actualízalasCrea variables con un tipo y un nombre, asígnales valores, sigue las reglas de nombres y predice el valor de cada variable durante la ejecución de un programa.
- Elige un tipo primitivo y escribe literalesElige el tipo primitivo adecuado para números enteros, números decimales, caracteres y valores de verdad, escribe literales de cada tipo y reconoce cuándo un valor no cabe en su tipo.
- Almacena texto y únelo mediante concatenaciónAlmacena texto en variables String y construye la salida uniendo cadenas, números y variables con el operador +, prediciendo exactamente qué se imprimirá.
- Declara variables, asígnales valores y actualízalas
- Escribe expresiones aritméticas que Java evalúe en el orden deseado, utiliza correctamente la división entera y el resto, y calcula con números decimales y la clase Math.
- Escribe expresiones con operadores y respeta su precedenciaCombina valores con los operadores aritméticos, predice el orden en que Java los evalúa y actualiza variables mediante asignación compuesta e incremento.
- Utiliza la división entera y el restoPredice los resultados de / y % con números enteros, utilízalos para descomponer cantidades en unidades y reconoce la división por cero.
- Calcula con números decimales y la clase MathCalcula con valores double, utiliza los métodos ya disponibles de la clase Math para raíces, potencias y redondeo, y presenta resultados con un número razonable de decimales.
- Escribe expresiones con operadores y respeta su precedencia
- Predice qué conversiones realiza Java automáticamente, escribe conversiones explícitas cuando una conversión pueda perder información y convierte texto en números y números en texto.
- Amplía valores y realiza conversiones explícitas de tipoDistingue las conversiones de ampliación automáticas de las conversiones de reducción que necesitan una conversión explícita, coloca estas conversiones para que los cálculos den el resultado deseado y predice qué efecto tienen sobre un valor.
- Convierte texto en números y números en textoConvierte cadenas que contienen números en valores int y double, convierte números en cadenas y reconoce el error que produce Java cuando el texto no es un número válido.
- Amplía valores y realiza conversiones explícitas de tipo
- Lee texto y números escritos por el usuario, presenta resultados con un formato claro y combina entrada, cálculo y salida en pequeños programas probados.
- Lee datos de entrada con ScannerCrea un Scanner para la entrada por teclado, lee líneas, palabras y números con el método adecuado y evita los problemas habituales con los fines de línea, los datos incorrectos y los separadores decimales.
- Da formato a la salida con printfImprime números con un número fijo de decimales y alinea la salida en columnas con printf y String.format, y comprende cómo la configuración de la computadora cambia el separador decimal.
- Combina entrada, cálculo y salidaPlanifica, escribe y prueba programas completos que lean valores, calculen con ellos utilizando los tipos adecuados e impriman resultados claros.
- Lee datos de entrada con Scanner
Guía de estudio de Primeros programas en Java
1Escribe, compila y ejecuta un programa Java
Un programa Java comienza como texto, pero la computadora necesita una estructura precisa para poder ejecutar ese texto como instrucciones. Crea una pequeña clase en torno a un método main y sigue después el código fuente durante la compilación y la ejecución. Los mensajes impresos hacen visible cada paso. Cuando algo falla, la etapa en que falla te indica si debes revisar el código fuente, leer una excepción en tiempo de ejecución o comparar el resultado con el esperado.
1.1 Estructura un programa en torno al método main
Un primer programa Java da a la computadora una breve lista de instrucciones. La clase que las contiene y el método main indican a Java dónde van esas instrucciones y dónde comienza la ejecución.
Coloca las instrucciones dentro de main
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
Las llaves exteriores encierran el cuerpo de la clase. Las llaves interiores encierran el cuerpo del método. Cuando este programa comienza, Java ejecuta la primera sentencia dentro de main. Las demás sentencias colocadas debajo se ejecutan de arriba abajo. Cuando main finaliza, este pequeño programa termina.
Copia public static void main(String[] args) con cuidado. Aquí, public permite al lanzador llamar al método, static permite ejecutarlo sin crear primero un objeto y void indica que el método no devuelve ningún resultado. String[] args recibe las palabras escritas en la línea de comandos después del nombre del programa. Puedes imprimir un mensaje sin utilizar esas palabras.
Haz coincidir la puntuación y los nombres
Una sentencia como System.out.println("Hi"); termina con un punto y coma. Una llave de apertura { necesita una llave de cierre }. Las cabeceras de clase y método mostradas arriba abren bloques; no sustituyas esas llaves de apertura por puntos y coma. Aplicar a la sentencia una sangría cuatro espacios mayor que la de la cabecera del método hace visible su posición dentro de este.
Guarda public class Hello en Hello.java. El nombre de la clase pública y la parte anterior a .java deben coincidir exactamente, incluidas las mayúsculas. Si la declaración dice public class Other, el archivo debe ser Other.java. Un mensaje del compilador que indica que la clase debe declararse en otro archivo señala esta falta de coincidencia.
Java distingue mayúsculas y minúsculas. El nombre System debe empezar con S mayúscula; system.out.println("Hi"); no se compila. Un método llamado Main es distinto de main. Una clase que solo contiene Main puede compilarse, pero el lanzador no encuentra el método de entrada previsto al ejecutarla.
Haz que el código sea legible
Utiliza una sentencia por línea y cuatro espacios de sangría por cada nivel de llaves. La mayoría de los espacios y saltos de línea entre elementos del código no afectan a la compilación. Los espacios dentro del texto entre comillas sí afectan a la salida. Por convención, los nombres de clases usan PascalCase, como en TravelTime.
Un comentario explica el código a las personas. Java ignora todo lo que sigue a // en esa línea. Un comentario de bloque comienza con /* y termina con */, y puede abarcar varias líneas. Un comentario útil explica una razón, como // Convert hours to seconds, junto a una conversión cuyo propósito podría no estar claro.
Reconoce la forma más corta
Java 25 y versiones posteriores también admiten un archivo fuente compacto:
void main() {
IO.println("Hello, world!");
}
Esta forma omite la declaración explícita de la clase. IO.println imprime una línea, y IO.readln("Your name: ") muestra una solicitud y devuelve la línea escrita. La forma clásica de clase también funciona con versiones anteriores de Java; ambas formas proporcionan un método main donde comienza la ejecución.
Puntos clave
- Coloca las sentencias ejecutables dentro del método main y empareja cada llave de apertura con una de cierre.
- Termina una sentencia, como una llamada de impresión, con un punto y coma.
- La clase pública
Hellova enHello.java; las mayúsculas importan. - Los comentarios explican el código a quienes lo leen y se ignoran durante la compilación.
- Java 25 añade una forma de código fuente compacto; la forma clásica de clase también funciona en versiones anteriores.
1.2 Compila, ejecuta y corrige errores
Escribir código fuente y ejecutar un programa son pasos distintos. Java primero comprueba y traduce tu código, y después lo ejecuta. Saber qué paso falló te ayuda a decidir dónde buscar.
Compila el código fuente y después inicia la clase
El código fuente es el texto de un archivo .java. El compilador, javac, traduce el código fuente válido a código de bytes en un archivo .class. La máquina virtual de Java (JVM) ejecuta ese código de bytes. Una JVM adecuada permite ejecutar el mismo código de bytes en distintos sistemas operativos.
Abre una terminal en la carpeta que contiene Hello.java e introduce:
javac Hello.java
java Hello
El primer comando crea Hello.class cuando la compilación tiene éxito. El segundo inicia el programa. Su argumento es el nombre de la clase, sin .class: java Hello.class pide al lanzador que busque un nombre de clase incorrecto y falla.
El JDK, o kit de desarrollo de Java, proporciona ambos comandos. Un IDE, como IntelliJ IDEA, Eclipse, NetBeans o Visual Studio Code con soporte para Java, compila e inicia el programa cuando pulsas Run. Puede señalar errores mientras escribes, pero siguen siendo errores del mismo lenguaje Java.
Desde Java 11, el modo de archivo fuente ofrece un atajo para un solo programa pequeño:
java Hello.java
Esto compila en memoria y ejecuta el código fuente sin dejar un archivo .class. Distingue las dos formas: java Hello inicia una clase compilada, mientras que java Hello.java inicia código fuente.
Interpreta los errores en tiempo de compilación
Un error en tiempo de compilación impide que la compilación termine correctamente. Por ejemplo, la falta de un punto y coma puede producir:
Hello.java:3: error: ';' expected
System.out.println("Hello")
^
El mensaje identifica el archivo, la línea y el lugar donde el compilador detectó el problema. El error real puede estar antes: una comilla sin cerrar en una línea puede confundir las líneas posteriores. Lee la línea marcada y la anterior. Corrige el primer error indicado y vuelve a compilar antes de cambiar varias líneas más. Una corrección puede eliminar muchos mensajes posteriores.
Distingue los errores en tiempo de ejecución de los resultados incorrectos
| Tipo de problema | Qué ocurre | Cómo investigarlo |
|---|---|---|
| Error en tiempo de compilación | El código fuente no puede compilarse correctamente. | Lee el primer mensaje del compilador y examina el código cercano. |
| Error en tiempo de ejecución | La ejecución se detiene con una excepción. | Lee la excepción y localiza la línea indicada. |
| Error lógico | La ejecución termina, pero el resultado es incorrecto. | Compara la salida con un resultado calculado a mano. |
Si una variable entera divisor contiene cero, 5 / divisor falla durante la ejecución con ArithmeticException: / by zero. La sentencia aritmética puede ser código fuente válido aunque sus valores en tiempo de ejecución provoquen el fallo.
Un programa que imprime una media de 8 cuando el valor correcto es aproximadamente 8,33 tiene un error lógico. Ningún mensaje del compilador puede indicarte que ese resultado es incorrecto para tu tarea. Prueba con entradas conocidas, examina los valores intermedios y encuentra el primer cálculo incorrecto.
Trabaja en un ciclo breve: editar, guardar, compilar, ejecutar, probar. Guardar importa: la compilación lee el archivo guardado, por lo que los cambios sin guardar no pueden modificar el programa compilado.
Puntos clave
javac Hello.javacompila el código fuente;java Helloejecuta la clase resultante.- El JDK proporciona comandos de desarrollo; la JVM ejecuta código de bytes.
- Corrige el primer error del compilador y vuelve a compilar antes de buscar la causa de los mensajes posteriores.
- Una excepción en tiempo de ejecución detiene la ejecución; un error lógico requiere comprobar el resultado esperado.
1.3 Imprime texto con print y println
La salida impresa es la primera forma de ver lo que hace un programa. Java te permite controlar los caracteres que imprime y el punto donde comienza la siguiente línea.
Sigue la posición de salida
System.out.print(...) escribe su valor y deja la posición de salida en la misma línea. System.out.println(...) escribe su valor y después comienza una nueva línea. Llamar a System.out.println() con los paréntesis vacíos añade solo un salto de línea.
System.out.print("Hello");
System.out.print(", ");
System.out.println("world");
System.out.println("Bye");
Las dos primeras llamadas dejan la posición después del espacio que sigue a la coma. La tercera añade world en esa posición y después pasa a una nueva línea. La salida exacta es:
Hello, world
Bye
Java no inserta espacios entre llamadas. Si eliminas el espacio de ", ", la primera línea pasa a ser «Hello,world». Un println() vacío entre las dos últimas sentencias crearía una línea en blanco entre los mensajes.
Decide si quieres texto o un valor
Un literal de cadena es texto encerrado entre comillas dobles. Imprimir "7 * 6" muestra el texto «7 * 6». Imprimir 7 * 6 evalúa la multiplicación y muestra «42». Las comillas son signos del código; no se imprimen como parte del literal.
Del mismo modo, si name almacena «Ada», System.out.println(name); muestra «Ada», mientras que System.out.println("name"); muestra «name». Utiliza la variable sin comillas cuando quieras su valor almacenado.
Las comillas simples cumplen otra función. 'A' es un valor char. 'Hello' no puede contener un mensaje de varios caracteres y provoca un error en tiempo de compilación. Utiliza "Hello" para ese texto.
Introduce caracteres especiales en una cadena
Una secuencia de escape comienza con una barra invertida y representa un carácter dentro del literal.
| Código dentro de un literal | Carácter impreso |
|---|---|
\n | Nueva línea |
\t | Tabulación |
\" | Comilla doble |
\\ | Una barra invertida |
Por ejemplo:
System.out.println("She said \"hi\"");
System.out.println("C:\\Users");
Estas sentencias muestran She said "hi" y C:\Users, en líneas separadas. Las barras invertidas adicionales indican a Java cómo interpretar el carácter siguiente; no todas se copian a la salida.
Una sola llamada también puede imprimir varias líneas:
System.out.println("Name:\tAda\nAge:\t36");
La tabulación separa la etiqueta del valor, y \n coloca la edad en la línea siguiente. La llamada a println también añade su propio salto de línea final. Una tabulación avanza hasta una posición de tabulación, por lo que su anchura visible depende del entorno de salida.
Un literal de cadena ordinario entre comillas debe abrirse y cerrarse en la misma línea del código fuente. Pulsar Enter en medio de él deja un literal sin cerrar. Para dividir un mensaje largo entre líneas del código fuente, escribe dos literales completos unidos con + o utiliza llamadas de impresión separadas.
Puntos clave
printpermanece en la línea actual;printlnañade un salto de línea después de su valor.- Las comillas indican texto literal:
"name"imprime esas letras, mientras quenameimprime el valor de la variable. - Utiliza secuencias de escape para nuevas líneas, tabulaciones, comillas y barras invertidas.
- Los espacios dentro de una cadena se imprimen exactamente; las llamadas de salida no añaden espacios de separación.
- Utiliza comillas dobles para una cadena y comillas simples para un valor
char. - Un literal de cadena ordinario se abre y se cierra en una sola línea del código fuente.
2Almacena datos en variables del tipo adecuado
Las variables permiten a un programa conservar valores entre sentencias, pero cada valor almacenado tiene un tipo. Sigue las asignaciones paso a paso para ver qué cambia y qué permanece fijo. Elige tipos para números enteros, decimales, caracteres o valores de verdad que se ajusten a los datos y después combina texto y valores en mensajes legibles. Pequeñas diferencias en la escritura de los literales o en el orden de los signos de suma pueden cambiar tanto el tipo como el resultado de una expresión.
2.1 Declara variables, asígnales valores y actualízalas
Una variable da un nombre a un valor para que las sentencias posteriores puedan utilizarlo. Su tipo indica a Java qué clase de valor puede contener; la asignación cambia el valor almacenado.
Declara e inicializa
int age;
age = 36;
La declaración presenta age como un int. La asignación almacena 36. La forma combinada int age = 36; se llama inicialización. Una variable local debe recibir un valor antes de leerla. Declarar int age; e imprimir inmediatamente age produce un error que indica que la variable podría no haberse inicializado.
Declara un nombre una sola vez en el mismo cuerpo de método. Para cambiar su valor después, escribe age = 37;, sin repetir int. Una segunda sentencia int age = 37; en ese cuerpo intenta declarar de nuevo la misma variable.
Lee la asignación de derecha a izquierda
Primero se calcula el lado derecho de =. Después Java almacena ese resultado en la variable de la izquierda:
int count = 5;
count = count + 1;
La segunda sentencia lee el valor actual 5, suma 1 y almacena 6. El signo = significa asignación, no una afirmación matemática de que un número es igual a sí mismo más uno. El lado izquierdo debe nombrar un lugar donde almacenar el valor; 36 = age; no es válido.
La asignación copia el valor en ese momento:
int a = 5;
int b = a;
a = 10;
Ahora a contiene 10 y b contiene 5. No hay un vínculo continuo que recalcule b cuando cambia a.
Sigue un intercambio
Supón que first contiene 4 y second contiene 9. La secuencia first = second; second = first; pierde el 4 en el primer paso y deja ambos valores en 9. Conserva primero el valor original:
int temp = first;
first = second;
second = temp;
| Después de la sentencia | first | second | temp |
|---|---|---|---|
int temp = first; | 4 | 9 | 4 |
first = second; | 9 | 9 | 4 |
second = temp; | 9 | 4 | 4 |
Una tabla de seguimiento registra cada variable después de cada sentencia. Para int x = 3; x = x * 2; x = x + 1;, los valores son 3, después 6 y después 7. Actualiza una fila cada vez utilizando los últimos valores almacenados.
Elige nombres útiles y tipos fijos
Los nombres pueden contener letras, dígitos, guiones bajos y signos de dólar. No pueden empezar por un dígito ni ser una palabra reservada como class. Las mayúsculas importan: total y Total son distintos. Utiliza nombres descriptivos en camelCase, como distanceKm o secondsLeft.
A una variable final solo se le puede asignar un valor una vez. final int SECONDS_PER_HOUR = 3600; da un nombre claro a un factor de conversión fijo. Reasignarle un valor impide la compilación. Por convención, las constantes usan palabras en mayúscula separadas por guiones bajos.
Desde Java 10, var puede inferir el tipo de una variable local a partir de su inicializador. var count = 10; infiere int; var price = 2.5; infiere double. El tipo inferido permanece fijo. var count; falla porque no hay un inicializador del que inferir un tipo.
Puntos clave
- Una declaración da nombre y tipo a una variable; la inicialización también le da un valor inicial.
- La asignación evalúa el lado derecho y después almacena el resultado en el lado izquierdo.
- Copiar un valor no vincula las variables; utiliza una variable temporal para intercambiar valores.
- Lee una variable local solo después de que haya recibido un valor.
finalimpide la reasignación, yvarinfiere un tipo fijo a partir de un inicializador.
2.2 Elige un tipo primitivo y escribe literales
El tipo de un valor determina su rango, la escritura de sus literales y los cálculos que Java puede realizar con él. Utiliza int para recuentos habituales y double para medidas habituales, y reconoce también los demás tipos primitivos.
Compara los ocho tipos primitivos
| Tipo | Almacenamiento y valores |
|---|---|
byte | Entero de 8 bits: de −128 a 127 |
short | Entero de 16 bits: de −32 768 a 32 767 |
int | Entero de 32 bits: de −2 147 483 648 a 2 147 483 647 |
long | Entero de 64 bits: de −9 223 372 036 854 775 808 a 9 223 372 036 854 775 807 |
float | Coma flotante de 32 bits; unas 7 cifras significativas |
double | Coma flotante de 64 bits; entre 15 y 17 cifras significativas aproximadamente |
char | Una unidad de código UTF-16 de 16 bits: de 0 a 65 535 |
boolean | true o false |
Los valores finitos de float van aproximadamente de −3,4 × 10³⁸ a +3,4 × 10³⁸; los de double van aproximadamente de −1,8 × 10³⁰⁸ a +1,8 × 10³⁰⁸. Estos amplios rangos no hacen que todos los decimales que contienen puedan representarse exactamente.
Un char suele representar un solo carácter, como 'A'. Algunos caracteres Unicode necesitan dos unidades de código UTF-16, por lo que un solo char no puede representar todos los caracteres posibles. 'A' tiene el código numérico 65, 'a' tiene 97 y '7' tiene 55. El carácter '7' es distinto del entero 7. Un boolean no es un número: boolean active = 1; falla.
Escribe los literales según sus tipos
Un literal escribe un valor directamente en el código fuente. 42 es un literal int, 42L es un long, 3.5 es un double y 3.5f es un float. Los literales de carácter usan comillas simples; los literales de cadena usan comillas dobles. Los nombres de tipos primitivos se escriben en minúscula, mientras que String empieza con mayúscula.
Escribe long large = 3000000000L;. Sin la L, ese literal entero es demasiado grande. Escribe float rate = 3.5f;: 3.5 sin sufijo tiene el tipo double, que Java no reduce a float de forma automática y silenciosa. Una constante entera que quepa puede inicializar un tipo entero más pequeño: byte b = 100; se compila, pero byte b = 200; no.
Los guiones bajos entre dígitos facilitan la lectura de un literal: 1_000_000 tiene el mismo valor que 1000000. La notación científica usa e, como en 1.5e3, que significa 1500,0. Los decimales del código fuente siempre usan un punto.
Vigila el rango de la operación
Un cálculo entero puede sufrir un desbordamiento sin producir un mensaje de error. Sumar 1 al mayor int devuelve el menor int. El producto 50_000 * 50_000 utiliza aritmética int y produce -1794967296. En 50_000L * 50_000, un operando es long, por lo que el producto es el valor correcto 2500000000.
Cambiar solo la variable que recibe el resultado a long es demasiado tarde para corregir un producto int que ya ha sufrido desbordamiento. Elige un operando suficientemente amplio antes de la multiplicación.
Los valores en coma flotante tienen otra limitación. Muchas fracciones decimales se almacenan como aproximaciones binarias: 0.1 + 0.2 imprime 0.30000000000000004. Da formato a esos resultados para mostrarlos. Los cálculos monetarios exactos pueden almacenar centavos enteros en un long; la clase BigDecimal es otra opción para decimales exactos.
Puntos clave
- Java tiene ocho tipos primitivos;
Stringes una clase. - Utiliza el sufijo de un literal para elegir
long(L) ofloat(f). - Los cálculos enteros pueden desbordarse sin avisar; amplía un operando antes del cálculo.
- Los tipos en coma flotante almacenan muchas fracciones decimales de forma aproximada.
- Un
charalmacena una unidad de código UTF-16, mientras que unbooleanalmacena un valor de verdad. - Un decimal en el código fuente utiliza un punto, incluso en una computadora que usa comas decimales.
2.3 Almacena texto y únelo mediante concatenación
Una cadena String almacena texto, incluidos espacios, dígitos, signos de puntuación o ningún carácter. El operador + puede combinar ese texto con otros valores para construir un mensaje.
Une valores en un texto
String firstName = "Ada";
String lastName = "Lovelace";
System.out.println(firstName + " " + lastName);
La salida es «Ada Lovelace». El literal del medio aporta el espacio. Sin él, firstName + lastName produciría «AdaLovelace». La concatenación no añade separadores por ti.
La concatenación consiste en unir valores en una nueva cadena. Si uno de los operandos de + es una cadena String, Java convierte el otro valor en texto y los une. Así, "Age: " + 36 se convierte en «Age: 36», y "Price: " + 2.5 se convierte en «Price: 2.5». Los dígitos del resultado forman ahora parte de un valor de texto.
String empieza con S mayúscula. A diferencia de los ocho tipos primitivos, es una clase. Escribir string name = "Ada"; con s minúscula impide la compilación. La cadena vacía "" es un texto válido sin caracteres; no es un valor ausente.
Sigue los signos de suma de izquierda a derecha
Considera:
System.out.println("Sum: " + 2 + 3);
El primer + une la cadena String y 2, y crea «Sum: 2». El segundo une esa cadena y 3, y crea «Sum: 23». Una vez que el resultado acumulado es texto, el siguiente + continúa uniendo texto.
Compara tres formas:
| Expresión | Resultado | Razón |
|---|---|---|
"Sum: " + 2 + 3 | "Sum: 23" | Hay texto en la primera suma. |
2 + 3 + " apples" | "5 apples" | La primera operación suma dos números. |
"Sum: " + (2 + 3) | "Sum: 5" | Los paréntesis hacen que la suma se realice primero. |
Utiliza paréntesis cuando un mensaje deba contener el resultado de una suma o una resta. Por ejemplo, "Diff: " + (5 - 2) da «Diff: 3». Sin los paréntesis, "Diff: " + 5 - 2 intenta restar 2 de una cadena String y no se compila.
La multiplicación y la división tienen mayor precedencia que +. La expresión "Area: " + 4 * 5 calcula primero el producto y da «Area: 20».
Construye un mensaje por etapas
String message = "Hi";
message += "!";
La variable actualizada contiene «Hi!». Para una cadena String, += añade texto al final al volver a asignar el resultado concatenado a la variable. Puedes construir un mensaje corto con varias sentencias e imprimirlo una sola vez al final.
Ten cuidado con los caracteres. Dos operandos char no activan la concatenación de cadenas. 'A' + 'B' suma sus códigos numéricos, 65 y 66, y produce el int 131. Empezar con la cadena String vacía cambia la secuencia: "" + 'A' + 'B' crea primero «A» y después «AB». Las comillas determinan los tipos de los operandos, por lo que también determinan el significado de +.
Puntos clave
- La concatenación une texto; no inserta espacios adicionales.
- Una cadena de operaciones
+avanza de izquierda a derecha después de las operaciones de mayor precedencia. - Coloca la suma o resta numérica entre paréntesis antes de unir su resultado a una etiqueta.
- Dos valores
charse suman numéricamente a menos que una cadena String ya forme parte de la operación.
3Calcula con expresiones aritméticas
Los cálculos dependen tanto del orden de las operaciones como de los tipos de sus operandos. Sigue las expresiones antes de ejecutarlas, especialmente cuando aparece una división dentro de un cálculo más amplio. La división entera y los restos descomponen cantidades en grupos o unidades de tiempo; la aritmética decimal conserva las fracciones. Los métodos ya disponibles de Math calculan raíces, potencias y redondeos, con tipos de retorno que importan al almacenar sus resultados.
3.1 Escribe expresiones con operadores y respeta su precedencia
Una expresión combina valores para producir un resultado. Java la evalúa según la precedencia de operadores y después una sentencia puede almacenar o imprimir ese resultado.
Escribe las operaciones explícitamente
Los operadores aritméticos son +, -, *, / y %: suma, resta, multiplicación, división y resto. Con int width = 4; e int height = 5;, width * height se evalúa como 20.
Toda multiplicación necesita *. La forma algebraica 2(3 + 4) no es Java válido; escribe 2 * (3 + 4). Java no tiene un operador aritmético de potencia. 2 ^ 3 significa una operación a nivel de bits y produce 1, no 8. Para elevar un valor al cuadrado, escribe x * x; para calcular otra potencia, utiliza Math.pow.
Aplica la precedencia antes de leer de izquierda a derecha
| Orden | Operadores o agrupación |
|---|---|
| Primero | Paréntesis |
| Después | Signo menos unario y conversiones explícitas |
| Después | *, /, % |
| Por último | +, - |
En el mismo nivel, estos operadores aritméticos se agrupan de izquierda a derecha. 2 + 3 * 4 es 14; (2 + 3) * 4 es 20. En 10 - 4 - 3, la primera resta da 6 y la segunda da 3. En 24 / 4 * 2, la división da 6 y la multiplicación da 12. Tratar 4 * 2 como denominador requeriría paréntesis.
Calcula correctamente una media
Supón que int a = 7, b = 8, c = 10;. La expresión a + b + c / 3 solo divide c. La división entera hace que 10 / 3 sea igual a 3 y las sumas dan después 18.
(a + b + c) / 3 agrupa el total completo, 25, pero ambos operandos de / son enteros. El resultado es 8. Utilizar (a + b + c) / 3.0 conserva la parte fraccionaria y produce 8.333333333333334.
Los tipos de los operandos determinan la aritmética. Dos operandos int producen un resultado int. Un operando double hace que el otro operando numérico se convierta en double, como en 5 * 2.0, cuyo resultado es 10.0. La variable que recibe el resultado no cambia cómo se realizó la operación anterior.
Actualiza un valor almacenado
int total = 10;
total += 5;
total *= 2;
total--;
Los valores almacenados pasan a ser 10, 15, 30 y 29. Para estos operandos int, total += 5; realiza la misma actualización que total = total + 5;. Los operadores -=, /= y %= también combinan una operación con una asignación. count++; aumenta una variable en 1, y count--; la reduce en 1. Al utilizarse como sentencias separadas, su efecto es fácil de seguir.
Una expresión como a + b no cambia ninguno de los operandos. Para utilizar su resultado, asígnalo o pásalo a una llamada de impresión: int sum = a + b; o System.out.println(a + b);. La línea aislada a + b; no se compila porque Java no permite esa expresión aritmética como sentencia independiente. Las asignaciones, los incrementos, los decrementos y las llamadas a métodos pueden aparecer por sí solos y producir efectos.
Puntos clave
- Utiliza operadores explícitos:
*multiplica y^no calcula una potencia. - Aplica primero la precedencia; en el mismo nivel aritmético, trabaja de izquierda a derecha.
- Coloca el total completo entre paréntesis antes de dividirlo para calcular una media.
- Los tipos de los operandos determinan los resultados aritméticos antes de la asignación.
- La asignación compuesta almacena un valor actualizado;
++y--como sentencias independientes lo cambian en 1.
3.2 Utiliza la división entera y el resto
La división entera responde cuántos grupos completos caben. El resto indica qué sobra. Juntas, estas operaciones descomponen una cantidad en partes útiles.
Predice el cociente y el resto
Cuando ambos operandos son enteros, / descarta la parte fraccionaria y se desplaza hacia cero. 7 / 2 es 3, 2 / 3 es 0 y -7 / 2 es −3. Esto es truncamiento, no redondeo al entero más cercano.
El operador de resto % devuelve lo que queda después de la división. 17 / 5 da 3 y 17 % 5 da 2. Tres grupos de 5 suman 15 y quedan 2. Para operandos enteros y un divisor distinto de cero, (a / b) * b + a % b reconstruye a mediante la aritmética entera de Java.
El signo de un resto distinto de cero sigue al operando izquierdo: -7 % 3 es −1, mientras que 7 % -3 es 1. Para enteros no negativos, n % 2 es 0 para valores pares y 1 para valores impares.
Descompón segundos en unidades mayores
Empieza con 3725 segundos:
int totalSeconds = 3725;
int hours = totalSeconds / 3600;
int secondsAfterHours = totalSeconds % 3600;
int minutes = secondsAfterHours / 60;
int seconds = secondsAfterHours % 60;
La primera división encuentra 1 hora completa. El resto es 125 segundos. Dividir ese resto entre 60 da 2 minutos y sobran 5 segundos. El resultado es 1 h 2 min 5 s. Reconstruir el total da 3600 segundos más 120 segundos más 5 segundos, es decir, 3725.
Utiliza el resto después de extraer las horas para encontrar los minutos de la hora actual. Dividir el total original entre 60 daría los 62 minutos completos, incluidos los minutos ya contados como una hora.
Los mismos operadores extraen dígitos decimales de un entero no negativo. 4827 % 10 da el último dígito, 7; 4827 / 10 da los dígitos iniciales restantes, 482.
Distingue los grupos completos de los recipientes suficientes
Para 50 huevos y cajas con capacidad para 12 huevos, 50 / 12 da 4 cajas llenas y 50 % 12 da 2 huevos sobrantes. Para guardar todos los huevos se necesita una quinta caja. Para cantidades no negativas y tamaños de caja positivos, la expresión entera (count + size - 1) / size redondea hacia arriba el número de recipientes, siempre que la suma no se desborde. En este ejemplo, (50 + 12 - 1) / 12 da 5.
Elige la división fraccionaria antes de realizarla
| Expresión | Resultado almacenado o calculado |
|---|---|
double result = 7 / 2; | 3.0 |
double result = 7 / 2.0; | 3.5 |
double result = (double) 7 / 2; | 3.5 |
Un destino double no puede recuperar una fracción descartada. Convierte un operando en double antes de dividir cuando necesites la fracción.
La división o el cálculo del resto por el entero cero lanza ArithmeticException durante la ejecución. La división en coma flotante se comporta de otro modo: 5.0 / 0 da Infinity, -5.0 / 0 da -Infinity y 0.0 / 0 da NaN, que significa «valor no numérico». Por tanto, un resultado puede ser inutilizable incluso cuando la ejecución no se detiene.
Puntos clave
- La división entera
/trunca hacia cero;%devuelve el resto. - Un resto entero distinto de cero tiene el signo del dividendo.
- Utiliza cocientes y restos sucesivos para descomponer segundos en horas, minutos y segundos.
- Las cajas llenas y las cajas necesarias para todos los elementos responden a preguntas distintas.
- Convierte un operando en
doubleantes de dividir para conservar una fracción. - La división entera por cero lanza una excepción; la división en coma flotante puede producir infinito o
NaN.
3.3 Calcula con números decimales y la clase Math
La aritmética decimal es útil para medidas y medias. La clase Math añade cálculos ya disponibles, mientras que el redondeo permite elegir cómo almacenar o presentar un resultado.
Conserva las fracciones y reconoce las aproximaciones
150 / 2.5 da 60.0, una velocidad en km/h cuando la distancia es 150 km y el tiempo es 2,5 horas. Como un operando es double, la división conserva un resultado fraccionario cuando es necesario. Los valores double ordinarios que son enteros se imprimen con una parte decimal, como 60.0.
Un double almacena una aproximación binaria de muchos valores decimales. Por ello, 1.1 * 3 imprime 3.3000000000000003, y 10.0 / 3 imprime 3.3333333333333335. Conserva el valor de trabajo durante los cálculos posteriores y redondéalo al presentarlo.
Los valores grandes o pequeños pueden imprimirse en notación científica. 1.23456789E7 representa 12 345 678,9, y 1.0E-4 representa 0,0001. Para valores positivos finitos, se utiliza la notación ordinaria desde 0,001 hasta 10 000 000, sin incluirlo. La notación científica cambia la forma mostrada, no el valor subyacente.
Llama a métodos útiles de Math
Math está en java.lang, por lo que no se necesita ninguna importación.
| Llamada | Resultado y propósito |
|---|---|
Math.sqrt(16) | 4.0, una raíz cuadrada |
Math.pow(2, 10) | 1024.0, una potencia |
Math.abs(-7) | 7, un valor absoluto |
Math.max(3, 9) | 9, el valor mayor |
Math.min(3, 9) | 3, el valor menor |
Math.sqrt y Math.pow devuelven double. La constante Math.PI es aproximadamente 3,141592653589793. Para un círculo de radio 2,5 cm, Math.PI * 2.5 * 2.5 da 19.634954084936208 cm², aproximadamente 19,63 cm². Para un triángulo rectángulo con catetos de 3 cm y 4 cm, Math.sqrt(3 * 3 + 4 * 4) primero suma los cuadrados de los catetos para obtener 25 y después da 5.0 cm.
Elige una dirección de redondeo
| Llamada | Resultado |
|---|---|
Math.round(2.4) | 2 |
Math.round(2.5) | 3 |
Math.round(-2.5) | -2 |
Math.floor(2.7) | 2.0 |
Math.ceil(2.1) | 3.0 |
Math.floor(-2.7) | -3.0 |
round elige el entero más cercano, y los valores exactamente a medio camino se redondean hacia el infinito positivo. floor baja hacia el infinito negativo; ceil sube hacia el infinito positivo. Para los negativos, «abajo» significa un valor más negativo, por lo que la parte entera inferior de −2,7 es −3,0.
Para un argumento double, Math.round devuelve un long. Almacena ese resultado en un long o conviértelo explícitamente cuando corresponda usar un int: int rounded = (int) Math.round(2.7); almacena 3. floor y ceil devuelven valores double.
Para redondear un valor almacenado a dos decimales, utiliza Math.round(12.3456 * 100) / 100.0, que da 12.35. El paso de multiplicación desplaza la posición de las centésimas al límite entre enteros. Dividir entre 100.0 devuelve el valor a su escala mediante división en coma flotante; dividir entre el entero 100 descartaría la fracción y daría 12. Si solo hay que redondear el texto impreso, printf puede dar formato directamente al valor original.
Puntos clave
- Un
doubleconserva los resultados fraccionarios, pero aproxima muchas fracciones decimales. Math.sqrt,Math.powyMath.PIpermiten realizar cálculos geométricos sin una importación.roundselecciona el entero más cercano;flooryceileligen una dirección.Math.round(double)devuelvelong, mientras queflooryceildevuelvendouble.- Al devolver un valor redondeado a su escala, utiliza un divisor decimal para conservar su fracción.
4Convierte valores entre tipos
Un valor puede pasar entre tipos numéricos o entre números y texto. Cada vía tiene sus propias reglas: algunas conversiones numéricas son automáticas, otras requieren una conversión explícita y el texto numérico debe analizarse antes de realizar operaciones aritméticas. Sigue la conversión en el punto exacto donde ocurre. Convertir después de una operación no puede recuperar información ya perdida, y una conversión correcta puede aun así cambiar un valor grande o fraccionario.
4.1 Amplía valores y realiza conversiones explícitas de tipo
Java a veces convierte un valor numérico automáticamente. Otras conversiones necesitan una conversión explícita. Esta cambia el tipo de un valor en un punto concreto de una expresión, por lo que su posición afecta al resultado.
Amplía automáticamente
La ruta principal de ampliación numérica es byte → short → int → long → float → double. Un char también se amplía a int y a los tipos siguientes. Por ejemplo, double d = 5; almacena 5.0, y cualquier valor int cabe exactamente en un long.
La ampliación a un tipo en coma flotante puede perder precisión. Las conversiones de int a float, de long a float y de long a double pueden redondear un entero grande. Convertir un int a double es exacto. Por ejemplo, (float) 16777217 se convierte en 1.6777216E7, que representa 16 777 216.
Realiza una conversión explícita de reducción
Una conversión explícita escribe el tipo de destino entre paréntesis antes del valor:
int n = (int) 3.99;
El resultado almacenado es 3. Sin (int), Java rechaza la asignación del literal double a un int. Convertir un double finito y dentro del rango a un entero trunca hacia cero: (int) -3.99 también da −3. El truncamiento es distinto del redondeo; (int) Math.round(3.99) da 4.
Las conversiones de reducción generalmente necesitan una conversión explícita. Una excepción útil permite que una expresión entera constante que quepa inicialice un byte, short o char. Así, byte b = 100; es válido sin (byte). Una variable int no constante no recibe esta excepción de asignación de constantes solo porque su valor actual quepa.
Coloca la conversión explícita antes de la operación que la necesita
Sean int sum = 25; e int count = 3;.
| Expresión | Qué ocurre | Resultado |
|---|---|---|
(double) sum / count | Convierte sum y después divide con un double. | 8.333333333333334 |
(double) (sum / count) | Divide enteros y después convierte el resultado entero. | 8.0 |
Una conversión explícita tiene mayor precedencia que la multiplicación y la división. Los paréntesis determinan si se aplica a un operando o a un cálculo ya completado. Convertir explícitamente después de una división entera no puede recuperar la información descartada.
Predice los cambios en caracteres y enteros pequeños
(int) 'A' da su código de carácter, 65. Sumar 1 a 'A' produce el int 66. Para convertir todo el resultado de nuevo en un carácter, escribe (char) ('A' + 1), que da 'B'. Sin los paréntesis exteriores alrededor de la suma, la conversión explícita solo se aplicaría a 'A'.
La reducción entre tipos enteros conserva solo los bits inferiores. (byte) 200 se convierte en −56; (int) 3_000_000_000L se convierte en −1 294 967 296. Una conversión explícita permite la conversión, pero no comprueba si el valor original cabe.
La asignación compuesta incorpora una conversión al tipo del lado izquierdo. Con int x = 10;, x += 2.7; calcula 12,7 y lo reduce a 12. La asignación simple x = x + 2.7; falla porque su lado derecho es double.
Puntos clave
- La ampliación es automática, pero algunas conversiones a coma flotante pueden redondear enteros grandes.
- Una conversión de reducción generalmente necesita una conversión explícita; las constantes enteras que caben tienen una excepción para la asignación a tipos pequeños.
- Una conversión explícita de decimal a entero dentro del rango trunca hacia cero.
- Convierte explícitamente un operando antes de dividir cuando la operación deba conservar una fracción.
- La reducción entre enteros puede cambiar un valor al descartar los bits superiores.
- La asignación compuesta incluye una conversión de vuelta al tipo de la variable.
4.2 Convierte texto en números y números en texto
Un texto puede contener dígitos sin ser un número. Para calcular con texto escrito o almacenado, analízalo y conviértelo a un tipo numérico. Para construir un mensaje, convierte un valor numérico de nuevo en texto.
Analiza el texto antes de calcular
La expresión "42" + 1 produce «421». Como el operando izquierdo es una cadena String, + realiza una concatenación. Integer.parseInt("42") + 1 produce 43 porque el análisis proporciona un int antes de la suma.
String first = "12";
String second = "30";
int total = Integer.parseInt(first) + Integer.parseInt(second);
Aquí total contiene 42. Unir las cadenas originales daría «1230». Elige la conversión según el uso previsto del valor, no según si sus caracteres parecen numéricos.
Integer.parseInt(text) devuelve un int; Long.parseLong(text) devuelve un long. Integer.valueOf("42") devuelve un objeto Integer, que Java convierte automáticamente en int cuando se requiere un int. Para una operación directa de texto a int, parseInt expresa claramente el resultado previsto.
Analiza decimales y valores de verdad
Double.parseDouble("3.75") devuelve el double 3,75. Su formato de texto usa un punto decimal en todas las computadoras, independientemente de la configuración regional. Double.parseDouble("3,5") falla. Los literales del código fuente de Java también usan un punto, aunque los métodos de lectura del teclado pueden seguir una configuración regional.
Boolean.parseBoolean(text) sigue otra regla: devuelve true para «true» con cualquier combinación de mayúsculas y minúsculas, como «TRUE». Cualquier otro texto devuelve false, incluido «yes». No interpreta una palabra afirmativa general como verdadera.
Reconoce el texto numérico no válido
Un texto numérico no válido causa una NumberFormatException mientras se ejecuta el programa. Integer.parseInt("4.5") falla porque el texto decimal no es una representación entera. Integer.parseInt("") e Integer.parseInt(" 42") también fallan. El mensaje de la excepción identifica el texto que no se pudo convertir.
El tratamiento de los espacios en blanco depende del método de análisis. Double.parseDouble ignora los espacios al principio y al final, mientras que Integer.parseInt no lo hace. Elige entradas de prueba que revelen estas diferencias al leer datos del usuario.
Un patrón cómodo de entrada consiste en leer una línea completa y analizarla:
int age = Integer.parseInt(scanner.nextLine());
double height = Double.parseDouble(scanner.nextLine());
Cada llamada consume su línea completa, incluido el fin de línea. Esto mantiene la coherencia entre la entrada de texto y la numérica y evita mezclar lecturas de unidades de entrada con lecturas de líneas completas.
Convierte un número en texto
String.valueOf(42), Integer.toString(42) y "" + 42 producen la cadena String «42». Double.toString(2.50) produce «2.5». La escritura decimal original no permanece asociada al número almacenado, por lo que esta conversión no añade un cero final para conservarla.
Utiliza String.format cuando necesites texto almacenado con un número fijo de decimales. Utiliza printf cuando quieras imprimir ese texto con formato directamente. Ni una conversión explícita numérica ni la concatenación básica proporcionan una presentación fija con dos decimales.
Puntos clave
- El texto que parece numérico sigue siendo una cadena String hasta que se analiza.
Integer.parseIntyDouble.parseDoubleproducen valores numéricos para realizar operaciones aritméticas.Double.parseDoubleutiliza un punto decimal independientemente de la configuración regional.- Un texto numérico no válido causa
NumberFormatException; el análisis de enteros rechaza los espacios al principio y al final. Boolean.parseBooleanacepta «true» con cualquier combinación de mayúsculas y minúsculas y devuelve false para otros textos.- La conversión básica de números a texto no conserva ceros adicionales al final.
5Lee datos de entrada y crea programas completos
La entrada y la salida convierten un cálculo en un programa que alguien puede utilizar. Relaciona cada solicitud con una lectura adecuada de Scanner, decide cómo se introducirán los decimales y elige etiquetas de salida y formatos numéricos claros. Crea un programa completo a partir de un plan de entrada, cálculo y salida, y después pruébalo con resultados calculados a mano. Un programa puede compilarse y terminar correctamente y, aun así, leer la línea equivocada o mostrar un valor incorrecto.
5.1 Lee datos de entrada con Scanner
La entrada por teclado llega como texto. Un Scanner puede leer una línea completa, una palabra o una palabra convertida en número. Elige un plan de lectura coherente antes de pedir valores al usuario.
Crea un Scanner y lee una línea
import java.util.Scanner;
public class Greeting {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("What is your name? ");
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");
}
}
La importación va antes de la clase. La sentencia de creación va dentro de main y conecta el Scanner a System.in. Un Scanner basta para este programa. nextLine() espera la línea escrita y devuelve su texto sin el salto de línea. Si se escribe «Ada», la última sentencia imprime «Hello, Ada!». Utilizar print para la solicitud mantiene lo que se escribe junto a la pregunta.
Elige entre líneas o unidades de entrada
| Método | Qué lee |
|---|---|
nextLine() | El resto de la línea actual, sin el fin de línea |
next() | La siguiente unidad de entrada separada por espacios en blanco, como texto |
nextInt() | La siguiente unidad de entrada como int |
nextLong() | La siguiente unidad de entrada como long |
nextDouble() | La siguiente unidad de entrada como double |
nextBoolean() | La siguiente unidad de entrada como valor de verdad |
Para «Ada Lovelace», next() devuelve «Ada». Una llamada posterior a nextLine() devuelve « Lovelace», incluido su espacio inicial. Dos llamadas a nextInt() pueden leer «3 4» de una línea. Una unidad de entrada numérica que no corresponda al método, como «4.5» o «abc» para nextInt(), causa una InputMismatchException.
Ten en cuenta el fin de línea sin leer
Supón que el usuario escribe «30», pulsa Enter, después escribe «Ada Lovelace» y pulsa Enter. Este código no lee el nombre como se pretende:
int age = scanner.nextInt();
String name = scanner.nextLine();
nextInt() consume 30, pero deja el fin de línea. nextLine() consume inmediatamente el resto vacío de esa misma línea, por lo que name es "". Añade scanner.nextLine(); entre las dos sentencias para descartar ese resto antes de leer el nombre en la siguiente línea.
Otra solución es leer cada respuesta con nextLine() y analizar las líneas numéricas: int age = Integer.parseInt(scanner.nextLine());. Esto evita alternar entre dos unidades de entrada diferentes.
Deja clara la convención decimal
nextDouble() sigue la configuración regional del Scanner, que inicialmente es la configuración regional de formato predeterminada de la computadora. Una configuración con coma decimal acepta «3,5» como decimal y rechaza «3.5» en este ejemplo. Para leer decimales con punto de forma coherente, añade import java.util.Locale; y crea:
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
Leer una línea completa con Double.parseDouble(scanner.nextLine()) también usa un punto. Cambiar la configuración regional del Scanner no cambia los literales del código fuente de Java ni la configuración regional utilizada por las llamadas posteriores a printf.
Lee los valores en el orden solicitado. Si pides un nombre y después una edad, la primera lectura debe almacenar el nombre. Una lectura mal colocada puede poner datos en la variable equivocada o provocar un error de conversión.
Puntos clave
- Importa
java.util.Scannerantes de la clase y crea un Scanner dentro demain. nextLine()lee el resto de una línea; los métodos de lectura de unidades leen valores separados por espacios en blanco.- Una unidad de entrada numérica de tipo incorrecto causa
InputMismatchException. - Después de leer una unidad de entrada numérica, consume el resto de la línea antes de leer texto en la siguiente.
useLocale(Locale.US)fija la entrada decimal con punto en Scanner; analizar líneas es otra vía coherente.- Haz coincidir las lecturas de entrada con el orden de las solicitudes.
5.2 Da formato a la salida con printf
La salida con formato controla cómo aparecen los valores dentro de un mensaje. printf puede mostrar un número fijo de decimales, añadir un salto de línea y alinear valores en columnas sin cambiar sus valores almacenados.
Relaciona los marcadores con los valores
Una cadena de formato contiene texto ordinario y especificadores que comienzan con %. Cada especificador que consume un valor toma el siguiente valor proporcionado después de la cadena de formato:
System.out.printf("%s is %d years old%n", "Ada", 36);
Esto imprime «Ada is 36 years old» y comienza una nueva línea. %s muestra texto u otro valor como texto, %d muestra un entero como un int o long, y %f muestra un valor en coma flotante. %n inserta un salto de línea sin consumir un valor. %% imprime un signo de porcentaje.
printf no añade automáticamente un salto de línea. Incluye %n cuando la siguiente salida deba comenzar en una nueva línea. Una secuencia de escape ordinaria \n también representa un carácter de nueva línea dentro del texto de Java; %n es el separador de líneas del formateador específico de la plataforma.
Establece los decimales para la presentación
%f sin modificar imprime seis cifras después del separador decimal: dar formato a 2.5 produce «2.500000». La precisión de %.2f solicita dos cifras:
System.out.printf("Total: %.2f%n", 12.3456);
Con el formato de Estados Unidos, la salida es «Total: 12.35». El valor se redondea en el texto mostrado. Una variable que contiene 12,3456 sigue conteniendo ese valor de trabajo después de imprimirlo.
Para System.out.printf("%d items at %.2f each, total %.2f%n", 3, 1.5, 3 * 1.5);, los valores completan los tres marcadores en orden. Con la configuración de Estados Unidos, la salida es «3 items at 1.50 each, total 4.50».
Alinea campos con la anchura
Una anchura es un tamaño mínimo de campo. %5d alinea un entero a la derecha dentro de al menos cinco caracteres; %-6s alinea texto a la izquierda dentro de al menos seis. %6.1f combina una anchura de 6 con una cifra decimal.
System.out.printf("[%5d][%-6s][%6.1f]%n", 42, "Ada", 9.25);
Con la configuración de Estados Unidos, la salida exacta es [ 42][Ada ][ 9.3]. Los corchetes hacen visible el relleno. Un valor más largo que su anchura se sigue imprimiendo completo; la anchura no corta caracteres.
Un especificador incompatible causa un error en tiempo de ejecución. printf("%d%n", 2.5) se compila, pero lanza IllegalFormatConversionException porque %d espera un valor entero. Proporcionar muy pocos valores, como en printf("%d %d%n", 2), causa MissingFormatArgumentException.
Elige entre imprimir o almacenar texto
String.format aplica las mismas reglas de formato, pero devuelve una cadena String:
String line = String.format("%.1f km", 12.345);
Con la configuración de Estados Unidos, line contiene «12.3 km»; esa sentencia no ha impreso nada.
Ambos métodos de formato usan la configuración regional predeterminada salvo que les pases una. Añade import java.util.Locale; y después utiliza System.out.printf(Locale.US, "%.2f%n", 12.3456); para garantizar «12.35» en lugar de «12,35», que se usa en una configuración con coma decimal. String.format también puede recibir Locale.US como primer argumento. Imprimir un double con println usa un punto independientemente de la configuración regional de formato.
Puntos clave
- Relaciona cada especificador que consume un valor con el siguiente valor de un tipo adecuado.
- Utiliza
%npara un salto de línea y%%para un signo de porcentaje literal. %.2fredondea el texto mostrado a dos decimales sin cambiar el valor almacenado.- La anchura rellena un campo hasta un tamaño mínimo; no trunca los valores más largos.
String.formatdevuelve texto, mientras queprintflo imprime.- Pasa una configuración regional para controlar el separador decimal en la salida con formato.
5.3 Combina entrada, cálculo y salida
Un programa de cálculo completo conecta tres etapas: leer las entradas, calcular con ellas e imprimir los resultados. Planificar los valores y sus unidades antes de escribir ayuda a elegir tipos y comprobar el resultado.
Planifica un programa de tiempo de viaje
Las entradas son la distancia en kilómetros y la velocidad media en km/h. Dividir la distancia entre la velocidad da el tiempo en horas. Ambas medidas necesitan double para que la división pueda conservar una fracción. La salida serán horas y minutos enteros, redondeados al minuto más cercano.
import java.util.Scanner;
public class TravelTime {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Distance (km): ");
double distance = Double.parseDouble(scanner.nextLine());
System.out.print("Speed (km/h): ");
double speed = Double.parseDouble(scanner.nextLine());
int totalMinutes = (int) Math.round(distance / speed * 60);
int hours = totalMinutes / 60;
int minutes = totalMinutes % 60;
System.out.println("Travel time: " + hours + " h " + minutes + " min");
}
}
Para 150 km a 80 km/h, la división da 1,875 horas. La multiplicación por 60 da 112,5 minutos. Math.round devuelve el long 113, y la conversión explícita lo convierte en int. La división entera y el resto dan después 1 hora y 53 minutos. La salida es «Travel time: 1 h 53 min».
Si tanto la distancia como la velocidad fueran int, 150 / 80 * 60 produciría 60. La fracción desaparece en la división, antes de la multiplicación. La elección de tipos forma parte del plan, no solo de la sentencia final de salida.
Elige la presentación y la aritmética por separado
Para una cuenta total de 87,60 repartida entre 4 personas, almacena el total en double y el número de personas en int. double share = total / people; da 21,9. Con el formato de Estados Unidos, System.out.printf("Each person pays %.2f%n", share); imprime «Each person pays 21.90». El formato proporciona la segunda cifra decimal sin cambiar el cálculo.
Para las puntuaciones enteras 7, 8 y 10, double average = (a + b + c) / 3.0; da 8.333333333333334, que se muestra como «8.33» con %.2f. Los paréntesis agrupan el total y el divisor decimal conserva su fracción.
Prueba con resultados que conozcas
Calcula los resultados esperados antes de ejecutar el programa. Para el tiempo de viaje, 120 km a 60 km/h debería imprimir 2 h 0 min. Una distancia de 0 km a una velocidad positiva debería imprimir 0 h 0 min. Prueba entradas cercanas a un límite de redondeo y distancias válidas mayores para poner a prueba más que el cálculo más sencillo.
Incluye entradas de cero, negativas y grandes al comprobar el comportamiento del programa. Decide si cada entrada tiene sentido para la tarea. Un número de cero personas hace que total / people produzca Infinity cuando total es un double distinto de cero; la división entera por cero lanza ArithmeticException. Una ejecución correcta por sí sola no demuestra que la respuesta sea útil.
Cuando la salida difiera de lo que esperabas, imprime valores intermedios o síguelos en una tabla. Encuentra el primer valor incorrecto, corrige la sentencia responsable y vuelve a ejecutar las pruebas conocidas. Compara los espacios y las etiquetas, además de los números.
Utiliza nombres como totalMinutes, constantes con nombre como MINUTES_PER_HOUR, unidades en las solicitudes y comentarios breves que expliquen el propósito de un cálculo.
Puntos clave
- Enumera entradas, salidas, fórmulas, unidades y tipos antes de escribir un programa de cálculo.
- Conserva las fracciones de las medidas durante la aritmética y redondea después cuando la salida requiera unidades enteras.
- Prueba entradas habituales, límite y no adecuadas frente al comportamiento esperado.
- Sigue los valores intermedios para localizar el primer paso incorrecto.
- Los nombres claros, las constantes y las unidades facilitan la comprobación de un programa.
Ejemplos de Primeros programas en Java
1Crea y ejecuta un pequeño programa de mensajes
13 pasos
- 1IntroducciónSigue las instrucciones desde main
Un programa Java necesita un punto de entrada y una secuencia de instrucciones. En la forma clásica, una clase contiene
main, ymaincontiene las sentencias que se ejecutan.Crearás un breve aviso, lo iniciarás y seguirás la posición de salida a través de varias llamadas de impresión. La misma secuencia ayuda a depurar: primero comprueba que el código fuente se compila, después que se ejecuta y, por último, que su salida coincide con el aviso previsto.
- 2EjemploColoca el aviso dentro del método
Empieza con esta estructura completa:
public class Notice { public static void main(String[] args) { System.out.println("Studio open"); } }Las llaves exteriores encierran la clase; el par interior encierra el método. Java comienza con la sentencia de impresión dentro de
main. Su punto y coma termina la sentencia, mientras que las llaves de cierre terminan los dos cuerpos que la contienen. - 3ConsejoComprueba los nombres antes de añadir más código
Guarda la clase pública
NoticeenNotice.java. Haz que laNmayúscula coincida exactamente. Conserva tambiénSystemy el nombre de métodomainen minúscula: Java trata las distintas combinaciones de mayúsculas y minúsculas como nombres diferentes.Aplica una sangría de cuatro espacios a cada cuerpo anidado para que sea fácil detectar una llave mal colocada. Un comentario breve con
//puede explicar el motivo de un paso sin convertirse en una instrucción ejecutable. - 4DesafíoCorrige el método de entrada
Un archivo declara correctamente
public class Bulletin, pero su único método espublic static void Main(String[] args). Se compila y el lanzador no encuentra el método main. ¿Qué cambio hace falta?---reveal---
Cambia
Mainpormain. El nombre con mayúscula declara un método diferente, por lo que no proporciona el punto de entrada previsto. El archivo también debe seguir llamándoseBulletin.javapara coincidir con su clase pública. - 5ExplicaciónCompila e inicia el aviso
Desde la carpeta del código fuente, introduce:
javac Notice.java java Noticejavaccomprueba el código fuente y produce el código de bytesNotice.class.javainicia la JVM para ejecutar esa clase. Un JDK proporciona ambos comandos; un IDE realiza estas etapas mediante su botón Run. En el comando que inicia la clase compilada, omite la extensión.class.java Notice.javaes una forma distinta de iniciar un archivo fuente, disponible desde Java 11. - 6DesafíoLee primero el primer error
Después de eliminar la comilla de cierre de un mensaje, un estudiante ve varios mensajes del compilador en esa línea y en las posteriores. ¿Debe reescribir inmediatamente cada sentencia posterior? Explica el siguiente paso.
---reveal---
Corrige el primer error cerrando el literal de cadena, guarda y vuelve a compilar. Una comilla sin cerrar puede hacer que el código posterior parezca incorrecto. Volver a compilar muestra si esos mensajes posteriores desaparecen antes de que haga falta realizar más cambios.
- 7EjemploSigue las dos primeras llamadas de impresión
Sustituye el mensaje original por:
System.out.print("Studio "); System.out.print(3);La primera llamada imprime la palabra y su espacio final. Como
printno añade un salto de línea, la segunda llamada coloca3justo después de ese espacio. La salida actual es «Studio 3», y la siguiente llamada seguiría en esta línea. Las llamadas de salida no insertan separadores adicionales por sí solas. - 8EjemploTermina una línea y comienza otra
Continúa el mismo programa con:
System.out.println(" open"); System.out.println("Welcome");La primera llamada añade su espacio inicial y la palabra «open» a la línea existente y después termina esa línea. La segunda imprime «Welcome» y termina la siguiente línea. El texto completo es:
Studio 3 open WelcomeNo hay ninguna línea en blanco entre los mensajes; un
println()vacío añadiría una. - 9Idea claveLas comillas y las secuencias de escape determinan el texto
Las comillas determinan si Java imprime texto literal o evalúa código.
println("3 + 4")imprime «3 + 4»;println(3 + 4)imprime 7.Para incluir una comilla dentro de un literal, escribe
\". Para una nueva línea dentro de un literal, escribe\n; una tabulación es\ty una barra invertida es\\. Las secuencias de escape se convierten en caracteres del texto resultante. El propio literal ordinario debe abrirse y cerrarse en una sola línea del código fuente. - 10DesafíoPredice dónde terminan las líneas
¿Qué imprime este código?
System.out.print("A"); System.out.println("B"); System.out.println(); System.out.print("C");---reveal---
La primera línea es «AB», la segunda está en blanco y la tercera contiene «C». La primera llamada permanece en su línea, la siguiente la termina y el
println()vacío proporciona otro salto de línea. No aparecen espacios entre A y B porque ninguna sentencia imprime uno. - 11ConexiónLocaliza la etapa del fallo
Supón que un aviso modificado se compila, comienza a ejecutarse y después se detiene en una división entera por cero. Eso es un error en tiempo de ejecución, indicado por una excepción. Si termina, pero identifica una sala con el número equivocado, eso es un error lógico.
La compilación comprueba las reglas de Java; no sabe a qué sala te referías. Calcula el aviso esperado antes de hacer la prueba y compara cada etiqueta, valor, espacio y salto de línea.
- 12DesafíoDistingue dos correcciones
Un programa primero no se compila porque a una sentencia de impresión le falta un punto y coma. Después de corregirlo, se ejecuta, pero imprime dos mensajes en una sola línea cuando se necesitan dos. ¿Qué debe cambiar en cada etapa?
---reveal---
Añade el punto y coma para corregir el error en tiempo de compilación. Después cambia el
printdel primer mensaje porprintln, o imprime ahí un salto de línea, para corregir la lógica de salida. Comprueba el segundo cambio comparando la disposición real de las líneas con la esperada. - 13RepasoComprueba la estructura, la ejecución y la salida
Utiliza la estructura de la clase y
mainpara localizar las sentencias ejecutables. Haz coincidir el nombre de la clase pública con el archivo fuente y después compila e inicia el programa con los comandos adecuados.Sigue las llamadas de impresión observando la posición actual de salida:
printpermanece en la línea yprintlnavanza. Cuando un resultado sea incorrecto, identifica si falló la compilación, si se detuvo la ejecución o si la salida final difiere de lo esperado. Cada caso indica una comprobación diferente.
2Sigue los valores almacenados y crea un mensaje
12 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónSigue los valores antes de predecir la salida
- 2EjemploCrea dos valores almacenados independientes
- 3EjemploActualiza solo el destino indicado
- 4DesafíoConserva un valor durante un intercambio
- 5ConsejoUtiliza final y var con intención
- 6ExplicaciónElige un tipo que se ajuste a los datos
- 7EjemploDeja que la escritura del literal elija el tipo
- 8DesafíoAmplía antes de multiplicar
- 9EjemploConstruye un mensaje a partir del seguimiento
- 10DesafíoDetermina cuándo el signo de suma indica una operación aritmética
- 11DesafíoCombina un valor copiado con una nueva salida
- 12RepasoUtiliza el valor más reciente y el tipo real
3Descompón una duración y calcula con fracciones
14 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónElige la operación que se ajuste a la pregunta
- 2ExplicaciónAgrupa un cálculo completo
- 3DesafíoCorrige una expresión para calcular una media
- 4EjemploCuenta las horas completas
- 5EjemploConserva los segundos que quedan después de las horas
- 6EjemploExtrae los minutos y los segundos
- 7DesafíoDescompón otra duración
- 8Idea claveEl truncamiento se desplaza hacia cero
- 9EjemploConserva la fracción de una medida
- 10ExplicaciónUtiliza Math para una raíz o una potencia
- 11DesafíoElige la regla de redondeo
- 12ConsejoVuelve a la escala original con un divisor decimal
- 13DesafíoConserva una media antes de redondearla
- 14RepasoSigue el tipo y la agrupación en cada operación
4Convierte valores en el momento adecuado
11 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónPregúntate qué valor llega a la conversión
- 2ExplicaciónAmplía automáticamente un valor numérico
- 3EjemploCompara dos posiciones de conversión explícita
- 4DesafíoConvierte y redondea un valor negativo
- 5ConsejoNo trates una conversión explícita como una comprobación de rango
- 6EjemploAnaliza el texto antes de sumar
- 7ExplicaciónElige el método de análisis adecuado para el texto
- 8DesafíoPredice los resultados del análisis
- 9ConexiónPrepara texto para mostrarlo
- 10DesafíoSigue toda la cadena de conversiones
- 11RepasoElige una conversión según su función
5Lee, calcula, da formato y prueba
16 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónCrea un programa en torno a sus datos
- 2ExplicaciónConecta un Scanner a la entrada por teclado
- 3EjemploLee una etiqueta como línea completa
- 4EjemploAnaliza las líneas numéricas de forma coherente
- 5DesafíoCorrige una etiqueta omitida
- 6ConsejoEstablece explícitamente las convenciones de entrada numérica
- 7EjemploCalcula con los tipos previstos
- 8ExplicaciónHaz que la cadena de formato coincida con los valores
- 9EjemploImprime una medida redondeada
- 10DesafíoCorrige el especificador
- 11EjemploAlmacena o alinea texto con formato
- 12ExplicaciónElige las pruebas antes de ejecutar
- 13DesafíoEncuentra un error de cálculo con una prueba
- 14ConsejoSigue el primer valor inesperado
- 15DesafíoAplica el plan a una velocidad
- 16RepasoComprueba todo el recorrido desde la entrada hasta el texto
Ejercicios de Primeros programas en Java
Set 1: Lee y sigue tu primer código Java10 Preguntas de Práctica
Pregunta 1 de 10
public class TrailLog. ¿Cómo debe llamarse su archivo fuente?Mostrar respuestaOcultar respuesta
.java. TrailLog.java conserva ambas mayúsculas de TrailLog. La extensión .class pertenece al código de bytes compilado, por lo que llamar al archivo fuente TrailLog.class confunde el archivo de entrada con la salida del compilador.Pregunta 2 de 10
javac Desk.java se ejecuta correctamente. ¿Qué comando de terminal inicia la clase compilada?Mostrar respuestaOcultar respuesta
java Desk. Añadir .class no identifica correctamente la clase ante el lanzador. javac compila el código fuente; no ejecuta el programa, y las mayúsculas y minúsculas del nombre de la clase deben mantenerse.Pregunta 3 de 10
¿Qué texto exacto se imprime, si / representa un salto de línea?
System.out.print("Gate ");
System.out.println(4);
System.out.print("Open");
Mostrar respuestaOcultar respuesta
print("Gate ") deja la posición después de su espacio, por lo que println(4) completa la primera línea como «Gate 4» y después añade un salto de línea. La última llamada imprime «Open» en la línea siguiente. Unir todo como «Gate 4Open» omite el salto de línea proporcionado por println.Pregunta 4 de 10
¿Qué valor contiene saved después de estas sentencias?
int stock = 8;
int saved = stock;
stock = stock + 6;
Mostrar respuestaOcultar respuesta
stock en saved. Actualizar stock después solo cambia stock, por lo que saved permanece en 8. Esperar 14 supone que la asignación crea un vínculo continuo entre las variables, pero Java copió un valor en un momento concreto.Pregunta 5 de 10
4.25 en un literal float en Java?Mostrar respuestaOcultar respuesta
f da al literal el tipo float, como en 4.25f. Sin sufijo, un literal decimal como 4.25 tiene el tipo double, aunque el valor quepa en un float. L marca un literal entero long y no puede convertir este decimal en float.Pregunta 6 de 10
System.out.println("Seats: " + 6 + 2);?Mostrar respuestaOcultar respuesta
6 + 2, de modo que los números se sumen antes de la concatenación.Pregunta 7 de 10
int result = 18 - 6 / 3 * 2;?Mostrar respuestaOcultar respuesta
6 / 3 da 2, multiplicar por 2 da 4 y restarlo de 18 da 14. Obtener 16 supone tratar 3 * 2 como denominador, aunque no hay paréntesis que lo agrupen.Pregunta 8 de 10
-11 / 4?Mostrar respuestaOcultar respuesta
Pregunta 9 de 10
int total = 19; int groups = 4;, ¿qué expresión da un cociente fraccionario?Mostrar respuestaOcultar respuesta
total antes de dividir hace que un operando sea double, por lo que la división da 4,75. Convertir la expresión total / groups una vez terminada solo da 4,0 porque la división entera ya ha descartado la fracción. Convertir el resultado decimal final a int también perdería esa fracción.Pregunta 10 de 10
Un Scanner recibe «27», Enter, «Mina Chen», Enter. ¿Qué imprime este código?
int age = scanner.nextInt();
scanner.nextLine();
String first = scanner.next();
String rest = scanner.nextLine();
System.out.println(age + ":" + first + ":" + rest);
Mostrar respuestaOcultar respuesta
nextLine() adicional consume el resto vacío después de 27. Después next() lee «Mina» y la lectura final de línea conserva el espacio inicial antes de «Chen», produciendo «27:Mina: Chen». Omitir ese espacio en la predicción supone incorrectamente que nextLine() funciona como una lectura de unidad de entrada que omite espacios en blanco.Set 2: Elige tipos y conecta la entrada con la salida10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
4.0 para double average = 19 / 4;. ¿Qué tipo de error explica la media incorrecta?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
¿Qué valores tienen left y right después de este intento de intercambio?
int left = 2;
int right = 7;
left = right;
right = left;
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Math.floor(-4.2)?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
String quantity = "16"; ¿Qué expresión produce el entero 21 a partir de este texto?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
System.out.printf("Mass: %.2f kg%n", 6.375); antes de su salto de línea?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
int km = 45; int minutes = 50; double speed = km / minutes * 60;. Imprime cero. ¿Qué sustitución calcula la velocidad en km/h conservando las entradas?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 3: Sigue cálculos y resultados con formato10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Path: C:\Work con exactamente una barra invertida?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
System.out.println(3 + 4 + " / " + 3 * 4);?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
¿Qué valor se imprime?
int value = 20;
value -= 3 * 2;
value /= 4;
System.out.println(value);
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
double value = Math.round(8.276 * 100) / 100;?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
(int) -6.8?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Integer.parseInt(" 58")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
La entrada es «Lina Park» seguida de Enter. ¿Qué cadena String recibe rest?
String first = scanner.next();
String rest = scanner.nextLine();
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
System.out.printf("[%4d][%-5s]", 7, "Oak");?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
int seconds = 7_489;. ¿Qué par de expresiones da las horas completas y los minutos enteros restantes dentro de la hora actual?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 4: Encuentra el primer paso que falla10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
System.out.println("Ready")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
var count = 6;, ¿qué ocurre cuando el mismo método ejecuta count = 6.5;?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
int edge = 70_000; long area = edge * edge;. El área almacenada es incorrecta. ¿Qué sustitución calcula el producto entero exacto y mantiene edge como int?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
¿Qué imprime este código?
int width = 12;
int height = 7;
int total = 2 * (width + height);
total -= 5;
double part = total / 4;
System.out.println(part);
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Math.sqrt(5 * 5 + 12 * 12)?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
¿Qué se imprime?
int value = 9;
value += 2.8;
double result = value / 4;
System.out.println(result);
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Boolean.parseBoolean("Yes")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
minutes = totalSeconds / 60; seconds = totalSeconds;. ¿Qué corrección arregla el cálculo?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Locale.US y lee dos líneas con double mass = scanner.nextDouble(); String label = scanner.nextLine();. La entrada es «2.75», Enter, «Sample B», Enter. ¿Qué cambio conserva ambos valores previstos?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 5: Combina las reglas en seguimientos de programas completos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
¿Qué imprime este código?
int a = 4;
int b = 7;
String text = "R=" + a + b;
a += 2;
text += ":" + (a + b);
System.out.println(text);
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
¿Qué valor se imprime?
int number = 6_843;
int last = number % 10;
number /= 10;
int next = number % 10;
System.out.println(last * 10 + next);
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
'E' el resultado de sumar 2 al código de carácter de 'C'?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
¿Qué imprime este código?
int total = 23;
int count = 4;
double a = (double) (total / count);
double b = (double) total / count;
System.out.println((int) (b - a) + ":" + b);
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Un Scanner que usa Locale.US recibe «3 2.5», Enter, «West Lab», Enter. ¿Qué valores reciben name y full?
int count = scanner.nextInt();
double mass = scanner.nextDouble();
String name = scanner.nextLine();
String full = scanner.nextLine();
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Con el formato de Estados Unidos, ¿qué texto se almacena en line?
String line = String.format("%d%% / %.1f", 25, 4.25);
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
scanner preparado y Locale está importado.Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
¿Te atascas con una pregunta tuya? Ayuda con Tareas
Términos Clave
A
Análisis sintáctico
Anchura de campo
%4d produce tres espacios iniciales antes del dígito para llenar el campo de cuatro caracteres.Aproximación en coma flotante
1.1 * 3 revelan la aproximación en coma flotante en el resultado mostrado.Asignación
count = count + 2;, count contiene dos más que el valor que tenía antes de esa sentencia.Asignación compuesta
total += 5; aumenta un total int en 5 y almacena el valor actualizado en total.B
Bloque
boolean
boolean isMember = true; almacena un valor de verdad sin usar comillas ni un número.C
Cadena de caracteres (String)
"".Cadena de formato
"Mass: %.2f kg%n" coloca una medida con dos decimales entre su etiqueta y su unidad.Cadena vacía
"" + 'A' + 'B' hace que las sumas construyan texto y den la cadena String «AB».Caso de prueba
char
'7' tiene el código 55, por lo que almacenarlo como char no lo convierte en el valor entero 7.Clase
public class Greeting abre la clase que contiene el método main del programa.Clase Math
Math.sqrt(81) calcula una raíz cuadrada sin requerir una importación ni una definición de método.Clase Scanner
System.in puede leer el nombre de un usuario y las medidas que necesita un programa.Código de bytes
.class de Java y ejecuta una máquina virtual de Java adecuada.java puede ejecutar mediante la JVM.Código fuente
.java antes de que el compilador lo traduzca para ejecutarlo.Comentario
// o entre /* y */.// Convert to minutes explica por qué un cálculo de tiempo multiplica un valor en horas por 60.Compilador
javac Notice.java invoca el compilador, que informa de un error si falta un punto y coma.Concatenación
"Count: " + 8 construye un mensaje que contiene una etiqueta, un espacio y un dígito.Configuración regional (locale)
Locale.US hace que la entrada decimal con punto sea coherente en distintas computadoras.Constante
final de Java puede recibir un valor una vez y no puede reasignarse después.MINUTES_PER_HOUR da al número 60 un nombre útil en cálculos de conversión de tiempo.Conversión de ampliación
Conversión de reducción
Conversión explícita de tipo
(double) total / count, la conversión explícita cambia el tipo de un operando antes de realizar la división.D
Declaración
int count; introduce un nombre, pero count aún necesita un valor antes de leerse.Decremento
-- de Java realiza esta actualización sin una asignación de resta separada.secondsLeft--; reduce en exactamente uno el número almacenado de segundos restantes.Desbordamiento de enteros
Dividendo
/ o % en una expresión de división de Java con dos operandos.-11 % 4, el dividendo negativo explica por qué el resto distinto de cero también es negativo.División entera
23 / 5 da 4 grupos completos y deja la fracción fuera del cociente.double
E
Error en tiempo de compilación
Error en tiempo de ejecución
Error lógico
Especificador de formato
%d para un entero o %n para un salto de línea.%f consume un valor en coma flotante, mientras que %n añade un separador de líneas sin consumir un valor.Excepción InputMismatchException
nextInt() causa InputMismatchException porque se requiere un entero.Excepción NumberFormatException
Integer.parseInt causa NumberFormatException durante la ejecución.Expresión
width * height calcula un área que puede asignarse o pasarse a una llamada de impresión.F
float
f de 2.75f marca un literal float, mientras que 2.75 sin sufijo es un literal double.I
Incremento
++ de Java realiza esta actualización en una sola sentencia.count++; cambia un recuento almacenado de 8 a 9 antes de que se ejecute la siguiente sentencia.Inicialización
double speed = 72.5; declara speed y lo inicializa con una medida en km/h.int
int, pero un recuento superior a su máximo necesita un tipo entero mayor.K
Kit de desarrollo de Java (JDK)
javac y java.L
Literal
8, 8L y 8.0 expresan cantidades similares, pero tienen los tipos int, long y double.Literal de cadena
"Hello, team" incluye una coma y un espacio que aparecen exactamente en la salida.long
5_000_000_000L crea un literal que puede inicializar un recuento entero grande.M
Máquina virtual de Java (JVM)
Método Double.parseDouble
Método Integer.parseInt
Integer.parseInt("72") devuelve 72, pero añadir un espacio inicial hace que ese texto entero no sea válido.Método main
main hace que sus mensajes aparezcan en el orden escrito.Método nextLine
nextLine() puede devolver inmediatamente una cadena String vacía.Método print
print("Name: ") permite a un usuario escribir una respuesta justo al lado de la solicitud en la pantalla.Método printf
printf("%d items%n", 8) imprime el recuento, la palabra «items» y un separador de líneas final.Método println
println muestran dos líneas separadas aunque sus literales no contengan saltos de línea.Método String.format
String.format(Locale.US, "%.1f km", 8.25) e imprimir ese texto después.N
Notación científica
E en los valores impresos por Java.1.0E-4 representa 0,0001, por lo que el exponente negativo describe una magnitud pequeña.O
Operando
"N=" + count, el operando String hace que el signo de suma una texto en lugar de sumar dos números.P
Parte entera inferior (floor)
Parte entera superior (ceiling)
Plan de entrada, cálculo y salida
Precedencia de operadores
4 + 3 * 2, por lo que el producto se forma primero.Precisión
Precisión de formato
%f, establece el número de dígitos después del separador decimal.%.2f convierte un 4,5 mostrado en «4.50» sin modificar la variable numérica.R
Redondeo
Resto
% de Java da un resultado distinto de cero con el signo del dividendo.23 % 5 da las 3 piezas que quedan fuera de los grupos completos.S
Salida esperada
Secuencia de escape
permite que una llamada de impresión coloque la siguiente parte de su mensaje en otra línea.Sentencia
System.out.println("Ready"); es una sentencia que imprime un mensaje y un salto de línea.T
Tabla de seguimiento
Tipo primitivo
int usa un tipo primitivo, mientras que un nombre almacenado como String usa un tipo de clase.Truncamiento
U
Unidad de entrada (token)
nextInt().V
Valor intermedio
Valor no numérico (NaN)
0.0 / 0 produce NaN en lugar de lanzar una excepción de división entera.Variable
distanceKm almacena una medida que un cálculo posterior de tiempo divide entre la velocidad.- 1Primeros programas en Java
- 2Condiciones y bucles en Java
- 3Métodos en Java
- 4Listas, arreglos y cadenas en Java
- 5Clases y objetos en Java
- 6Objetos y referencias en Java
- 7HashMap y colecciones en Java
- 8Herencia, interfaces y polimorfismo en Java
- 9Excepciones y archivos en Java
- 10Paquetes en Java
- 11Genéricos y expresiones lambda en Java
Sobre esta unidad
Crea tus propios Materiales de Estudio
Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.