Primeros programas en Java

Escribe tus primeros programas completos en Java: crea una clase con un método main, compílala y ejecútala, y corrige los errores que indiquen el compilador y el programa en ejecución. Almacena valores en variables de tipos primitivos y en cadenas String, calcula con expresiones aritméticas que incluyan la división entera y el resto, y convierte valores entre tipos mediante conversiones explícitas y análisis sintáctico. Lee texto y números del teclado con Scanner, da formato a los resultados con printf y combina todo en pequeños programas que probarás con resultados calculados a mano.

PrincipianteUnidad 1 de 11 del curso Curso de Programación orientada a objetos con Java

Lo que aprenderás

  1. 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 main
      Reconoce 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 errores
      Convierte 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 println
      Imprime 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.
  2. 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ízalas
      Crea 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 literales
      Elige 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ón
      Almacena texto en variables String y construye la salida uniendo cadenas, números y variables con el operador +, prediciendo exactamente qué se imprimirá.
  3. 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 precedencia
      Combina 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 resto
      Predice 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 Math
      Calcula 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.
  4. 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 tipo
      Distingue 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 texto
      Convierte 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.
  5. 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 Scanner
      Crea 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 printf
      Imprime 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 salida
      Planifica, escribe y prueba programas completos que lean valores, calculen con ellos utilizando los tipos adecuados e impriman resultados claros.

Guía de estudio de Primeros programas en Java

5 capítulos

1

Escribe, 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 Hello va en Hello.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 problemaQué ocurreCómo investigarlo
Error en tiempo de compilaciónEl código fuente no puede compilarse correctamente.Lee el primer mensaje del compilador y examina el código cercano.
Error en tiempo de ejecuciónLa ejecución se detiene con una excepción.Lee la excepción y localiza la línea indicada.
Error lógicoLa 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.java compila el código fuente; java Hello ejecuta 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 literalCarácter impreso
\nNueva línea
\tTabulació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

  • print permanece en la línea actual; println añade un salto de línea después de su valor.
  • Las comillas indican texto literal: "name" imprime esas letras, mientras que name imprime 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.
2

Almacena 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 sentenciafirstsecondtemp
int temp = first;494
first = second;994
second = temp;944

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.
  • final impide la reasignación, y var infiere 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
