Beginning Sistemas de Información Java Entrada/Salida Elemental Listado siguiente
PresentaciónEntrada/SalidaBibliotecasSwingMarcosBotonesCuadros de texto
ListasImágenesMenúsDiálogosArchivosGráficos 2D 

Entrada/Salida elemental en Java. Uso de Java a través de una shell. Parámetros de la línea de órdenes. Diferencias con el lenguaje C. Impresión de texto en pantalla. Lectura de datos procedentes del teclado. Lectura de valores numéricos. Creación de una clase con métodos estáticos para lectura a través del teclado. Posibles mejoras.

Ejercicios propuestos

  1. Modificar el siguiente listado para almacenar los resultados de las traducciones a formato numérico (int o float) en variables del tipo correspondientes:
    public class Ejemplo {
      static public void main(String[] argumento) {
        if (argumento.length==0)
          System.out.println("No se han adjuntado argumentos.\n");
        else
          {
            System.out.println( "Se han adjuntado "
                            + argumento.length
                            + " argumentos.\n\n");
            for(int i=0;i<argumento.length;i++)
              System.out.println( "El argumento "
                              +i
                              + " es "
                              + argumento[i]);
          };
        System.out.println("\nTerminación normal del programa.\n\n");
      }
    }
    El programa, una vez almacenada la información en la variable de destino, sumará 1 a ese valor y mostrará el resultado de forma similar a la que produce el ejemplo inicial.

  2. Se necesita una clase, Punto3D, que represente vectores en un espacio de tres dimensiones. Esta clase posee como características una lista formada por tres float y los métodos de acceso habituales. Se pide construir una clase, AuxPunto3D, que implemente los métodos necesarios para sumar vectores, calcular productos escalares y calcular productos vectoriales. Esta clase se probará mediante un programa final, que se invocará de forma similar a esta:
    java -jar OpVectores.jar 1.0 2.0 3.0 4.0 5.0 6.0
    Obteniéndose un resultado similar al siguiente:
    Primer vector (A): (1.0, 2.0, 3.0)
    Segundo vector (B): (4.0, 5.0, 6.0)
    A + B = (5.0, 7.0, 9.0)
    A . B = 32.0
    A * B =…
    Nota. Se entiende que A * B denota el producto vectorial y que A . B denota el producto escalar. Pista: considérese Float.parseFloat(). Es imprescindible crear el archivo .jar correspondiente. Es recomendable estudiar la posibilidad de crear un archivo make para compilar este programa, haciendo que make genere directamente el archivo jar.

  3. Se necesita una clase, Matriz, que represente matrices rectangulares de números de tipo float. Esta clase poseerá como características una matriz y los métodos de acceso habituales. Se sugiere añadir constructores que permitan crear matrices de dimensiones dadas, dando el valor nulo a sus elementos. También es conveniente disponer de un constructor capaz de crear una Matriz a partir de un float[][], así como de un método que proporcione el float[][] equivalente a una Matriz. Se pide construir una clase AuxMatriz dotada de los métodos necesarios para:
    1. Leer matrices del teclado, pidiendo sus dimensiones al usuario.
    2. Escribir matrices en pantalla, con el formato rectangular habitual.
    3. Sumar dos matrices, si es posible, y proporcionar el resultado en forma de Matriz.
    4. Restar dos matrices, si es posible, y proporcionar el resultado en forma de Matriz.
    5. Multiplicar dos matrices, si es posible, y proporcionar el resultado en forma de Matriz.
    El programa final se invocará de una forma similar a:
    java -jar OpMatrices.jar
    Se entiende que los datos se proporcionarán al programa a partir del teclado (no a partir de la línea de órdenes).

  4. Añadir a AuxMatriz:
    1. Un método que proporcione la Matriz identidad, I, indicando las dimensiones deseadas para esa matriz.
    2. Un método que reciba una Matriz y un float y multiplique todos los elementos de esa Matriz por el float (seguramente el lector recordará la multiplicación de escalares por vectores).
    3. Un método que proporcione la Matriz traspuesta de la que se le proporciona como argumento.
  5. Tomando como base el método construido en el Ejercicio 1, construir una clase formada por métodos auxiliares destinados a la lectura de información procedente del teclado. El conjunto de métodos va a ser el que se indica a continuación:
    	public static String readLine()
    	public static String[] readLines()
    	public static int readInt()
    	public static int readInt(String prompt)
    	public static int readInt(String prompt, int lower_limit, int upper_limit)
    	public static float readFloat()
    	public static float readFloat(String prompt)
    	public static float readFloat(String prompt, float lower_limit, float upper_limit)
    	public static double readDouble()
    	public static double readDouble(String prompt)
    	public static double readDouble(String prompt, double lower_limit, double upper_limit)
    	public static int[] readInts()
    	public static float[] readFloats()
    	public static double[] readDoubles()

    Aclaraciones
    1. Los métodos sin argumentos no muestran nada en la consola y se limitan a leer un datos (con formato String, según se ha visto en el Ejercicio 1) para después proporcionarlos una vez traducidos al formato de destino correspondiente.
    2. Los métodos con argumento prompt muestran esta indicación antes de quedar a la espera de información; si el puntero de String recibido es nulo, no se muestra la indicación.
    3. Los argumentos lower_limit y upper_limit deben ser comprobados antes de su utilización; si el límite inferior no es menor que el superior, se emitirá un mensaje de error y el programa concluirá con una llamada a exit(1). Si el valor proporcionado por el usuario no se encuentra entre los límites dados, se repetirá la petición de información hasta que el usuario inserte un valor admisible.
    4. Si el tipo devuelto por el método es una lista, el método debe admitir tantos valores como vaya insertando el usuario, sin más limitación que la memoria del ordenador (por medio de un Vector). Se entiende que el usuario no desea insertar más valores cuando pulsa <INTRO> en una línea vacía.
    5. Se recomienda crear una estructura de directorios que parta del directorio raíz, de la forma /com/coti/tools, por ejemplo. Esto facilita mucho la creación de paquetes y el uso posterior de javac y jar, al disponerse siempre de una ruta de acceso fija para el classpath y sourcepath.
  6. Aplicar la clase construida en el ejercicio anterior para crear un programa que solicite del usuario sus datos personales y muestre en pantalla estos datos con formado delimitado y encolumnado