• No se han encontrado resultados

Instrucción de entrada (lectura)

In document Programacion Java (página 93-98)

En una sección anterior se aprendió cómo poner datos en variables utilizando la instrucción de asignación. En esta sección se aprenderá cómo poner datos en variables mediante el dispositivo de entrada estándar empleando instrucciones de entrada (o lectura) en Java.

NOTA En la mayoría de los casos el dispositivo de entrada es el teclado.

Cuando la computadora obtiene los datos mediante el teclado, se dice que el usuario actúa interactivamente.

LECTURA DE DATOS UTILIZANDO LA clase Scanner

Para poner datos en variables a partir del dispositivo de entrada, Java proporciona la clase Scanner. Empleando esta clase, primero se crea un objeto de flujo de entrada y se asocia con el dispositivo de entrada estándar. La instrucción siguiente efectúa esto:

static Scanner console = new Scanner (System.in);

Esta instrucción crea el objeto de flujo de entrada console y lo asocia con el dispositivo de entrada estándar. (Observe que Scanner es una clase predefinida en Java y que la instrucción anterior crea console para que sea un objeto de esta clase.) El objeto console lee la siguiente entrada como sigue:

a. Si el siguiente símbolo de entrada se puede interpretar como un entero, entonces la expresión:

console.nextInt()

recupera este entero; es decir, el valor de esta expresión es ese entero.

b. Si el siguiente símbolo de entrada se puede interpretar como un número de punto flo- tante, entonces la expresión:

console.nextDouble()

recupera ese número de punto flotante; es decir, el valor de esta expresión es ese número de punto flotante. (Observe que un entero se puede tratar como un número de punto flotante con parte decimal 0.)

c. La expresión:

console.next()

recupera el siguiente símbolo de entrada como una cadena; es decir, el valor de esta expresión es la siguiente cadena de entrada. (Observe que si el siguiente símbolo de entrada es un número, esta expresión interpreta ese número como una cadena.)

2

Entrada | 57

2

d. La expresión:

console.nextLine()

recupera la siguiente entrada como una cadena hasta el final de la línea; es decir, el valor de esta expresión es la siguiente línea de entrada. (Observe que esta expresión también lee el carácter de nueva línea, pero dicho carácter no se almacena como parte de la ca- dena.)

Mientras se explora por la siguiente entrada, las expresiones console.nextInt(), console. nextDouble() y console.next() saltan los caracteres de espacio en blanco. Los caracteres de espacio en blanco son espacios y ciertos caracteres no imprimibles, como nueva línea y tabulador.

NOTA System.in se denomina objeto de flujo de entrada estándar y se diseña para ingresar datos mediante el dispositivo de entrada estándar. Sin embargo, el objeto System.in extrae datos en forma de bytes del flujo de entrada. Por tanto, utilizando System.in primero se crea un objeto Scanner, como console, como se mostró antes, de manera que los datos se puedan extraer en una forma deseada. (El significado de la palabra new se explica en el capítulo 3.)

NOTA La claseScanner se agrega a la biblioteca de Java en la versión 5.0 de Java. Por tanto, esta clase no está disponible en versiones anteriores de Java.

EJEMPLO 2-15 EXAMPLE 2-1

Suponga que miles es una variable de tipo double. Imagine también que la entrada es 73.65. Considere la siguiente instrucción:

miles = console.nextDouble();

Esta instrucción causa que la computadora obtenga la entrada, la cual es 73.65, mediante el dispositivo de entrada estándar y la almacena en la variable miles. Es decir, después de la eje- cución de esta instrucción, el valor de la variable miles es 73.65.

En el ejemplo 2-16 se explica aún más cómo ingresar datos numéricos en un programa.

EJEMPLO 2-16 EXAMPLE 2-1

Suponga que se tiene la siguiente declaración:

static Scanner console = new Scanner(System.in);

Considere las siguientes instrucciones: intpies;

Suponga que la entrada es:

23 7

Después, considere las siguientes instrucciones:

pies = console.nextInt(); //Linea 1

pulgadas = console.nextInt(); //Linea 2

La instrucción en la línea 1 almacena el número 23 en la variable pies. La instrucción en la línea 2 almacena el número 7 en la variable pulgadas. Observe que cuando estos números se ingresan en el teclado, están separados por un espacio en blanco. De hecho, se pueden separar con uno o más espacios en blanco, líneas o incluso con el carácter tabulador. (Observe que las instrucciones se han numerado como línea 1 y línea 2, de manera que se pueda hacer referencia a una instrucción particular y explicar su significado.)

El siguiente programa en Java muestra el efecto de las instrucciones de entrada anteriores:

// Este programa ilustra como funcionan las instrucciones de entrada.