TipoAlmacenamiento y valores
byteEntero de 8 bits: de −128 a 127
shortEntero de 16 bits: de −32 768 a 32 767
intEntero de 32 bits: de −2 147 483 648 a 2 147 483 647
longEntero de 64 bits: de −9 223 372 036 854 775 808 a 9 223 372 036 854 775 807
floatComa flotante de 32 bits; unas 7 cifras significativas
doubleComa flotante de 64 bits; entre 15 y 17 cifras significativas aproximadamente
charUna unidad de código UTF-16 de 16 bits: de 0 a 65 535
booleantrue 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; String es una clase.
  • Utiliza el sufijo de un literal para elegir long (L) o float (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 char almacena una unidad de código UTF-16, mientras que un boolean almacena 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ónResultadoRazó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 char se suman numéricamente a menos que una cadena String ya forme parte de la operación.
3

Calcula 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
OrdenOperadores o agrupación
PrimeroParéntesis
DespuésSigno 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ónResultado 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 double antes 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.

LlamadaResultado 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
LlamadaResultado
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 double conserva los resultados fraccionarios, pero aproxima muchas fracciones decimales.
  • Math.sqrt, Math.pow y Math.PI permiten realizar cálculos geométricos sin una importación.
  • round selecciona el entero más cercano; floor y ceil eligen una dirección.
  • Math.round(double) devuelve long, mientras que floor y ceil devuelven double.
  • Al devolver un valor redondeado a su escala, utiliza un divisor decimal para conservar su fracción.
4

Convierte 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ónQué ocurreResultado
(double) sum / countConvierte 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.parseInt y Double.parseDouble producen valores numéricos para realizar operaciones aritméticas.
  • Double.parseDouble utiliza 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.parseBoolean acepta «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.
5

Lee 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étodoQué 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.Scanner antes de la clase y crea un Scanner dentro de main.
  • 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 %n para un salto de línea y %% para un signo de porcentaje literal.
  • %.2f redondea 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.format devuelve texto, mientras que printf lo 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

5 Lecciones Interactivas

1

Crea y ejecuta un pequeño programa de mensajes

13 pasos
Sigue un programa desde su estructura de clase hasta la salida exacta y después localiza la etapa en que ocurre un error.
  1. 1
    Introducció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, y main contiene 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.

  2. 2
    EjemploColoca 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.

  3. 3
    ConsejoComprueba los nombres antes de añadir más código

    Guarda la clase pública Notice en Notice.java. Haz que la N mayúscula coincida exactamente. Conserva también System y el nombre de método main en 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.

  4. 4
    DesafíoCorrige el método de entrada

    Un archivo declara correctamente public class Bulletin, pero su único método es public static void Main(String[] args). Se compila y el lanzador no encuentra el método main. ¿Qué cambio hace falta?

    ---reveal---

    Cambia Main por main. 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ándose Bulletin.java para coincidir con su clase pública.

  5. 5
    ExplicaciónCompila e inicia el aviso

    Desde la carpeta del código fuente, introduce:

    javac Notice.java
    java Notice
    

    javac comprueba el código fuente y produce el código de bytes Notice.class. java inicia 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.java es una forma distinta de iniciar un archivo fuente, disponible desde Java 11.

  6. 6
    Desafí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.

  7. 7
    EjemploSigue 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 print no añade un salto de línea, la segunda llamada coloca 3 justo 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.

  8. 8
    EjemploTermina 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
    Welcome
    

    No hay ninguna línea en blanco entre los mensajes; un println() vacío añadiría una.

  9. 9
    Idea 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 \t y 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.

  10. 10
    Desafí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.

  11. 11
    Conexió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.

  12. 12
    Desafí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 print del primer mensaje por println, 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.

  13. 13
    RepasoComprueba la estructura, la ejecución y la salida

    Utiliza la estructura de la clase y main para 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: print permanece en la línea y println avanza. 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.

2

Sigue los valores almacenados y crea un mensaje

12 pasos
Sigue copias y actualizaciones, selecciona tipos y observa cómo el texto cambia el significado del signo de suma.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónSigue los valores antes de predecir la salida
  2. 2
    EjemploCrea dos valores almacenados independientes
  3. 3
    EjemploActualiza solo el destino indicado
  4. 4
    DesafíoConserva un valor durante un intercambio
  5. 5
    ConsejoUtiliza final y var con intención
  6. 6
    ExplicaciónElige un tipo que se ajuste a los datos
  7. 7
    EjemploDeja que la escritura del literal elija el tipo
  8. 8
    DesafíoAmplía antes de multiplicar
  9. 9
    EjemploConstruye un mensaje a partir del seguimiento
  10. 10
    DesafíoDetermina cuándo el signo de suma indica una operación aritmética
  11. 11
    DesafíoCombina un valor copiado con una nueva salida
  12. 12
    RepasoUtiliza el valor más reciente y el tipo real
3

Descompón una duración y calcula con fracciones

14 pasos
Trabaja el orden de las operaciones, las unidades de tiempo, los cálculos decimales y las opciones de redondeo.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónElige la operación que se ajuste a la pregunta
  2. 2
    ExplicaciónAgrupa un cálculo completo
  3. 3
    DesafíoCorrige una expresión para calcular una media
  4. 4
    EjemploCuenta las horas completas
  5. 5
    EjemploConserva los segundos que quedan después de las horas
  6. 6
    EjemploExtrae los minutos y los segundos
  7. 7
    DesafíoDescompón otra duración
  8. 8
    Idea claveEl truncamiento se desplaza hacia cero
  9. 9
    EjemploConserva la fracción de una medida
  10. 10
    ExplicaciónUtiliza Math para una raíz o una potencia
  11. 11
    DesafíoElige la regla de redondeo
  12. 12
    ConsejoVuelve a la escala original con un divisor decimal
  13. 13
    DesafíoConserva una media antes de redondearla
  14. 14
    RepasoSigue el tipo y la agrupación en cada operación
4

Convierte valores en el momento adecuado

11 pasos
Compara la ampliación, la conversión explícita, el análisis sintáctico y la conversión de números a texto mediante seguimientos breves.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónPregúntate qué valor llega a la conversión
  2. 2
    ExplicaciónAmplía automáticamente un valor numérico
  3. 3
    EjemploCompara dos posiciones de conversión explícita
  4. 4
    DesafíoConvierte y redondea un valor negativo
  5. 5
    ConsejoNo trates una conversión explícita como una comprobación de rango
  6. 6
    EjemploAnaliza el texto antes de sumar
  7. 7
    ExplicaciónElige el método de análisis adecuado para el texto
  8. 8
    DesafíoPredice los resultados del análisis
  9. 9
    ConexiónPrepara texto para mostrarlo
  10. 10
    DesafíoSigue toda la cadena de conversiones
  11. 11
    RepasoElige una conversión según su función
5

Lee, calcula, da formato y prueba

16 pasos
Crea un programa que calcule una proporción a partir de una medida mientras sigues la entrada de líneas completas, las cadenas de formato y las pruebas útiles.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónCrea un programa en torno a sus datos
  2. 2
    ExplicaciónConecta un Scanner a la entrada por teclado
  3. 3
    EjemploLee una etiqueta como línea completa
  4. 4
    EjemploAnaliza las líneas numéricas de forma coherente
  5. 5
    DesafíoCorrige una etiqueta omitida
  6. 6
    ConsejoEstablece explícitamente las convenciones de entrada numérica
  7. 7
    EjemploCalcula con los tipos previstos
  8. 8
    ExplicaciónHaz que la cadena de formato coincida con los valores
  9. 9
    EjemploImprime una medida redondeada
  10. 10
    DesafíoCorrige el especificador
  11. 11
    EjemploAlmacena o alinea texto con formato
  12. 12
    ExplicaciónElige las pruebas antes de ejecutar
  13. 13
    DesafíoEncuentra un error de cálculo con una prueba
  14. 14
    ConsejoSigue el primer valor inesperado
  15. 15
    DesafíoAplica el plan a una velocidad
  16. 16
    RepasoComprueba todo el recorrido desde la entrada hasta el texto

Ejercicios de Primeros programas en Java

50 Preguntas de Práctica en 5 sets

Set 1: Lee y sigue tu primer código Java10 Preguntas de Práctica

Pregunta 1 de 10

Un programa clásico declara public class TrailLog. ¿Cómo debe llamarse su archivo fuente?
  1. TrailLog.txt
  2. TrailLog.class
  3. TrailLog.java
  4. TrailLog
Mostrar respuestaOcultar respuesta
Respuesta: C
El nombre de la clase pública debe coincidir exactamente con el nombre del archivo fuente, seguido de .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?
  1. java Desk
  2. java Desk.class
  3. javac Desk
  4. Desk.class
Mostrar respuestaOcultar respuesta
Respuesta: A
El lanzador de Java recibe el nombre de la clase compilada sin extensión de archivo, por lo que el comando es 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");
  1. Gate /4/Open
  2. Gate4/Open
  3. Gate 4Open
  4. Gate 4/Open
Mostrar respuestaOcultar respuesta
Respuesta: D
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;
  1. 14
  2. 8
  3. 6
  4. 22
Mostrar respuestaOcultar respuesta
Respuesta: B
La inicialización copia el valor actual 8 de 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

¿Qué sufijo convierte 4.25 en un literal float en Java?
  1. L
  2. d
  3. f
  4. Ningún sufijo
Mostrar respuestaOcultar respuesta
Respuesta: C
El sufijo 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

¿Qué imprime System.out.println("Seats: " + 6 + 2);?
  1. Seats: 8
  2. Seats: 62
  3. Seats: 6 2
  4. Seats: 6+2
Mostrar respuestaOcultar respuesta
Respuesta: B
El primer signo de suma une la cadena String y 6 para formar «Seats: 6». El segundo une ese texto con 2 y produce «Seats: 62» sin insertar un espacio. Para imprimir «Seats: 8» harían falta paréntesis alrededor de 6 + 2, de modo que los números se sumen antes de la concatenación.

Pregunta 7 de 10

¿Qué valor asigna int result = 18 - 6 / 3 * 2;?
  1. 14
  2. 8
  3. 16
  4. 2
Mostrar respuestaOcultar respuesta
Respuesta: A
La división y la multiplicación tienen precedencia sobre la resta y se agrupan de izquierda a derecha. 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

¿Cuál es el valor de la expresión Java -11 / 4?
  1. -2.75
  2. -3
  3. 2
  4. -2
Mostrar respuestaOcultar respuesta
Respuesta: D
Ambos operandos son enteros, por lo que Java descarta la parte fraccionaria hacia cero y devuelve −2. El valor −3 resultaría de redondear hacia el infinito negativo, cosa que no hace la división entera. Para conservar −2,75, al menos un operando debe ser de coma flotante antes de la división.

Pregunta 9 de 10

Con int total = 19; int groups = 4;, ¿qué expresión da un cociente fraccionario?
  1. (double) (total / groups)
  2. (double) total / groups
  3. total / (int) groups
  4. (int) (total / 4.0)
Mostrar respuestaOcultar respuesta
Respuesta: B
Convertir explícitamente 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);
  1. 27:Mina:Chen
  2. 27::Mina Chen
  3. 27:Mina: Chen
  4. 27:Mina Chen:
