Download formato *
Document related concepts
no text concepts found
Transcript
3UiFWLFD San Sebastián, marzo 1999 3URJUDPDFLyQ-DYD -DYLHU*DUFtDGH-DOyQÂ -RVp,JQDFLR5RGUtJXH] $OIRQVR%UD]iOH]Â $OEHUWR/DU]DEDOÂ -HV~V&DOOHMDÂ -RQ*DUFtD Informática 2: Práctica nº 4 página 1 ÍNDICE 1. Práctica nº 4 ................................................................................................................................................................1 1.1 Ejercicio 1. Lectura de tu nombre desde teclado................................................................................................1 1.2 Ejercicio 2. Leer una línea de una sola vez y partirlaen palabras.......................................................................2 1.3 Ejercicio 3: Crear la clase Leer para hacer más sencilla la lectura de variables desde el teclado ......................2 1.4 Ejercicio 4: Crear la clase CuentaCorriente, que permita crear cuentas corrientes y hacer movimientos económicos.........................................................................................................................................................4 1. PRÁCTICA Nº 4 En esta cuarta práctica se van a realizar un ejercicio nuevo, más sencillo que los ejercicios de las anteriores semanas. Sin embargo, lo tendrás que hacer tú solo, partiendo de cero. Al igual que la semana pasada se utilizará una consola o ventana de MS-DOS para realizar los ejercicios de esta práctica. El directorio de la práctica se llamará G:\Inf2Prac04 y normalmente estará ya creado al empezar la práctica (si no lo estuviere deberás crearlo exactamente con el nombre indicado y avisar al responsable de la práctica para incluirte en la recogida). Esta semana también se recogerá la práctica. Es muy importante que todos los ficheros estén dentro del directorio G:\Inf2prac04; en otro caso los ficheros que no estén allí no podrán ser recogidos. 1.1 EJERCICIO 1. LECTURA DE TU NOMBRE DESDE TECLADO Crea un directorio llamado Ejer1, en el directorio de la práctica G:\Inf2Prac04. En este ejercicio se trata de hacer un programa de saludo un poco más amistoso que el Ejercicio 1 de la primera práctica. Aquel ejercicio te saludaba sin más. Éste te va a preguntar tu nombre y luego te saludará utilizando el nombre en el saludo. De paso así aprendemos a introducir variables y cadenas de caracteres desde el teclado. Este tema se trata con bastante detenimiento en el Capítulo 9 de “Aprenda Java como si Estuviera en Primero”. Esta semana empezaremos a aplicar ya algunas de las técnicas explicadas en ese capítulo. Comienza abriendo una ventana MS-DOS con Start/Programs/Command Prompt. En esta ventana ejecuta el comando g:. Ahora deberás ejecutar el fichero JDK117.bat, como en las semanas anteriores Ahora cambia el directorio activo al directorio de la práctica con el comando cd Inf2Prac04. Introduce ahora un fichero llamado Hola2.java por medio de Notepad, que contenga las siguientes sentencias: // fichero Hola2.java import java.io.*; class Hola2 { public static void main(String [] args) throws IOException { System.out.print("Hola, Como te llamas? "); char c; String nombre=""; // read() devuelve un byte y por eso hay que hacer un cast while ( (c=(char)System.in.read()) != ’\r’ ) { nombre = nombre + c; } System.out.println("Hola " + nombre + ". Como estas?"); } // fin de main() } // fin de la clase Hola2 Ya se puede compilar el fichero *.java del directorio actual, tecleando el comando: > javac *.java Informática 2: Práctica nº 4 página 2 Ahora hay que enviar el fichero que contiene el método main(), esto es el fichero Hola2.class a la Java Virtual Machine. Recuerda que esto se hace con el comando: > java Hola2 Si todo ha ido bien el programa te preguntará tu nombre. Introdúcelo, pulsa Intro y observa el resultado, que deberá ser algo así como, Hola TuNombre. Como estas? En este ejercicio el programa ha tenido que leer tu nombre carácter a carácter, pues el método read() de la clase InputStream (a la que pertenece la variable static in de la clase System) sólo lee un carácter cada vez que es llamado. En realidad lee un entero tipo byte, y por eso hay hacer un cast para convertirlo en carácter. La lectura se detiene cuando se encuentra el carácter '\r', que se corresponde con la pulsación de la tecla intro o return. Esta técnica es demasiado molesta, y en el siguiente ejercicio aprenderás a leer toda una línea de una vez. 1.2 EJERCICIO 2. LEER UNA LÍNEA DE UNA SOLA VEZ Y PARTIRLAEN PALABRAS Crea un nuevo directorio llamado Ejer2 en el directorio G:\Inf2Prac04. Crea en él el siguiente fichero llamado Hola3.java. // fichero Hola3.java import java.io.*; import java.util.StringTokenizer; class Hola3 { public static void main(String [] args) throws IOException { System.out.print("Hola, Como te llamas? "); BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); String nombre=""; nombre = teclado.readLine(); System.out.println("Hola " + nombre + ". Como estas?"+’\n’); // para partir la línea en palabras StringTokenizer st = new StringTokenizer(nombre); while (st.hasMoreElements()) { System.out.println(st.nextElement()); } } // fin de main() } // fin de la clase Hola3 Ahora compila y ejecuta este programa. Prueba a introducir el nombre y los dos apellidos. Este programa no sólo lee el nombre (en realidad lee una línea completa), sino que además realiza una operación que tiene muchísimo interés: partir o trocear esa línea en palabras (tokens), utilizando los caracteres en blanco como separadores. Se utiliza para ello la clase StringTokenizer, del package java.util. Puedes observar las características de esta clase en la documentación de Java o en las páginas 130-131 de los Apuntes. Esta clase implementa la interface Enumeration, por lo que es posible utilizar los métodos hasMoreElements() y nextElement(), con los que ya estás familiarizado. Es muy interesante que consultes también la información disponible sobre las clases BufferedReader e InputStreamReader. 1.3 EJERCICIO 3: CREAR LA CLASE LEER PARA HACER MÁS SENCILLA LA LECTURA DE VARIABLES DESDE EL TECLADO La lectura de datos desde teclado (o desde fichero, que es muy similar) es bastante complicada en Java, como lo demuestra el ejemplo anterior. Una forma de simplificar un proceso que se una con Informática 2: Práctica nº 4 página 3 tanta frecuencia es crear una clase con unos métodos static que permitan leer frases y partirlas, leer frases, leer valores int o leer valores double. Esta clase se llama Leer, y los métodos correspondientes leerFrasePartir(), leerFrase(), leerInt() y leerDouble(). Crea un directorio llamado Ejer3 e introduce en ellos los ficheros Hola4.java y Leer.java que se muestran a continuación: // fichero Hola4.java import java.io.*; import java.util.StringTokenizer; class Hola4 { public static void main(String [] args) throws IOException { // para leer una frase y partirla en componentes System.out.print("Hola, Como te llamas? "); String [] nombre; nombre = Leer.leerFrasePartir(); // para imprimir la línea en palabras System.out.println("Hola, Como estas? "); for (int i=0; i<nombre.length; i++) { System.out.println(nombre[i]); } // para leer un entero System.out.print("Que edad tienes? "); int edad = Leer.leerInt(); System.out.println("Tienes " + edad + " years" ); // para leer un double System.out.print("Cuanto mides en metros? "); double altura = Leer.leerDouble(); System.out.println("Mides " + altura + " metros"); } // fin de main() } // fin de la clase Hola4 // fichero Leer.java import java.io.*; import java.util.StringTokenizer; public class Leer { // método para leer frases y partirlas public static String [] leerFrasePartir() throws IOException { BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); String frase=""; frase = teclado.readLine(); // para partir la frase en palabras StringTokenizer st = new StringTokenizer(frase); String [] palabras = new String[st.countTokens()]; int i=0; while (st.hasMoreElements()) { palabras[i++] = new String(st.nextToken()); } return palabras; } Informática 2: Práctica nº 4 página 4 // método para leer frases public static String leerFrase() throws IOException { BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); String frase=""; frase = teclado.readLine(); return frase; } // método para leer enteros public static int leerInt() throws IOException { BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); int num=0; num = Integer.valueOf(teclado.readLine()).intValue(); return num; } // método para leer doubles public static double leerDouble() throws IOException { BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); double d=0.0; d = Double.valueOf(teclado.readLine()).doubleValue(); return d; } } // fin de la clase Leer Compila y ejecuta estos programas. La clase Leer podrá ser utilizada en otros ejercicios, siempre que se necesite leer texto o variables numéricas desde teclado. 1.4 EJERCICIO 4: CREAR LA CLASE CUENTACORRIENTE, QUE PERMITA CREAR CUENTAS CORRIENTES Y HACER MOVIMIENTOS ECONÓMICOS Crea un nuevo directorio llamado Ejer4. La clase CuentaCorriente la tendrás que crear partiendo de cero y utilizando la información sobre su funcionalidad que se da a continuación. En este ejercicio deberás crear el software necesario para gestionar un banco. El programa principal compilado está definido en el fichero UnBancoModelo.class que utiliza la clase CuentaCorrienteModelo definida en el fichero CuentaCorrienteModelo.class. Copia estos ficheros del Web de la asignatura o del disco Q:\\Infor2\Prac04\Ejer4. Utilizando el comando java ejecútalos y utiliza este ejecutable como modelo para el programa que tú deberás realizar. Tus ficheros se deberán llamar UnBanco.java y CuentaCorriente.java. La clase CuentaCorriente deberá disponer de las siguientes variables miembro: private private private private private static double interes = 0.04; static int numCuentas = 0; double saldo; long numeroCuenta; String nombreCliente; cuyo significado es inmediato. Observa que todas las variables son privadas y que dos de ellas son static. Deberá también disponer de los siguientes métodos, asimismo con un significado que no requiere muchas explicaciones: // constructor public CuentaCorrienteModelo(String nombreC, long numeroC, double unSaldo) { ... } // métodos public double getSaldo() { ... } public String getNombreCliente() { ... } public long getNumeroCuenta() { ... } public static long getNumeroDeCuentas() { .... } public static double getInteres() { ... } protected static void setInteres(double unInteres) { ... } Informática 2: Práctica nº 4 public public public public página 5 void ingreso(double cantidad) { ... } double pagoIntereses(int meses) { ... } double pago(double cantidad) { ... } double transferencia(CuentaCorriente to, double cantidad) { ... } La siguiente figura muestra el comienzo de la ejecución del programa, en el que se presentan las distintas opciones y el usuario decide crear varias cuentas corrientes (en atención a las máquinas fotocopiadoras, a las que se les da bastante mal las zonas amplias de color negro, la ventana de MSDOS se ha definido para que tenga fondo blanco y letras negras): Figura 1. Menú inicial del Banco, con apertura de dos cuentas. Observa que para crear una cuenta el usuario es requerido por el programa para que indique el saldo inicial y su nombre y apellidos. Sin embargo, el número de cuenta lo asigna el programa automáticamente como un entero entre 0 y 1000, elegido de modo aleatorio. Es muy importante realizar este ejercicio incrementalmente: primero se programa el menú inicial con las distintas opciones, luego la creación de cuentas corrientes, después la información general sobre todas las cuentas corrientes, y así sucesivamente, no pasando al siguiente apartado mientras que el anterior no funcione correctamente. Esta ejercicio es también bastante largo y difícil. No te desmoralices si no te sale a la primera, si no lo puedes terminar o si necesitas ayuda. Como la semana pasada, si te sale bien, ¡habrás dado un paso de gigante hacia el sobresaliente!