1 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 1 Capitulo 10 Arreglos
2 Objetivos –Manipular una colección de valores de dato, usando un arreglo. –Declarar y usar un arreglo de datos primitivos. –Declarar y usar un areglo de objetos –Definir un método que acepta un arreglo como parámetro y que devuelve un arreglo –Describir como se implementa un arreglo de dos dimensiones como un arreglo de arreglos –Manejo de una colección de objetos, usando listas y mapas
3 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 3 Arreglos Introducción Un arreglo (array) es una colección de valores de dato. Si su programa necesita tratar con 100 enteros, 500 objetos cuentas, 365 números reles, etc., conviene usar arreglos En Java, un arreglo es una colección indexada de valores de datos del mismo tipo.
4 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 4 Arreglo de datos Primitivos Declaración de Array (dos posibilidades) [ ] //variation 1 [ ]//variation 2 Creación Array = new [ ] Ej double[ ] rainfall; rainfall = new double[12]; Variation 1 double rainfall [ ]; rainfall = new double[12]; Variation 2 Un array se parece a un objeto!
5 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 5 Accediendo a Elementos Individuales Elementos Individuales en en un arreglo se aceden a través de su índice. double[] rainfall = new double[12]; EL índice de la 1ª posición del arreglo es 0. rainfall 01234567891011 rainfall[2] Este expresión se refiere al elemento de la posición 2
6 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 6 Procesando Array – Ej1 double[] rainfall = new double[12]; double annualAverage, sum = 0.0; for (int i = 0; i < rainfall.length; i++) { rainfall[i] = Double.parseDouble( JOptionPane.showinputDialog(null, “Lluvia " + (i+1) ) ); sum += rainfall[i]; } annualAverage = sum / rainfall.length; Esta constante retorna la capacidad el array
7 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 7 Procesando Arreglos – Ej 2 double[] rainfall = new double[12]; String[] monthName = new String[12]; monthName[0] = "January"; monthName[1] = "February"; … double annualAverage, sum = 0.0; for (int i = 0; i < rainfall.length; i++) { rainfall[i] = Double.parseDouble( JOptionPane.showinputDialog(null, "Rainfall for " + monthName[i] )); sum += rainfall[i]; } annualAverage = sum / rainfall.length; Lo mismo para el resto de los meses El nombre del mes en vez del número
8 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 8 Procesando Array – Ej 3 Calcular la lluvia media para cada trimestre. //asumir que rainfall esta declarada e inicializada //apropiadamente double[] quarterAverage = new double[4]; for (int i = 0; i < 4; i++) { sum = 0; for (int j = 0; j < 3; j++) { //Calcula la suma sum += rainfall[3*i + j]; //de un trimestre } quarterAverage[i] = sum / 3.0; // promedio }
9 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 9 Initialización Array Igual que con otros tipos de datos, se puede declarar e inicializar a la vez. int[] number = { 2, 4, 6, 8 }; double[] samplingData = { 2.443, 8.99, 12.3, 45.009, 18.2, 9.00, 3.123, 22.084, 18.08 }; String[] monthName = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; number.length samplingData.length monthName.length 4 9 12
10 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 10 Declaración tamaño variable En Java, no estamos limitados a hacer una declaración de tamaño fijo. El código sig le pide al usuario el tamaño del arreglo y lo declara de acuerdo al dato ingresado: int size; int[] number; size= Integer.parseInt(JOptionPane.showInputDialog(null, "Size of an array:")); number = new int[size];
11 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 11 Ingreso de datos class Demo{ public static void main (String[] arg){ system.out.println (“1er argumento:” +arg[0]); system.out.println (“2do argumento:” +arg[1]); system.out.println (“3er argumento:” +arg[2]); } java Demo a b c invocación al método main() Salida 1er argumento: a 2do argumento: b 3er argumento: c
12 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 12 Arreglo de Objetos En Java, además de los arreglos de datos primitivos, se pueden declarar arreglos de objetos Un arreglo de datos primitivos es una herramienta poderosa, pero un arreglo de objetos lo es aún más. El uso de arreglos de objetos permite modelar la aplicación en forma más clara y lógica.
13 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 13 La clase Person Usaremos objetos Person para mostrar el uso de arreglos de objetos. Person latte; latte = new Person( ); latte.setName("Ms. Latte"); latte.setAge(20); latte.setGender('F'); System.out.println( "Name: " + latte.getName() ); System.out.println( "Age : " + latte.getAge() ); System.out.println( "Sex : " + latte.getGender() ); La clase Person soporta los métodos set y get
14 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 14 Creando un arreglo de Objectos - 1 Código Estado de la Mem. Person[ ] person; person = new Person[20]; person[0] = new Person( ); A A Sólo el nombre de person se ha declarado, aún no se ha reservado el espacio para el arreglo.. After is executed A A person
15 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 15 person Creando un arreglo de Objectos - 2 Código Estado de la Mem. Person[ ] person; person = new Person[20]; person[0] = new Person( ); B B Ahora se crea el arreglo para almacenar 20 objetos personas, pero los objetos mismos no se han creado aún. After is executed B B 0123416171819 person
16 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 16 Creando un arreglo de Objectos - 3 Código Estado de la Mem. Person[ ] person; person = new Person[20]; person[0] = new Person( ); C C Un objeto persona se crea y se pone la referencia a este objeto en la posición 0. 0123416171819 person 0123416171819 person After is executed C C Person
17 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 17 Procesamiento del arreglo Person –1 Crear objetos Person y ponerlos en un arreglo String name, inpStr; intage; chargender; for (int i = 0; i < person.length; i++) { name = JOptionPane.showInputDialog(null, “Ingrese nbre:"); age= Integer.parseInt( JOptionPane.showInputDialog(null, “Ingrese edad:")); inpStr= JOptionPane.showInputDialog(null, “Ingrese sexo:"); gender = inpStr.charAt(0); person[i] = new Person( ); // crea una nueva persona person[i].setName ( name ); // asigna los valores person[i].setAge ( age ); person[i].setGender( gender ); }
18 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 18 Procesamiento del arreglo Person –2 Encontrar la edad de la persona mayor intminIdx = 0;//índice para la persona más joven intmaxIdx = 0; //índice para la persona más vieja for (int i = 1; i < person.length; i++) { if ( person[i].getAge() < person[minIdx].getAge() ) { minIdx = i; // encuentra al más joven } else if (person[i].getAge() > person[maxIdx].getAge() ) { maxIdx = i; // encuentra al más viejo} } //person[minIdx] es más joven y person[maxIdx] es el más viejo
19 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 19 Borrando Objectos – Ej 1 int delIdx = 1; person[delIdx] = null; Borrar la persona B poniendo su referencia a null. 0123 person A A B B C C D D A A 0123 A A C C D D Before is executed A A After is executed A A
20 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 20 Borrando Objetos – Ej 2 int delIdx = 1, last = 3; person[delIndex] = person[last]; person[last] = null; Borrar a la persona B poniendo la referencia de la última persona en la posición 1. 0123 person A A B B C C D D A A 0123 A A C C D D Before is executed A A After is executed A A
21 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 21 Procesamiento del arreglo Person 3 Buscando a una persona particular, se emplea el 2do método para borrar int i = 0; while ( person[i] != null && !person[i].getName().equals("Latte") ) { i++; } if ( person[i] == null ) { //no encuentra a la persona - búsqueda fracasada System.out.println("Latte no se encuentra en el arreglo"); } else { //encuentra – búsqueda exitosa System.out.println(“Encontró a Latte en la posición " + i); }
22 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 22 Pasando arreglos a Métodos - 1 Código Estado de la Men. minOne = searchMinimum(arrayOne); public int searchMinimum(float[] number)) { … } A A At before searchMinimum A A arrayOne A. La variable local number no existe antes de la ejecución del método
23 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 23 Pasando Arreglos a los métodos - 2 Código Estado de la Mem minOne = searchMinimum(arrayOne); public int searchMinimum(float[] number)) { … } arrayOne B B The address is copied at B B number B. El valor de un argumento, que es una dirección, se copia al parámetro.
24 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 24 arrayOne number While at inside the method C C Pasando Arreglos a los Métodos - 3 Código Estado de la Mem. minOne = searchMinimum(arrayOne); public int searchMinimum(float[] number)) { … } C C C. Al array se accede a través de C. Al array se accede a través de number dentro del método.
25 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 25 arrayOne number Pasando Arreglos método - 4 Código Estado de la Mem minOne = searchMinimum(arrayOne); public int searchMinimum(float[] number)) { … } D D arrayOne At after searchMinimum D D D. El parámetro es borrado. El argumento sigue apuntando al mismo objeto
26 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 26 Pasaje de arreglos a métodos Al igual que los objetos los arreglos son datos de tipo referencia Pasamos la referencia al arreglo y no el arreglo en sí cuando se llama al método. El método no crea una copia separada del arreglo Cuando se pasa un arreglo a un método sólo se pasa la referencia. No se crea una copia del arreglo
27 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 27 Arreglo de Dos-Dimensiones Arreglo de Dos-dimensiones son útiles para la representación en forma tabular
28 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 28 Declarando y creando un arreglo de 2-D Declaración [][] //variación 1 [][] //variación 2 Creación = new [ ][ ] double[][] payScaleTable; payScaleTable = new double[4][5]; 3 2 1 0 43210 payScaleTable
29 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 29 Accediendo a los Elementos Un elemento en un arreglo de dos-dimensiones se accede por el índice de fila y columna
30 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 30 Ej 2-D Procesamiento de Arreglos Encontrar el promedio de c/ fila double[ ] average = { 0.0, 0.0, 0.0, 0.0 }; for (int i = 0; i < payScaleTable.length; i++) { for (int j = 0; j < payScaleTable[i].length; j++) { average[i] += payScaleTable[i][j]; } average[i] = average[i] / payScaleTable[i].length; }
31 Java Implemención de Arreglos de 2-D El Ej de creación de arreglos payScaleTable = new double[4][5]; es una forma reducida de: payScaleTable = new double [4][ ]; payScaleTable[0] = new double [5]; payScaleTable[1] = new double [5]; payScaleTable[2] = new double [5]; payScaleTable[3] = new double [5];
32 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 32 Arreglos 2-Dimensiones Los subarreglos pueden tener distinta longitud. Ejecución triangularArray = new double[4][ ]; for (int i = 0; i < 4; i++) triangularArray[i] = new double [i + 1]; resulta un arreglo que se parece a :
33 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 33 Colecciones de Objetos: Listas y Mapas Una vez que se ha creado un array su tamaño no puede cambiarse. Si se desde ingresar mas elementos habrá que recrearlo caso contrario dará array overflow El paquete estándar java.util contiene diferentes tipos de clases para mantener colecciones de objetos. A estas clases se llaman grupalmente Java Collection Framework (JCF). JCF incluye clases que mantiene colecciones de objetos como: grupos, listas o mapas.
34 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 34 Interfase Java Al igual que las clases las interfases son datos de tipo referencia. Una interfase Java define sólo el comportamiento de los objetos, contiene la declaración de los métodos pero no el cuerpo de los mismos “que ofrece pero no como se hace” No incluye ningún dato miembro excepto constantes públicas estáticas y todos los métodos son públicos (no estan def) No tienen contructores, no se pueden crear instancias de la interfase Java Para crear una instancia que soporte el comportamiento de una lista, se necesita una clase que implemente la interfase, que le brinde el cuerpo del método.
35 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 35 Listas JCF JCF incluye la interfase List que soporta métodos para mantener un colección de objetos cómo una lista lineal. Se respeta el orden Puede haber elem duplicados L = (l 0, l 1, l 2,..., l N ) Podemos: agregar a, remover de y obtener objetos de la lista. En una lista no hay un límite a la cantidad de objetos que puede contener.
36 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 36 Métodos Listas Aqui hay 5 de los 25 métodos de listas boolean add ( Object o ) Agregar un obj al final de la lista void clear ( ) Limpiar la lista, vaciarla Object get ( int idx ) Devuelve el elemento de la posición idx boolean remove ( int idx ) Remueve el elemento de la posición idx int size ( ) Devuelve la cantidad de elementos de la lista
37 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 37 Usando Listas Para usar una lista en un programa, debemos crear una instancia de la clase que implementa la interfase List Hay dos clases que implementan la interfase List : –ArrayList –LinkedList La calse ArrayList usa un arreglo para manejar los datos de la lista. La clase LinkedList usa la técnica llamada representación ligada por nodo (linked-node representation).
38 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 38 Ej Uso de Listas import java.util.*; List friends;// declara la variable como List Person person; friends = new ArrayList( );//la asigna a una clase que //implementa la interfase List person = new Person("jane", 10, 'F'); friends.add( person ); person = new Person("jack", 6, 'M'); friends.add( person ); Person p = (Person) friends.get( 1 ); // hay que hacer la conversión de tipo pues los elem de una //lista pueden ser de cualquier tipo de objeto
39 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 39 Para encontrar la cantidad de obj contenidos en una lista se usa el método size Ej System.out.println ( friends.size()); Mostrar los nombres de todas las personas de la lista: Person p; int limite = friends.size(); for (int i = 0; i < limite; i++){ p = (Person) friends.get(i); // convierte a Person System.out.println(p.getName()); // llama a met de Person }
40 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 40 Iterador Otra forma de acceder a los elementos de una colección es empleando iteradores Cuando llamamos al método iterator de una lista, devuelve un objeto que implementa la interfase iterator que soporta los métodos hasNext(), next() y remove() Person p; Iterator iterator = friends.iterator(); while (iterator.hasNext () ){ p = (Person) iterator.next(); System.out.println(p.getName()); }
41 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 41 Borrar Para remover un objeto de la lista, se puede usar el método remove() pasándole el índice del elemento como parámetro. Ej remover la 3era persona de la lista friends friends.remove(2); Todos los elem. son movidos una posición en forma automática para llenar el espacio que ha quedado vacío. Ej. de uso de lista con iterator BookTracer.java
42 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 42 Lista no acepta datos primitivos. Usar las clases envoltorio Ej. Integer Float List listaEnteros = new ArrayList(); listaEnteros.add(new Integer(15)); listaEnteros.add(new Integer(30)); Los elem son objetos enteros, usar el método intValue para obtener el valor. Ej Integer objetoEntero; Iterator itr = listaEnteros.iterator(); while (itr.hasNext()){ objetoEntero = (Integer) itr.next(); System.out.println(objetoEntero.intValue()); }
43 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 43 Mapas JCF (Tabla indexada) JCF incluye la interfase Map que soporta métodos para mantener una colección de objetos llamados entradas de mapa (clave, valor) (key, value) key value k0k0 k1k1 knkn v0v0 v1v1 vnvn............ Una entrada
44 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 44 Métodos Mapas Aqui hay 5 de los 14 métodos: void clear ( ) Limpiar el mapa, vaciarla boolean containsKey ( Object key ) Devuelve verdadero si el mapa contiene una entrada con la clave dada Object put (Object key, Object value) Agrega la entrada dada al mapa par clave, valor (key, value) boolean remove ( Object key ) Remueve la entrada correspondiente a esa clave int size ( ) Devuelve la cantidad de elementos del mapa
45 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 45 Usando Mapas Para usar un mapa en un programa, debemos crear una instancia de una clase que implemente la interfase Map Hay dos clases posibles: –HashMap –TreeMap
46 Ej de uso de Map import java.util.*; Map catalog; // Interfase Map catalog = new TreeMap( ); // clase Treemap catalog.put("CS101", "Intro Java Programming"); catalog.put("CS301", "Database Design"); catalog.put("CS413", "Software Design for Mobile Devices"); if (catalog.containsKey("CS101")) { System.out.println("We teach Java this semester"); } else { System.out.println("No Java courses this semester"); }
47 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 47 Problema Escribir una clase Libro de Direcciones que maneje una colección de objetos Persona. Se debe poder agregar, borrar o buscar una persona en el libro
48 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 48 Plan General / Documento de Diseño Ya que estamos diseñando una clase simple, nuestra tarea es identificar los métodos públicos Método PublicoObjetivo AddressBook Un constructor para inicializar un obj. Incluiremos todos los constructores necesarios add Agregar una nueva persona al libro de direcciones delete Borrar una persona específica search Buscar una persona dada y devolverla en caso de encontrarla
49 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 49 Pasos de Desarrollo Desarrollaremos en 5 pasos: 1.Implementar el /los constructores. 2.Implementar el método agregar (add) 3.Implementar el método buscar (search) 4.Implementar el método borrar (delete). 5.Finalizar la clase.
50 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 50 Diseño Paso 1 Comenzar la definición de clase con dos constructores Un constructor sin argumentos crea un vector del tamaño por defecto Un constructor con un argumento creará un arreglo del tamaño especificado
51 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 51 Código Paso 1 Directory: Chapter10/Step1 Source Files: AddressBook.java Directory: Chapter10/Step1 Source Files: AddressBook.java
52 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 52 Paso 1 Prueba Verificar que el constructor trabaja como se espera Argumentos para el Constructor Propósito Números Negativos Probar datos inválidos 0 Probar el caso de datos inválidos 1 >= 1 Probar los casos normales
53 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 53 Paso 2 Diseño Diseñar e implementar el método add Un array que usamos internamente para implementar la clase AddressBook tiene un tamaño límite Alternativa 1: Inhabilitar la posibilidad de agregar elem. cdo se alcanza la capacidad Alternativa 2: Crear un nuevo arreglo de mayor tamaño Se adopta la 2da alternativa
54 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 54 Step 2 Code Directory: Chapter10/Step2 Source Files: AddressBook.java Directory: Chapter10/Step2 Source Files: AddressBook.java
55 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 55 Paso 2 Test Confirmar que los objetos se agregar correctamente y se crea un arreglo mayor cuando se alcanza la capacidad Test SequencePurpose Crear un array de tamaño 4 Ver que el array se cree corectamente Agregar cuatro personas Ver que las personas se agregen correctamente Agregar una quinta persona Ver que se cree un nuevo array y se agrege una persona a este último
56 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 56 Paso 3 Diseño Diseñar e implementar el método de búsqueda search loc = 0; while ( loc < count && Nombre de la Persona en la entreda loc no es igual al nombre dado) { loc++; } if (loc == count) { foundPerson = null; } else { foundPerson = entry[loc]; } return foundPerson;
57 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 57 Step 3 Code Directory: Chapter10/Step3 Source Files: AddressBook.java Directory: Chapter10/Step3 Source Files: AddressBook.java
58 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 58 Paso 3 Test To test the correct operation of the search method, we need to carry out test routines much more elaborate than previous tests. Test SequencePurpose Crear un array de tamaño 5 y agregar 5 personas distintas (sin repetir los nombres) Ver que se cree el array y se ingresen las personas Buscar la primera persona del array y la última Ver que la búsqueda funcione para los casos límite Buscar a una persona del medio del array Ver caso normal Buscar a una persona que no esté en el aray Ver caso fracaso en la búsqueda Repetir los pasos anteriores con un arreglos de otros tamaños, probar con tamaño = 1 Probar que las rutinas funcionan para diferente tamaño Repetir repertir las pruebas sin llegar al tamaño lémite, ej. imgresar 3 personas y la capacidad 5 Probar que funciona correctamente en todos los casos
59 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 59 Paso 4 Diseño Diseñar e implementar el método delete boolean status; int loc; loc = findIndex( searchName ); if ( loc No es válida ) { status = false; } else { //found, pack the hole reeplazar el elemento con indice loc+1 por el último elem status = true; count--; //decrementar count, hay un elem menos asegurarse que 'count' sea válido; // no puede quedar negativo } return status;
60 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 60 Step 4 Code Directory: Chapter10/Step4 Source Files: AddressBook.java Directory: Chapter10/Step4 Source Files: AddressBook.java
61 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 61 Paso 4 Test probar el método delete Test SequencePurpose Crear un array de 5 elem de capacidad e ingresar 5 Personas con nombres distintos Ver que el arreglo se cree y complete. 100% lleno Buscar una persona para borrar. Verificar que este antes de borrarla Borrar una personas del arreglo Probar el método delete Buscar a la persona borrada Probar el método delete verificando que devuelva nulo la búsqueda Intentar eliminar una persona que no esta en el arreglo Ver que funciona esta operación Repetir los pasos anteriores borrando personas en la primera y última posición Verificar que la rutina funciona con array de distinto tamaño Repetir las pruebas con un arreglo no lleno, ej de 5 con 3 elemnetos Verificar que funciona bien en los otros casos
62 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 10 - 62 Paso 5: Finalizar Prueba final –Ya que las tres operaciones (agregar, borrar y buscar) están interelacionadas, es importante probarlas juntas.. Posible Extensiones –Una extensión útil es repasar la lista completa (scanning). –Listar todas las personas del libro de direcciones