Mostrar respuestaOcultar respuesta
Respuesta: C
El 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

En un programa clásico, ¿dónde comienza la ejecución?
  1. En la primera importación.
  2. En la declaración de clase.
  3. En la última sentencia de main.
  4. En la primera sentencia de main.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un programa se compila y termina, pero imprime 4.0 para double average = 19 / 4;. ¿Qué tipo de error explica la media incorrecta?
  1. Un error lógico por división entera.
  2. Un error en tiempo de ejecución por división entera.
  3. Un error en tiempo de compilación por asignación.
  4. Un error en tiempo de ejecución por desbordamiento.
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;
  1. left = 7, right = 2
  2. left = 2, right = 7
  3. left = 7, right = 7
  4. left = 2, right = 2
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Un programa debe almacenar exactamente el recuento entero 4 200 000 001. ¿Qué declaración lo consigue?
  1. int count = 4_200_000_001;
  2. long count = 4_200_000_001L;
  3. long count = 4_200_000_001;
  4. float count = 4_200_000_001f;
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Una grabación dura 247 segundos. ¿Qué valores de minutos y segundos se obtienen al descomponerla en minutos completos y segundos restantes?
  1. 4 min 11 s
  2. 5 min 7 s
  3. 4 min 7 s
  4. 4 min 47 s
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

¿Qué valor devuelve Math.floor(-4.2)?
  1. -4.0
  2. -5.0
  3. 4.0
  4. 5.0
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?
  1. quantity + 5
  2. (int) quantity + 5
  3. Integer.toString(16) + 5
  4. Integer.parseInt(quantity) + 5
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un usuario escribe el nombre completo «Noor van Dijk» en una línea de entrada nueva. ¿Qué llamada de Scanner lee el nombre completo en una sola cadena String?
  1. scanner.nextLine()
  2. scanner.next()
  3. scanner.nextInt()
  4. scanner.nextBoolean()
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Con el formato de Estados Unidos, ¿qué texto imprime System.out.printf("Mass: %.2f kg%n", 6.375); antes de su salto de línea?
  1. Mass: 6.37 kg
  2. Mass: 6.375 kg
  3. Mass: 6.38 kg
  4. Mass: 6.375000 kg
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un programa de velocidad utiliza 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?
  1. double speed = (double) km / minutes * 60;
  2. double speed = (double) (km / minutes) * 60;
  3. double speed = km / minutes * 60.0;
  4. double speed = km / (minutes * 60.0);
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

