introducción a la programación y la informática. tema 7

14
Tema 7. Entrada y Salida elemental Introducción a la Informática y la Programación (IIP) Curso 2011/12 Departamento de Sistemas Informáticos y Computación

Upload: andres-garcia-garcia

Post on 04-Jul-2015

177 views

Category:

Education


1 download

DESCRIPTION

Introduccion a la programación y la informática, Universitat Politècnica de València.

TRANSCRIPT

Page 1: Introducción a la programación y la informática. Tema 7

Tema 7. Entrada y Salida elemental

Introducción a la Informática y la Programación (IIP)

Curso 2011/12

Departamento de Sistemas Informáticos y Computación

Page 2: Introducción a la programación y la informática. Tema 7

Contenidos

1. Introducción 2. Salida por pantalla

System.out.println y System.out.print

Salida formateada con printf

3. Entrada desde teclado La clase Scanner

27/10/2011 IIP - Curs 2011/12 2

Page 3: Introducción a la programación y la informática. Tema 7

Introducción

• En Java la entrada/salida se realiza utilizando flujos (streams), que son secuencias de información que tienen una fuente (flujos de entrada) o un destino (flujos de salida).

27/10/2011 IIP - Curs 2011/12 3

Programa

Fuente

Destino

flujo de entrada

flujo de salida

Page 4: Introducción a la programación y la informática. Tema 7

Introducción

• Los flujos predefinidos en Java, en la clase System del paquete java.lang, que permiten realizar la entrada/salida estándar son:

• Hay un tercer flujo predefinido System.err, idéntico a System.out, usado para mostrar mensajes de error.

• Lo habitual es que estos flujos estándar se encuentren asociados por defecto al teclado (el de entrada) y a la pantalla (el de salida).

• Se pueden definir otros flujos para que un programa pueda leer desde o escribir en ficheros. Una vez definidos, se utilizan de manera similar a los flujos System.in y System.out.

27/10/2011 IIP - Curs 2011/12 4

Entrada estándar Salida estándar

System.in System.out

Page 5: Introducción a la programación y la informática. Tema 7

Salida por pantalla: System.out.println y System.out.print

• La sintaxis de la instrucción que muestra una línea por pantalla es:

siendo Elem_i cada uno de los elementos a mostrar.

• Sin argumentos muestra una línea en blanco.

• La única diferencia entre System.out.println y System.out.print es que con println, la siguiente salida a mostrar se muestra en una línea nueva, mientras que con print, la salida se muestra en la misma línea.

27/10/2011 IIP - Curs 2011/12 5

System.out.println(Elem_1 + Elem_2 + ... + Elem_n);

double r = 5.5; String c = "rojo"; System.out.println("Círculo de radio " + r + ", color " + c); System.out.println(); System.out.println(" y centro (" + 6 + "," + 3 + ")."); System.out.print("Círculo de radio " + r + ", color " + c); System.out.println(" y centro (" + 6 + "," + 3 + ").");

Page 6: Introducción a la programación y la informática. Tema 7

Salida por pantalla: Salida formateada con printf

• La sintaxis de la instrucción que presenta la salida en un formato específico es:

• String con formato es un String formado por texto normal y

especificadores de formato que indican como se van a formatear los valores de la lista de argumentos a formatear.

• Por ejemplo, se puede mostrar por pantalla el valor de Math.PI con tres dígitos decimales utilizando:

System.out.printf(“El valor de Math.PI es %.3f \n”, Math.PI);

que mostraría:

• Mientras que utilizando:

System.out.println(“El valor de Math.PI es ” + Math.PI);

se obtendría:

27/10/2011 IIP – Curs 2011/12 6

System.out.printf(String con formato, Lista de argumentos a formatear);

El valor de Math.PI es 3,142

El valor de Math.PI es 3.141592653589793

Page 7: Introducción a la programación y la informática. Tema 7

Salida por pantalla: Salida formateada con printf

• Un especificador de formato comienza con el carácter % y finaliza con un carácter que indica el tipo de conversión a realizar, denominado indicador de conversión. Además, puede contener otros valores que controlen el diseño del valor a convertir.

% [índice_argumento$] [flags] [anchura] [.precisión] indicador de conversión

27/10/2011 IIP - Curso 2011/12 7

• Es un carácter que especifica el tipo del valor que se va a mostrar y su formato.

• Para byte, short, int y long: • d --- formato decimal • o --- formato octal • x, X --- formato hexadecimal

• Para float y double: • e, E --- notación científica

informatizada (p.e., 3.142e+00) • f, F --- notación decimal (p.e.,

3,142) • g, G --- notación científica general

• Para conversiones a String: s, S

• Son opcionales y dependen del indicador de conversión:

• índice_argumento es un entero que indica la posición de el argumento en la lista de argumentos a formatear.

• flags permiten, entre otras cosas, la justificación a la izquierda o derecha.

• anchura indica el número mínimo de caracteres que aparecerán en la salida (útil para alinear columnas de datos).

• precisión indica, en la conversión de valores reales, el número de cifras decimales que han de aparecer.

Page 8: Introducción a la programación y la informática. Tema 7

27/10/2011 IIP - Curs 2011/12

7 en total 3 después del . decimal

notación decimal según Locale (punto decimal)

10 en total justificado a la izquierda

en mayúsculas

System.out.printf(“%4d, el %–4d, el %02d y el %2d.\n”,1,2,7,333);

System.out.printf(“%7.3f %1$14.8e %1$1.5g”,Math.PI);

