Arreglos, Métodos, Clase Math y uso de Scanner para la lectura de archivos en Java Arreglos Arreglo es una manera de agrupar de variables de un mismo tipo bajo un mismo nombre. Para acceder a los valores individuales se asigna a cada uno de ellos un número denominado índice, el cual comienza en cero. En Java podemos de Vectores y Matrices. Vectores declaración: Tipo Identificador_Vector [ ] = new Tipo[tam]; int edad [ ] = new int [10]; int edad [ ] = {12, 5, 6, 15, 18, 25, 60, 34}; Matrices declaración: Tipo Identificador_Matriz [ ][ ] = new tipo[Filas][Col]; float prom [ ][ ] = new float [3][4]; float valores [ ][ ] = {{1,2,3}, {10,-8,14}, {12,5,11)); Asignación por ciclos Asumamos que hemos creado un objeto de la clase Scanner , entrada, para permitir la entrada por teclado. float p [ ] = new float[4]; for(int x = 0; x < p.length; x++) { System.out.print(“p[“+x+”]: “) p[x] = entrada.nextFloat( ); } int k [ ][ ] = new int[3][4]; for(int x = 0; x < k.length; x++) { for(int y = 0; y < p[0].length; y++) { System.out.print(“k[“+x+”][“+y+”]: “) k[x][y] = entrada.nextInt( ); } } Métodos Métodos en Java: es un conjunto de instrucciones definidas dentro de una clase, que realizan una determinada tarea y a las que podemos invocar mediante un nombre. Cuando se llama a un método, la ejecución del programa pasa al método y cuando éste termina, la ejecución continúa a partir del punto donde se produjo la llamada. Métodos estático: método que puede ser accedido o invocado sin la necesidad de tener que instanciar un objeto de la clase, es un método que pertenece a la clase y no al objeto. Un método static solo puede acceder a variables o tipos de datos declarados como static. [acceso] static tipo nombre_método ([Parámetros]) { Instrucciones; return valor; } Parámetros: variables que almacenan los valores (argumentos) que el método recibe por parte del código que la llama. Pueden ser tipos primitivo u objetos. En la declaración del método, se escriben después del nombre entre paréntesis indicándose el tipo de cada uno y su nombre. Los parámetros en Java se pasan por valor. Clase Math Método random El método random de la clase Math nos devuelve un número aleatorio entre 0 y 1, del tipo double Si queremos generar valores diferentes, solo es necesario multiplicarlo por el número que queramos que sea el número más alto posible y/o sumarle (o restarle) algún número para que el limite inferior sea otro distinto de 0. Ejemplos: para generar reales entre 0 y 9 Para generar números enteros entre 1 y 10: Scanner con Archivos Definición: Java proporciona en el paquete java.util una clase que se denomina Scanner que nos permitirá leer datos desde Archivos de texto . Los objetos de tipo Scanner mediante la invocación de distintos métodos permitirán leer datos de cualquier tipo (Cadenas, enteros, reales, etc.). Asimismo permitirá leer un archivo de texto línea a línea, guardando cada línea en un objeto de tipo String. Para construir un objeto de tipo Scanner se invocará al constructor de la clase pasándole como argumento un objeto de tipo File (que se encuentra en el paquete java.io). Los objetos de tipo File relacionan un Archivo con su nombre en el sistema de archivos del computador. Ejemplo: Scanner sc = new Scanner(new File("Datos.txt)); Uso de la clase Scanner Como podemos observar en la tabla siguiente la clase Scanner nos permite leer en un archivo de texto todo tipo de dato así como determinar si hemos leído en su totalidad todo el archivo o no. Tipo de dato retornado void boolean boolean String double int float Método close( ): Cierra el Scanner hasNext( ): Retorna true si el Scanner a encontrado otra palabra en el archivo hasNextLine( ): Scanner retorna true si hay mas registros en el archivo, en caso contrario false. next( ): Scanner encuentra y retorna la siguiente palabra en el archivo. nextDouble( ): Scanner encuentra y retorna el siguiente valor en doble precisión. nextInt( ): Scanner encuentra y retorna el siguiente valor entero en el archivo nextFloat( ): Scanner encuentra y retorna el siguiente valor en simple precisión. Ejemplo Enunciado: Crear una aplicacion de consola en Java, que leera el archivo “Estudiantes.txt”, el cual en cada registro guarda la siguiente informacion: Nombre del estudiante, Nota parcial1, Nota parcial2 Cada campo del registro esta separado por un espacio en blanco Para lo cual definineremos dos clase una llamada Colegio y otra llamada Principal. Clase Colegio. Tendra los siguientes métodos estáticos: 1. Que determine y retorne la cantidad de registros que hay en el archivo “Estudiantes.txt”. 2. Que reciba dos arreglos uno de tipo de tipo String y una matriz de tipo doble en los cuales almacenaremos respectivamente los nombres de los estudiantes y las notas de los parciales , todo leido del archivo “Estudiantes.txt”. 3. Que reciba como parametros dos arreglos una matriz de tipo double y un vector de tipo double, en este ultimo se almacenara la nota promedio obtenida por cada estudiante en dos parciales la cuales estan almacenadas en la matriz. 4. Que muestre por consola, todo formateado, el nombre de los estudiantes, la nota obtenida en los dos parciales y la nota promedio. Clase Principal Se definiran los arreglos necesarios, y se invocaran los metodos definidos en Colegio Definimos la clase Colegio 1. Creación del proyecto a) Menu File → New Project → Categories: Java → Projects: Java Applications → Next b) Projects Name: Manejo_Archivo → Desmarcar Create Main Class → Finist. 2. Creación Clase Colegio a) Menu File → New File → Categories: Java → File Type: Java Class → Next b) Class Name: Colegio → Package: PColegio → Finist package PColegio; public class Colegio { } Clase Colegio package PColegio; import java.io.*; import java.util.*; public class Colegio { //Metodo que determina la cantidad de registros en Estudiantes.txt public static int cReg( ) throws IOException { Scanner en = new Scanner(new File("Estudiantes.txt")); int cr=0; while (en.hasNextLine( )) { en.nextLine( ); cr++; } en.close( ); return cr; } // Fin metodo cReg /*Método que lee el contenido de Extudiante.txt y almacena su contenido *en dos arreglos uno un vector de tipo String y otro una matiz de *tipo double */ public static void leoAlumnos(String n[ ], double nf[ ][ ]) throws IOException { Scanner en = new Scanner(new File("Estudiantes.txt")); int f = 0; while (en.hasNext( )) { n[f] = en.next(); for (int i = 0; i < nf[0].length; i++) { nf[f][i] = en.nextDouble( ); } f++; } en.close(); } // Fin método leoAlumnos /* Metodo que recibe dos arreglos una matriz de tipo double * y un vector de tipo double donde se almacenara la nota promedio * de cada alumno */ public static void calProm(double nf[ ][ ], double pr[ ]) { double s; for (int i = 0; i < nf.length; i++) { s = 0; for (int j = 0; j < nf[0].length; j++) { s += nf[i][j]; } pr[i] = s/nf[0].length; } } // Fin metodo CalProm /* Metodo que recibe tres arreglos uno de tio String, una matriz de * tipo double y un vector de tipo double donde de almacenan * respectivamente los nombres de los estudiantes, sus notas parciales * y el promedio de dichas notas. */ public static void mostrar(String n[ ], double nf[ ][ ], double pr[ ]) { System.out.println("Nombre PP1 PP2 Nota final"); for (int i = 0; i < n.length; i++) { System.out.printf("%-12s",n[i]); for (int j = 0; j < nf[0].length; j++) { System.out.printf("%7.2f ",nf[i][j]); } System.out.printf(" %7.2f \n",pr[i]); } } //Fin del metodo mostrar } //Fin Clase Colegio Definimos la clase Principal 1. Creación Clase Principal a) Menu File → New File → Categories: Java → File Type: Java MainClass → Next b) Class Name: Principal → Finist public class Principal { public static void main(String[ ] args) throws IOException { } //Fin metodo main } //Fin clase Principal Clase Principal import PColegio.*; import java.io.*; public class Principal { public static void main(String[ ] args) throws IOException { int cf; cf = Colegio.cReg(); String no[ ] = new String[cf]; double notaF[ ][ ] = new double[cf][2]; double pro[] = new double[cf]; Colegio.leoAlumnos(no, notaF); Colegio.calProm(notaF, pro); Colegio.mostrar(no, notaF, pro); } //Fin metodo main } //Fin clase Principal Salida Formateada por Consola Nombre PP1 PP2 Nota final Lopez 12.50 13.00 12.75 Ana 13.70 9.50 11.60 Juan 18.00 17.60 17.80 9.30 12.30 10.80 Roberto