¿Qué literal de cadena de Java imprime el texto Path: C:\Work con exactamente una barra invertida?
  1. "Path: C:\Work"
  2. "Path: C:\\Work"
  3. "Path: C:/Work"
  4. "Path: C:\nWork"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Qué imprime System.out.println(3 + 4 + " / " + 3 * 4);?
  1. 7 / 12
  2. 7 / 34
  3. 34 / 34
  4. 34 / 12
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);
  1. 8
  2. 3.5
  3. 7
  4. 3
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Qué valor almacena double value = Math.round(8.276 * 100) / 100;?
  1. 8.28
  2. 8.27
  3. 8.0
  4. 828.0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué valor int resulta de (int) -6.8?
  1. -7
  2. -6
  3. 6
  4. 7
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

¿Qué ocurre cuando se evalúa Integer.parseInt(" 58")?
  1. Devuelve el int 58.
  2. Devuelve la cadena String «58».
  3. Lanza InputMismatchException.
  4. Lanza NumberFormatException.
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();
  1. " Park"
  2. "Park"
  3. ""
  4. "Lina Park"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Con el formato de Estados Unidos, ¿qué texto exacto imprime System.out.printf("[%4d][%-5s]", 7, "Oak");?
  1. [7 ][Oak ]
  2. [ 7][ Oak]
  3. [ 7][Oak ]
  4. [ 7][Oak ]
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un programa recibe 10,5 litros repartidos por igual entre 4 recipientes. Debe conservar la cantidad fraccionaria para usarla después e imprimir «2.63 L» con el formato de Estados Unidos. ¿Qué cálculo y salida cumplen ambas necesidades?
  1. int share = (int) (10.5 / 4); System.out.printf(Locale.US, "%.2f L", (double) share);
  2. double share = 10.5 / 4; System.out.printf(Locale.US, "%.2f L", share);
  3. double share = Math.round(10.5 / 4); System.out.printf(Locale.US, "%.2f L", share);
  4. double share = 10.5 / 4; System.out.printf(Locale.US, "%d L", share);
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un temporizador almacena int seconds = 7_489;. ¿Qué par de expresiones da las horas completas y los minutos enteros restantes dentro de la hora actual?
  1. seconds / 3600, seconds / 60
  2. seconds % 3600, seconds / 60
  3. seconds / 3600, seconds % 60
  4. seconds / 3600, seconds % 3600 / 60
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

¿Qué signo de puntuación termina la sentencia Java System.out.println("Ready")?
  1. Una llave de cierre: }
  2. Dos puntos: :
  3. Un punto y coma: ;
  4. Una coma: ,
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Después de eliminar una llave de cierre, un estudiante ve varios errores del compilador en líneas posteriores. ¿Cuál es el mejor paso siguiente?
  1. Revisar el primer error y las llaves cercanas, corregir la llave que falta y volver a compilar.
  2. Corregir primero el último error y después cambiar cada línea anterior indicada por el compilador.
  3. Ejecutar repetidamente la última clase compilada hasta que desaparezcan los mensajes del compilador.
  4. Cambiar el nombre de la clase y ejecutarla antes de volver a revisar el código fuente guardado.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Después de var count = 6;, ¿qué ocurre cuando el mismo método ejecuta count = 6.5;?
  1. La variable cambia de int a double.
  2. El decimal se almacena como 6 sin aviso.
  3. El programa se compila, pero se detiene al ejecutarse.
  4. La compilación falla porque count es int.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Un contador utiliza 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?
  1. long area = (long) (edge * edge);
  2. long area = (long) edge * edge;
  3. long area = (int) edge * edge;
  4. long area = edge * edge + 0L;
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);
  1. 8.25
  2. 9.0
  3. 8.0
  4. 6.0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Un triángulo rectángulo tiene catetos de 5 cm y 12 cm. ¿Qué valor devuelve Math.sqrt(5 * 5 + 12 * 12)?
  1. 13.0
  2. 17.0
  3. 169.0
  4. 60.0
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);
  1. 2.95
  2. 2.75
  3. 3.0
  4. 2.0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

¿Qué devuelve Boolean.parseBoolean("Yes")?
  1. true, porque Yes es afirmativo.
  2. false, porque el texto no es true.
  3. Lanza NumberFormatException.
  4. Lanza InputMismatchException.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Una prueba de un conversor de segundos utiliza 61 segundos y espera «1 min 1 s». El programa imprime «1 min 61 s». Utiliza minutes = totalSeconds / 60; seconds = totalSeconds;. ¿Qué corrección arregla el cálculo?
  1. seconds = totalSeconds / 60;
  2. seconds = minutes % 60;
  3. seconds = totalSeconds % 60;
  4. seconds = totalSeconds - minutes;
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un Scanner utiliza 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?
  1. Usar next() para la etiqueta después de la lectura numérica.
  2. Eliminar Locale.US y mantener ambas lecturas sin cambios.
  3. Leer la etiqueta dos veces y concatenar los resultados.
  4. Leer la masa con Double.parseDouble(scanner.nextLine()).
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