importjava.util.*; public classExample2_16 {

staticScanner console = new Scanner(System.in);

public static void main(String[] args) {

int pies; int pulgadas;

System.out.println(""Ingrese dos enteros separados por espacios."); pies = console.nextInt(); pulgadas = console.nextInt(); System.out.println("pies = " + pies); System.out.println("pulgadas = " + pulgadas); } }

Ejecución del ejemplo: (en esta ejecución del ejemplo la entrada del usuario está sombreada).

Ingrese dos enteros separados por espacios. 23 7

pies = 23 pulgadas = 7

En el programa anterior observe la primera línea: import java.util.*;

Esta línea se requiere para utilizar la claseScanner.

2

Entrada | 59

2

NOTA Si el siguiente símbolo de entrada no se puede expresar como un número apropiado, entonces las expresiones console.nextInt() y console.nextDouble() ocasionarán que el programa termine con un mensaje de error (a menos que se tenga cierto cuidado en el pro- grama), indicando un mal acoplamiento de la entrada. Por ejemplo, si la siguiente entrada no se puede expresar como un entero, entonces la expresión console.nextInt() ocasionará que el programa termine, con el mensaje de error indicando un mal acoplamiento de la entra- da. Ejemplos de enteros inválidos son 24w5 y 12.50. En el capítulo 12 se explica por qué el programa termina con el mensaje de error indicando un mal acoplamiento de la entrada y cómo incluir el código necesario para manejar este problema. Hasta entonces, se supondrá que el usuario ingresó números válidos.

El programa en Java en el ejemplo 2-17 ilustra cómo leer cadenas y datos numéricos.

EJEMPLO 2-17 EXAMPLE 2-1

// Este programa ilustra como leer cadenas y datos numericos.

import java.util.*; public class Example2_17 {

static Scanner console = new Scanner(System.in); public static void main(String[] args)

{

String nombre; //Linea 1

String apellido; //Linea 2

int edad; //Linea 3

double peso; //Linea 4

System.out.println("Ingrese apellido, nombre," + "edad y peso separados "

+ "por espacios."); //Linea 5

nombre = console.next(); //Linea 6

apellido = console.next(); //Linea 7

edad = console.nextInt(); //Linea 8

peso = console.nextDouble(); //Linea 9

System.out.println("Nombre: " + nombre

+ " " + apellido); //Linea 10

System.out.println("Edad: " + edad); //Linea 11

System.out.println("Peso: " + peso); //Linea 12

} }

Ejecución del ejemplo: (en esta ejecución del ejemplo la entrada del usuario esta sombreada).

Ingrese nombre, apellido, edad y peso separados por espacios. Sheila Mann 23 120.5

Nombre: Sheila Mann Edad: 23

Peso: 120.5

El programa anterior funciona así: las instrucciones en las líneas 1 a 4 declaran las variables

nombre y apellido de tipo String, edad de tipo int y peso de tipo double. La instruc- ción en la línea 5 es de salida y le indica al usuario qué hacer. (Esas instrucciones de salida se denominan líneas de ingreso.) Como se muestra en la corrida de ejemplo, la entrada para el programa es:

Sheila Mann 23 120.5

La instrucción en la línea 6 lee y asigna la cadena Sheila a la variable nombre; la instrucción en la línea 7 salta el espacio después de Sheila, lee y asigna la cadena Mann a la variable ape- llido. Luego, la instrucción en la línea 8 salta el espacio en blanco después de Mann, lee y almacena 23 en la variable edad. De manera similar, la instrucción en la línea 9 salta el espacio en blanco después de 23, lee y almacena 120.5 en la variable peso.

Las instrucciones en las líneas 10, 11 y 12 producen la tercera, cuarta y quinta líneas de la ejecución del ejemplo.

INICIALIZACIÓN DE VARIABLES

Recuerde, hay dos formas de inicializar una variable: utilizando la instrucción de asignación y una instrucción de lectura. Considere la siguiente declaración:

int pies; int pulgadas;

Considere los dos conjuntos de código siguientes: a) pies = 35;

pulgadas = 6;

System.out.println("Pulgadas totales = " + (12 * pies + pulgadas));

b) System.out.print("Ingrese pies: "); pies = console.nextInt(); System.out.println(); System.out.print("Ingrese pulgadas: "); pulgadas = console.nextInt(); System.out.println();

System.out.print("Pulgadas totales = " + (12 * pies + pulgadas));

En a), pies y pulgadas se inicializan utilizando instrucciones de asignación y en b), estas varia- bles se inicializan empleando instrucciones de entrada. Sin embargo, cada vez que el código en

a) se ejecuta, pies y pulgadas se inicializan al mismo valor, a menos que se edite el código fuente, se cambie el valor, se recompile y se corra. Por otro lado, en b), cada vez que el programa

2

Entrada | 61

2

corre, se invita a ingresar valores para pies y pulgadas. Por tanto, una instrucción de lectura es mucho más versátil que una instrucción de asignación.

En ocasiones es necesario inicializar una variable utilizando una instrucción de asignación. Esto es especialmente verdadero si la variable sólo se emplea para cálculos internos y no para lectura y almacenamiento de datos.

NOTA Recuerde que Java podría no inicializar automáticamente todas las variables cuando se decla- ran. Algunas variables se pueden inicializar cuando se declaran, en tanto que otras se deben inicializar utilizando una instrucción de asignación o una instrucción de lectura. (La iniciali- zación de variables se cubre con más detalle en el capítulo 8.)

NOTA Suponga que quiere almacenar un carácter en una variable char utilizando una instrucción de entrada. Durante la ejecución del programa, cuando se ingresa el carácter, no se incluyen las comillas simples. Suponga que ch es una variable char. Considere la siguiente instruc- ción de entrada:

ch = console.next().charAt(0);

Si se quiere almacenar K en ch utilizando esta instrucción, durante la ejecución del progra- ma se teclea K sin las comillas simples. De manera similar, si se quiere almacenar una cade- na en una variable String empleando una instrucción de entrada, durante la ejecución del programa se ingresa sólo la cadena sin las comillas dobles.

In document Programacion Java (página 93-98)