Entrada y salida de datos por consola¶
Java viene con una biblioteca de clases que se puede usar para realizar tareas comunes. La biblioteca de clases de Java está organizada en un conjunto de paquetes, donde cada paquete contiene una colección de clases relacionadas. En esta sección presentamos las clases System y Scanner que se utilizan para imprimir la salida y leer la entrada de un programa.

El tipo más simple de interfaz de usuario es la interfaz de línea de comandos, en la que la entrada se toma de la línea de comandos a través del teclado y la salida se muestra en la consola. Algunas aplicaciones Java utilizan este tipo de interfaz otros usan interfaz gráfica como veremos más adelante.
Salida de la información¶
En Java, cualquier origen o destino de I/O se considera un flujo de bytes o caracteres. Para realizar la salida, insertamos bytes o caracteres en la secuencia. Para realizar la entrada, extraemos bytes o caracteres del flujo (stream
). Incluso los caracteres introducidos en un teclado, si se consideran como una secuencia de pulsaciones de teclas, se pueden representar como un stream.
En Java, la I/O se maneja a través de métodos que pertenecen a clases contenidas en el paquete java.io
. Ya hemos visto cómo se usa el método de salida println()
para enviar una cadena a la consola.
Los objetos System.out
y System.err
se pueden usar para escribir la salida en la consola. Como sugiere su nombre, el flujo de errores se usa principalmente para mensajes de error, mientras que el flujo de salida se usa para otras salidas impresas.
La única diferencia entre los métodos print()
y println()
es que println()
también imprimirá un retorno de carro y un avance de línea después de imprimir sus datos, lo que permitirá que la salida posterior se imprima en una nueva línea.
System.out.print("Hola");
System.out.print("mundo"):
System.out.println("Texto con salto de línea");
System.out.println("adiós");
Salida:
HolamundoTexto con salto de línea
adiós
Entrada de la información¶
Se ha agregado la clase Scanner
al paquete java.util
que permite la entrada de teclado sin forzar el programador para manejar las excepciones. La clase Scanner está diseñada para ser una forma muy flexible de reconocer fragmentos de datos que se ajustan a patrones específicos de cualquier flujo de entrada.
Para usar la clase Scanner para la entrada de teclado, debemos crear una instancia de Scanner
y asociarla con System.in
. La clase tiene un constructor para este propósito, por lo que la declaración
Scanner sc = new Scanner(System.in);
declara y crea una instancia de un objeto que se puede utilizar para la entrada del teclado. Después de crear un objeto Scanner
, podemos hacer una llamada a nextInt()
, nextDouble()
, o next()
para leer, respectivamente, un entero, un número real, o String del teclado.
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
System.out.print("Introduce un número: ");
int num = sc.nextInt();//Read the integer
System.out.println("El número introducido es: " + num);
}
Cuando se ejecuta el método nextInt()
, no se ejecutan más declaraciones hasta que el método devuelve un valor int
. Normalmente, esto no sucede hasta que el usuario ha escrito los dígitos de un número entero y presiona la tecla Intro.
Para leer un String utilizamos el método next()
.
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
System.out.print("Introduce una palabra: ");
String str = sc.next();
System.out.println(str);
}
System.out.print("Introduce dos números: ");
int num = sc.nextInt();
int num2 = sc.nextInt();
Los espacios en blanco como delimitadores también significan que el método next()
no puede devolver una cadena vacía ni puede devolver una cadena que contenga espacios. Por ejemplo, considere el código:
System.out.print("Introduce un texto separado por espacio en blanco: ");
String str = sc.next();
nextLine()
:
String str = sc.nextLine();
Actividades¶
-
AC 207 (RA1 / CE1e / IC1 / 3p) Escribe un programa que intercambie el valor de dos variables introducidas por entrada
-
AC 208 (RA1 / CE1f CE1i / IC1 / 3p) Crea el siguiente menú utilizando las librerías de entrada/salida (input/output):
Elige una opción: El usuario debe elegir una opción por entrada de teclado. Se le deberá mostrar el número de la opción introducida.*****MENÚ DE SELECCIÓN***** ***** 1. Añadir un entrante.***** ***** 2. Añadir un plato principal.***** ***** 3. Elegir postre.***** ***** 4. No sentarme en este restaurante porque...*****
-
PR 209 (RA1 / CE1b CE1c CE1h CE1i / IC2 / 5p) Escribe un programa que solicite tus apellidos, los asigne a variables e intercambie los valores de estas variables. En este caso para asignar valores a las variables de tipo
String
deberás emplear el métodonextLine()
de la clase Scanner. -
PR 210 (RA1 / CE1b CE1c CE1h CE1i / IC2 / 5p) Escribe un programa llamado
AñoMesDia
que tome como argumento una cantidad de días y calcule a cuántos años, meses y días corresponde. Realiza la suposición de que todos los meses tienen 30 días. -
PR 211 (RA1 / CE1b CE1c CE1h CE1i / IC2 / 5p) Escribe un programa que solicite el valor del lado de un triángulo equilátero (los 3 lados son de igual longitud). Este lado debe almacenarse en una variable de tipo double. El programa calculará el área y el perímetro del triángulo equilátero. El área de cualquier triángulo se calcula mediante la fórmula: á𝑟𝑒𝑎 = (𝑏𝑎𝑠𝑒 × 𝑎𝑙𝑡𝑢𝑟𝑎)/ 2 La altura de un triángulo equilátero se calcula mediante la fórmula: 𝑎𝑙𝑡 = (𝑙𝑎𝑑𝑜 × √3)/ 2. Para calcular la raíz cuadrada se utilizará la expresión
Math.sqrt(número)
PR211
Nota 1: Aunque no se debe mostrar la altura por pantalla, es recomendable guardar su valor en una variable. De esta manera, se simplificará el cálculo posterior del área.
Nota 2: Ante cualquier duda sobre la prioridad de operadores, utiliza los paréntesis. De esta manera te asegurará que el cálculo se realiza correctamente.