¿Qué secuencia de escape coloca una comilla doble dentro de un literal de cadena ordinario de Java?
  1. \n
  2. \t
  3. \"
  4. \\
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);
  1. R=47:13
  2. R=11:13
  3. R=67:13
  4. R=47:67
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un taller tiene 83 piezas. Cada bandeja contiene 15 piezas. ¿Cuántas bandejas completas y piezas sobrantes hay?
  1. 5 bandejas y 3 piezas
  2. 6 bandejas y 8 piezas
  3. 6 bandejas y 7 piezas
  4. 5 bandejas y 8 piezas
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);
  1. 34
  2. 43
  3. 84
  4. 33
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué expresión convierte de nuevo en el carácter 'E' el resultado de sumar 2 al código de carácter de 'C'?
  1. (char) 'C' + 2
  2. (char) ('C' + 2)
  3. (int) ('C' + 2)
  4. "C" + 2
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);
  1. 1:5.75
  2. 0:5.0
  3. 0:5.75
  4. 1:5.0
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();
  1. name = "West", full = " Lab"
  2. name = "West Lab", full = ""
  3. name = "", full = "West"
  4. name = "", full = "West Lab"
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);
  1. 25% / 4.2
  2. 25% / 4.3
  3. 25%% / 4.3
  4. 25% / 4.250000
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un programa lee dos puntuaciones enteras de una prueba en líneas separadas, 11 y 14. Debe almacenar su media fraccionaria y mostrar «Mean: 12.50» con un salto de línea final, usando un punto en todas las computadoras. ¿Qué código de entrada, cálculo y salida cumple estos requisitos? Hay un Scanner llamado scanner preparado y Locale está importado.
  1. int a = scanner.nextInt(); int b = scanner.nextInt(); double mean = (a + b) / 2; System.out.printf(Locale.US, "Mean: %.2f%n", mean);
  2. int a = Integer.parseInt(scanner.nextLine()); int b = Integer.parseInt(scanner.nextLine()); double mean = (a + b) / 2.0; System.out.printf("Mean: %.2f%n", mean);
  3. int a = Integer.parseInt(scanner.nextLine()); int b = Integer.parseInt(scanner.nextLine()); double mean = (a + b) / 2.0; System.out.printf(Locale.US, "Mean: %.2f%n", mean);
  4. int a = Integer.parseInt(scanner.nextLine()); int b = Integer.parseInt(scanner.nextLine()); double mean = (a + b) / 2.0; System.out.println("Mean: " + mean);
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un programa indica el tiempo de viaje de una ruta como horas enteras y minutos restantes, redondeado al minuto más cercano. Para 121,5 km recorridos a una velocidad constante de 54 km/h, ¿qué salida debe producir?
  1. 2 h 15 min
  2. 2 h 25 min
  3. 2 h 0 min
  4. 3 h 0 min
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

75 Términos Clave, cada uno con su definición

A

Análisis sintáctico
El análisis sintáctico interpreta texto según un formato y lo convierte en un valor utilizable, como un int o un double.
Analizar la cadena String «72» permite a un programa sumar 8 numéricamente en lugar de construir el texto «728».
Anchura de campo
Una anchura de campo es el número mínimo de caracteres reservados para un valor con formato; se añaden espacios cuando el valor es más corto.
Dar formato a 7 con %4d produce tres espacios iniciales antes del dígito para llenar el campo de cuatro caracteres.
Aproximación en coma flotante
Una aproximación en coma flotante es un valor binario representable cercano que se utiliza cuando una fracción decimal no puede almacenarse exactamente.
Unas pequeñas cifras decimales adicionales al final de 1.1 * 3 revelan la aproximación en coma flotante en el resultado mostrado.
Asignación
Una asignación evalúa una expresión del lado derecho y almacena su valor en la variable u otra ubicación del lado izquierdo.
Después de count = count + 2;, count contiene dos más que el valor que tenía antes de esa sentencia.
Asignación compuesta
Una asignación compuesta combina una operación con una asignación e incluye una conversión de vuelta al tipo de la variable del lado izquierdo.
La sentencia total += 5; aumenta un total int en 5 y almacena el valor actualizado en total.

B

Bloque
Un bloque es un grupo de sentencias encerradas entre llaves de apertura y cierre, que permite a Java tratarlas como un solo cuerpo.
Las llaves después de la cabecera de main rodean las sentencias que pertenecen al cuerpo de ese método.
boolean
El tipo boolean almacena uno de los dos valores de verdad, true y false, y no acepta números como sustitutos.
La declaración boolean isMember = true; almacena un valor de verdad sin usar comillas ni un número.

C