System.out.printf(Locale.US,“%7.3f %10s %2$–10S”,Math.PI,“Bye”);

8

1 , e l 2 , e l 0 7 y e l 3 3 3 .

3 , 1 4 2 3 . 1 4 1 5 9 2 6 5 e + 0 0 3 . 1 4 1 6

4 mínimo 4 mínimo Justificado izquierda

2 mínimo

7 en total 3 después de la , decimal

notación decimal según Locale (coma decimal)

14 en total 8 después del . decimal

notación científica

tantos como sea necesario 5 en total, incluidos los de

delante y detrás del . decimal notación decimal o científica

dependiente del valor

3 . 1 4 2 B y e B Y E

10 en total

2 mínimo Relleno con 0 a la izquierda

Salida por pantalla: Salida formateada con printf

Page 9: Introducción a la programación y la informática. Tema 7

Entrada desde teclado: la clase Scanner

• El objeto System.in permite leer datos introducidos por el usuario desde teclado pero su uso no es tan sencillo com el del objeto System.out.

• La clase Scanner forma parte del paquete java.util y permite leer valores introducidos por el teclado de una forma muy cómoda para el programador.

• Al comienzo del código añadir:

• Declaración:

• El método useLocale permite establecer la configuración local de un Scanner.

• Ejemplos de uso: o directamente,

27/10/2011 IIP – Curs 2011/12 9

Scanner identificador = new Scanner(System.in);

import java.util.Scanner;

Scanner teclado = new Scanner(System.in);

teclado.useLocale(Locale.US);

public Locale useLocale (Locale l)

Scanner teclado = new Scanner(System.in).useLocale(Locale.US);

Page 10: Introducción a la programación y la informática. Tema 7

Entrada desde teclado: la clase Scanner

• Algunos métodos de la clase Scanner:

27/10/2011 IIP – Curs 2011/12 10

Definición - cabecera

public String next ()

public String nextLine ()

public byte nextByte ()

public short nextShort ()

public int nextInt ()

public long nextLong ()

public float nextFloat ()

public double nextDouble ()

public boolean nextBoolean ()

Definición - cabecera

public boolean hasNext ()

public boolean hasNextLine ()

public boolean hasNextByte ()

public boolean hasNextShort ()

public boolean hasNextInt ()

public boolean hasNextLong ()

public boolean hasNextFloat ()

public boolean hasNextDouble ()

public boolean hasNextBoolean ()

Page 11: Introducción a la programación y la informática. Tema 7

Entrada desde teclado: la clase Scanner

27/10/2011 IIP – Curs 2011/12 11

import java.util.Scanner; public class TestScanner { public static void main (String[] args) { String nombre; int a_1, a_2; Scanner teclado = new Scanner(System.in); System.out.println("Introduce tu nombre"); nombre = teclado.nextLine(); System.out.println("Introduce tu año de nacimiento y el actual"); a_1 = teclado.nextInt(); a_2 = teclado.nextInt(); System.out.print("Te llamas " + nombre); System.out.println(" y tienes " + (a_2 - a_1) + " años"); } } Introduce tu nombre

Luisa García Introduce tu año de nacimiento y el actual 1982 2011 Te llamas Luisa García y tienes 29 años

Page 12: Introducción a la programación y la informática. Tema 7

Entrada desde teclado: la clase Scanner

27/10/2011 IIP – Curs 2011/12 12

import java.util.*; public class TestScannerLinea { public static void main (String[] args) { Scanner teclado = new Scanner(System.in); System.out.print("Introduce el entero: "); int n = teclado.nextInt(); //teclado.nextLine(); System.out.print("Introduce una línea: "); String s1 = teclado.nextLine(); System.out.print("Introduce la otra línea: "); String s2 = teclado.nextLine(); System.out.println("\nEntero: " + n); System.out.println("Línea 1: " + s1); System.out.println("Línea 2: " + s2); } } Introduce el entero: 5

Introduce una línea: Introduce la otra línea: hola Entero: 5 Línea 1: Línea 2: hola

Page 13: Introducción a la programación y la informática. Tema 7

Entrada desde teclado: la clase Scanner

27/10/2011 IIP – Curs 2011/12 13

import java.util.Scanner; import java.util.Locale; public class TestScannerLocale { public static void main (String[] args) { Scanner teclado = new Scanner(System.in); System.out.print("El teclado está configurado por defecto en "); System.out.println(Locale.getDefault()); System.out.print("Escribe un número real (con coma decimal): "); double nReal1 = teclado.nextDouble(); System.out.println("El valor real leído es " + nReal1); teclado.useLocale(Locale.US); System.out.print("Escribe un número real (con punto decimal): "); double nReal2 = teclado.nextDouble(); System.out.println("El valor real leído es " + nReal2); } }

El teclado está configurado por defecto en es_ES Escribe un número real (con coma decimal): 6,75 El valor real leído es 6.75 Escribe un número real (con punto decimal): 8.5 El valor real leído es 8.5

Page 14: Introducción a la programación y la informática. Tema 7

Entrada desde teclado: la clase Scanner

27/10/2011 IIP – Curs 2011/12 14

import java.util.*; public class TestScannerChar { public static void main (String[] args) { Scanner teclado = new Scanner(System.in); System.out.print("Introduce un carácter: "); char c = teclado.next("\\S").charAt(0); System.out.println("\nEl carácter leído es: " + c); } }

Introduce un carácter: k El carácter leído es: k