formato *

Anuncio
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!
Descargar