Cadena de caracteres (String)
Una cadena String es un tipo de clase de Java para una secuencia de caracteres de texto, incluida la secuencia vacía válida que se escribe como "".
Una cadena String puede contener la etiqueta «Room 204» sin tratar sus dígitos como un número para la aritmética.
Cadena de formato
Una cadena de formato combina texto literal con especificadores que empiezan por un signo de porcentaje y controlan dónde y cómo aparecen los valores proporcionados.
La cadena de formato "Mass: %.2f kg%n" coloca una medida con dos decimales entre su etiqueta y su unidad.
Cadena vacía
Una cadena vacía es una cadena String sin caracteres, escrita como dos comillas dobles consecutivas sin nada entre ellas.
Empezar con "" + 'A' + 'B' hace que las sumas construyan texto y den la cadena String «AB».
Caso de prueba
Un caso de prueba especifica entradas y un resultado esperado para poder comprobar el comportamiento real de un programa frente a una respuesta conocida.
El caso de prueba de 120 km a 60 km/h espera 2 h 0 min de un programa de conversión de tiempo de viaje.
char
El tipo char almacena una unidad de código UTF-16 de 16 bits, escrita como literal entre comillas simples y numerada de 0 a 65 535.
El carácter '7' tiene el código 55, por lo que almacenarlo como char no lo convierte en el valor entero 7.
Clase
Una clase es una estructura de programa Java con nombre cuyo cuerpo contiene miembros, como métodos; un primer programa clásico declara una clase.
La declaración public class Greeting abre la clase que contiene el método main del programa.
Clase Math
La clase Math proporciona métodos estáticos y constantes ya disponibles para el trabajo numérico, incluidos raíces, potencias y redondeo.
La llamada Math.sqrt(81) calcula una raíz cuadrada sin requerir una importación ni una definición de método.
Clase Scanner
Un Scanner es una clase de Java que lee la entrada como líneas o unidades de entrada y puede convertir estas unidades en valores primitivos, como números.
Un Scanner conectado a System.in puede leer el nombre de un usuario y las medidas que necesita un programa.
Código de bytes
El código de bytes es la forma compilada de las instrucciones que se almacena en archivos .class de Java y ejecuta una máquina virtual de Java adecuada.
Una compilación correcta crea código de bytes que el lanzador java puede ejecutar mediante la JVM.
Código fuente
El código fuente es el texto Java legible para las personas, guardado en un archivo .java antes de que el compilador lo traduzca para ejecutarlo.
Editar un mensaje en el código fuente cambia el siguiente programa compilado después de guardar y compilar.
Comentario
Un comentario es texto explicativo del código fuente que el compilador ignora, escrito después de // o entre /* y */.
El comentario // Convert to minutes explica por qué un cálculo de tiempo multiplica un valor en horas por 60.
Compilador
Un compilador comprueba el código fuente según las reglas del lenguaje y traduce el código válido a otra forma, como código de bytes de Java.
Ejecutar javac Notice.java invoca el compilador, que informa de un error si falta un punto y coma.
Concatenación
La concatenación une valores en una nueva cadena String y convierte un operando que no es String en texto cuando el otro operando es una cadena String.
La concatenación "Count: " + 8 construye un mensaje que contiene una etiqueta, un espacio y un dígito.
Configuración regional (locale)
Una configuración regional es un ajuste de idioma y región que controla convenciones como el separador decimal en la entrada numérica y el formato.
Configurar un Scanner con Locale.US hace que la entrada decimal con punto sea coherente en distintas computadoras.
Constante
Una constante es un valor fijo; una variable final de Java puede recibir un valor una vez y no puede reasignarse después.
La constante MINUTES_PER_HOUR da al número 60 un nombre útil en cálculos de conversión de tiempo.
Conversión de ampliación
Una conversión de ampliación es una conversión numérica automática que sigue las rutas de tipos permitidas por Java, como de int a long o a double.
Asignar un recuento int a una medida double lo convierte automáticamente y produce una forma decimal.
Conversión de reducción
Una conversión de reducción pasa a una representación numérica más restringida, como de double a int, y puede perder información.
Convertir 6,75 a int es una reducción porque el destino no puede conservar su parte fraccionaria.
Conversión explícita de tipo
Una conversión explícita de tipo solicita expresamente una conversión colocando el tipo de destino entre paréntesis antes del valor que se convierte.
En (double) total / count, la conversión explícita cambia el tipo de un operando antes de realizar la división.

D

Declaración
Una declaración introduce el nombre y el tipo de una variable; también puede incluir un inicializador que proporcione un valor inicial.
La declaración int count; introduce un nombre, pero count aún necesita un valor antes de leerse.
Decremento
Un decremento disminuye en uno el valor de una variable; el operador -- de Java realiza esta actualización sin una asignación de resta separada.
La sentencia secondsLeft--; reduce en exactamente uno el número almacenado de segundos restantes.
Desbordamiento de enteros
El desbordamiento de enteros ocurre cuando un cálculo entero supera el rango de su tipo y vuelve al otro extremo, dando un valor diferente.
Multiplicar dos valores int grandes puede causar un desbordamiento antes de que su producto se asigne a una variable long.
Dividendo
Un dividendo es el valor que se divide, escrito a la izquierda de / o % en una expresión de división de Java con dos operandos.
En -11 % 4, el dividendo negativo explica por qué el resto distinto de cero también es negativo.
División entera
La división entera divide dos operandos enteros y descarta cualquier parte fraccionaria del cociente hacia cero.
La expresión Java 23 / 5 da 4 grupos completos y deja la fracción fuera del cociente.
double
El tipo double almacena valores binarios en coma flotante de 64 bits y suele conservar entre 15 y 17 cifras decimales significativas aproximadamente.
Una distancia de 18,75 km puede almacenarse como double para que la aritmética posterior conserve los resultados fraccionarios.

E

