Curso básico de Java - #5 - I/O: Scanner y System.out

Buenas coleguis,
En este tema se explicara la forma mas básica y sencilla de interactuar con el usuario; mediante la terminal y el uso de las clases Scanner y System.out.

Para los que no tengan conocimientos en POO (Programación Orientada a Objetos) en particular o en la programación en general no os preocupéis, aunque en algún momento no sepáis porque estamos poniendo algunas cosas, mas adelante explicare mas en detalle las clases, objetos, paquetes, etc.


System.out
Esta clase entre otras utilidades nos permite imprimir caracteres en la terminal.
Ahora mismo nos interesan dos métodos: print() y println().
Si no sabéis que es un metodo, no os preocupéis, se explicara mas adelante, por ahora aprenderemos la sintaxis de esta clase.

System.out.println()
Permite imprimir el contenido que haya entre paréntesis añadiendo un salto de linea al inicio.
Este contenido puede ser de tipo String o no, pero, siempre se pasara automáticamente a String, esto no es importante ahora, pero merece la pena mencionarlo.

Sintaxis
System.out.println([elementos a imprimir]);
Ejemplos
System.out.println("Buenas, yo soy Sugoli15.");  // Imprime: Buenas, yo soy Sugoli15.
System.out.println(5 + 2);  // Imprime: 7.
System.out.println("5" + 2);  // Imprime: 57.
System.out.println("5 + 2 = " + (5 + 2));  // Imprime: 5 + 2 = 7.
System.out.println(true);  // Imprime: true.

Output:

Buenas, yo soy Sugoli15.
7
52
5 + 2 = 7
true

System.out.print()
Funciona igual que println() pero no añade ningún tipo de salto de linea .

Sintaxis
System.out.print([elementos a imprimir]);
Ejemplo
System.out.print("Buenas ");
System.out.print("foro ");
System.out.print(":).");

Output:

Buenas foro :).

Scanner
Esta clase permite la entrada de información de un usuario mediante la terminal.
La utilización de esta clase es un poco mas compleja puesto que primero debemos declarar e inicializar un objeto de esta clase para poder usar sus funciones.
Ademas, deberemos importar la clase del paquetejava.util.

Para los que no esten familiarizados con estos conceptos, no os preocupéis, mas adelante se explicara mas a fondo, por ahora limitaros a seguid la sintaxis aquí descrita.

Importar clase

Lo pondremos en la primera linea del documento, fuera de la clase principal.

import java.util.Scanner;
Sintaxis declaracion
Scanner [nombreObjeto] = new Scaner(System.in);
Sintaxis utilizacion
[nombreObjeto].[metodo*]()

*Metodos:
Hay mas, pero por ahora estos son los que nos interesan.

Metodo Tipo de valor que recoge Descripción
nextLine() String Lee una línea completa (hasta un salto de línea).
nextInt() int Lee un número entero.
nextDouble() double Lee un número con decimales (usa punto, no coma).
nextFloat() float Lee un número decimal de tipo float.
nextLong() long Lee un número entero largo.
nextShort() short Lee un número entero corto.
nextByte() byte Lee un número muy pequeño (byte).
nextBoolean() boolean Lee true o false.

*Si intenta leer un valor que no le corresponde, saltara una excepción y el programa se parara. Veremos mas adelante como controlar estas excepciones.

Cerrar objeto

Aunque hoy en día el objeto Scanear se cierra automáticamente al terminarse el programa, es una buena practica cerrarlo después de su uso (básicamente porque estamos ocupando recursos que no estamos usando).

[nombreObjeto].close();

Ejemplo de lo aprendido

Prueba.java
import java.util.Scanner;

/*Clase principal*/
public class Prueba
{
	/*Metodo principal*/
	public static void main(String[] args)
	{
		Scanner entrada = new Scanner(System.in);  //Decarar e inicializar objeto Scanner.
		
		// Declarar variables para datos a recoger.
		String nombre;
		int edad;
		
		System.out.println("Proporciona tus datos.");
		
		// Pedir y recoger nombre del usuario.
		System.out.print("Nombre: ");
		nombre = entrada.nextLine();
		
		// Pedir y recoger edad del usuario.
		System.out.print("Edad: ");
		edad = entrada.nextInt();
		
		entrada.close();  // Cerrar objeto Scanner.
		
		// Imprimir datos recolectados usando concatenacion.
		System.out.println("Tu nombre es " + nombre + " y tienes " + edad + " años.");
	}
}
Vista terminal

Los comentarios son añadidos por mi para diferenciar que es entrada de datos y que salida.

Proporciona tus datos.  // Output.

// Output. Input.
Nombre: Samuel

// Output. Input.
Edad: 36

Tu nombre es Samuel y tienes 36 años.  // Output.


En el siguiente tema empezaremos a ver los modificadores del flujo de ejecución centrándonos en estructuras de decisión (if - else if - else y switch - case).