Error en tiempo de compilación
Un error en tiempo de compilación es una infracción detectada mientras Java comprueba el código fuente, que impide que este se compile correctamente.
Un literal de cadena ordinario sin cerrar produce un error en tiempo de compilación antes de que el programa pueda ejecutarse.
Error en tiempo de ejecución
Un error en tiempo de ejecución es un fallo durante la ejecución de un programa, que suele indicarse mediante una excepción que detiene el programa.
Dividir entre una variable entera que contiene cero produce un error en tiempo de ejecución en la sentencia de división.
Error lógico
Un error lógico es un fallo que hace que un programa produzca un resultado incorrecto aunque se compile y termine su ejecución.
Imprimir una media de 4,0 cuando el resultado esperado es 4,75 revela un error lógico en el cálculo.
Especificador de formato
Un especificador de formato es una instrucción que empieza por un signo de porcentaje dentro de una cadena de formato, como %d para un entero o %n para un salto de línea.
Cada %f consume un valor en coma flotante, mientras que %n añade un separador de líneas sin consumir un valor.
Excepción InputMismatchException
Una InputMismatchException es una excepción en tiempo de ejecución producida por una lectura de unidad de entrada de Scanner cuando la unidad no corresponde al tipo solicitado.
Escribir «3.5» para una llamada a nextInt() causa InputMismatchException porque se requiere un entero.
Excepción NumberFormatException
Una NumberFormatException es una excepción en tiempo de ejecución que se produce cuando el análisis numérico no puede convertir el texto proporcionado al tipo solicitado.
Intentar analizar «eight» con Integer.parseInt causa NumberFormatException durante la ejecución.
Expresión
Una expresión es código Java que calcula un valor o realiza una operación, como sumar dos valores o llamar a un método.
La expresión width * height calcula un área que puede asignarse o pasarse a una llamada de impresión.

F

float
El tipo float almacena valores binarios en coma flotante de 32 bits con una precisión de unas siete cifras decimales significativas.
El sufijo f de 2.75f marca un literal float, mientras que 2.75 sin sufijo es un literal double.

I

Incremento
Un incremento aumenta en uno el valor de una variable; el operador ++ de Java realiza esta actualización en una sola sentencia.
Una sentencia independiente count++; cambia un recuento almacenado de 8 a 9 antes de que se ejecute la siguiente sentencia.
Inicialización
La inicialización da a una variable su primer valor, a menudo en la misma sentencia que declara el nombre y el tipo de la variable.
La línea double speed = 72.5; declara speed y lo inicializa con una medida en km/h.
int
El tipo int almacena números enteros con signo de 32 bits, que van de −2 147 483 648 a 2 147 483 647.
Un recuento pequeño de inventario cabe en un int, pero un recuento superior a su máximo necesita un tipo entero mayor.

K

Kit de desarrollo de Java (JDK)
El JDK, o kit de desarrollo de Java, es el conjunto de herramientas de software que proporciona las herramientas de desarrollo de Java, incluidas javac y java.
Una computadora necesita un JDK para compilar el código fuente desde una terminal y después iniciar el programa resultante.

L

Literal
Un literal es un valor escrito directamente en el código fuente, cuya forma y sufijo determinan el tipo de ese valor escrito.
Los literales 8, 8L y 8.0 expresan cantidades similares, pero tienen los tipos int, long y double.
Literal de cadena
Un literal de cadena es texto escrito entre comillas dobles en el código fuente de Java, con secuencias de escape para caracteres especiales.
El literal de cadena "Hello, team" incluye una coma y un espacio que aparecen exactamente en la salida.
long
El tipo long almacena números enteros con signo de 64 bits y es útil cuando un entero exacto puede superar el rango de int.
El sufijo de 5_000_000_000L crea un literal que puede inicializar un recuento entero grande.

M

Máquina virtual de Java (JVM)
La JVM, o máquina virtual de Java, es el sistema de ejecución que ejecuta código de bytes de Java en una computadora determinada.
El mismo archivo de clase compatible puede ejecutarse en distintos sistemas operativos que tengan JVM adecuadas.
Método Double.parseDouble
El método Double.parseDouble convierte texto válido de coma flotante en un double utilizando un punto decimal independientemente de la configuración regional.
Una línea de entrada completa que contiene «2.75» puede analizarse como double tanto en sistemas con punto decimal como en sistemas con coma decimal.
Método Integer.parseInt
El método Integer.parseInt convierte texto entero válido en un int y rechaza el texto no válido con NumberFormatException.
Integer.parseInt("72") devuelve 72, pero añadir un espacio inicial hace que ese texto entero no sea válido.
Método main
El método main es el método de entrada donde el lanzador de Java comienza a ejecutar las instrucciones de un programa pequeño.
Colocar dos sentencias de impresión dentro de main hace que sus mensajes aparezcan en el orden escrito.
Método nextLine
El método nextLine lee el texto restante de la línea de entrada actual y consume su fin de línea sin devolverlo.
Después de una unidad de entrada entera al final de una línea, nextLine() puede devolver inmediatamente una cadena String vacía.
Método print
El método print escribe un valor en la salida sin añadir un salto de línea, por lo que la siguiente salida permanece en la misma línea.
Usar print("Name: ") permite a un usuario escribir una respuesta justo al lado de la solicitud en la pantalla.
Método printf
El método printf escribe valores según una cadena de formato y solo añade un salto de línea si esa cadena lo solicita.
Usar printf("%d items%n", 8) imprime el recuento, la palabra «items» y un separador de líneas final.
Método println
El método println escribe un valor seguido de un salto de línea; sin argumento, escribe solo el salto de línea.
Dos llamadas sucesivas a println muestran dos líneas separadas aunque sus literales no contengan saltos de línea.
Método String.format
El método String.format aplica una cadena de formato y devuelve el texto resultante en lugar de imprimirlo directamente.
Un programa puede almacenar String.format(Locale.US, "%.1f km", 8.25) e imprimir ese texto después.

N

Notación científica
La notación científica muestra un número como un coeficiente multiplicado por una potencia de diez y utiliza E en los valores impresos por Java.
El valor impreso 1.0E-4 representa 0,0001, por lo que el exponente negativo describe una magnitud pequeña.

O

Operando
Un operando es un valor o una expresión proporcionados a un operador; los tipos de los operandos ayudan a determinar qué operación realiza Java.
En "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)
La parte entera inferior de un valor es el mayor número de valor entero que no lo supera; Math.floor lo devuelve como double.
Para una fracción negativa como -4,2, la parte entera inferior es -5,0, que está por debajo de ella en la recta numérica.
Parte entera superior (ceiling)
La parte entera superior de un valor es el menor número de valor entero que no es inferior a él; Math.ceil lo devuelve como double.
Para 4,2 grupos, la parte entera superior es 5,0, que representa el siguiente entero en dirección ascendente.
Plan de entrada, cálculo y salida
Un plan de entrada, cálculo y salida identifica qué lee un programa, cómo procesa esos valores y qué resultados presenta.
Una calculadora de velocidad lee distancia y tiempo, los divide utilizando unidades compatibles y etiqueta su resultado.
Precedencia de operadores
La precedencia de operadores es la prioridad que determina cómo se agrupan las operaciones cuando una expresión contiene distintos operadores.
La multiplicación tiene precedencia sobre la suma en 4 + 3 * 2, por lo que el producto se forma primero.
Precisión
La precisión describe cuánto detalle significativo puede representar un tipo numérico; un rango amplio no garantiza valores exactos.
Convertir un int grande a float puede reducir la precisión aunque Java permita la conversión de ampliación.
Precisión de formato
La precisión de formato controla el detalle de la salida con formato; con %f, establece el número de dígitos después del separador decimal.
La precisión de %.2f convierte un 4,5 mostrado en «4.50» sin modificar la variable numérica.

R

Redondeo
El redondeo sustituye un valor por otro cercano con una precisión elegida; Math.round utiliza el entero más cercano y redondea los empates hacia arriba.
El redondeo de un tiempo a minutos enteros puede realizarse después de calcular la duración como double en minutos.
Resto
Un resto es el valor que queda después de una división entera; el operador % de Java da un resultado distinto de cero con el signo del dividendo.
Al distribuir 23 piezas en grupos de 5, 23 % 5 da las 3 piezas que quedan fuera de los grupos completos.

S

Salida esperada
La salida esperada es el texto y los valores que un programa correcto debería producir para unas entradas especificadas, calculados antes de la prueba.
Comparar la salida esperada con la salida real puede revelar un número incorrecto, una unidad ausente o un espacio adicional.
Secuencia de escape
Una secuencia de escape es un código que comienza con una barra invertida dentro de un literal y representa un carácter, como una nueva línea o una comilla.
La secuencia de escape permite que una llamada de impresión coloque la siguiente parte de su mensaje en otra línea.
Sentencia
Una sentencia es una instrucción de Java, como una asignación o una llamada a método; una sentencia de impresión termina con un punto y coma.
La línea System.out.println("Ready"); es una sentencia que imprime un mensaje y un salto de línea.

T

Tabla de seguimiento
Una tabla de seguimiento registra los valores de las variables después de sentencias sucesivas para poder seguir los cambios sin ejecutar el código.
Una tabla de seguimiento de un intercambio muestra qué valor original se conserva en la variable temporal.
Tipo primitivo
Un tipo primitivo es uno de los ocho tipos de valor integrados de Java: byte, short, int, long, float, double, char o boolean.
Un recuento almacenado como int usa un tipo primitivo, mientras que un nombre almacenado como String usa un tipo de clase.
Truncamiento
El truncamiento descarta la parte fraccionaria hacia cero cuando un valor en coma flotante dentro del rango se convierte en un entero.
Convertir explícitamente -8,6 a int da -8 mediante truncamiento, mientras que redondear hacia abajo daría -9.

U

Unidad de entrada (token)
Una unidad de entrada es una parte de la entrada separada por un delimitador; un Scanner predeterminado utiliza espacios en blanco para separar sus unidades.
La entrada «4 7» contiene dos unidades de entrada numéricas que pueden leerse con dos llamadas sucesivas a nextInt().

V

Valor intermedio
Un valor intermedio es un resultado producido durante un cálculo antes de la respuesta final, útil para seguir dónde comienza un error.
Imprimir el valor intermedio totalMinutes puede mostrar si una descomposición incorrecta del tiempo comenzó antes de la división.
Valor no numérico (NaN)
NaN, que significa «valor no numérico», es un resultado especial en coma flotante para una operación numérica indefinida, como cero dividido por cero.
El cálculo double 0.0 / 0 produce NaN en lugar de lanzar una excepción de división entera.
Variable
Una variable es un espacio de almacenamiento con nombre para un valor de un tipo determinado, que permite a las sentencias posteriores leer o actualizar el valor almacenado.
La variable distanceKm almacena una medida que un cálculo posterior de tiempo divide entre la velocidad.

Sobre esta unidad

Por StudeliInformar de un error

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.

Comenzar