Ejemplo 2 - Demostración del pase de vectores como parámetro
Objetivo
Comprender las características del pase de referencias a vector como
parámetro
Enunciado
Se pretende escribir una clase que tenga métodos que mediante el pase
de vectores como parámetros y valores de retorno permita:
- Crear vectores del tamaño indicado y devolverlos como parámetro
- Inicializar un vector con valores provistos por el usuario
- Modificar todos los valores de un vector sumándole un incremento
fijo a cada celda
- Convertir un vector de enteros a String para poder imprimirlo directamente
Solución
El código siguiente tiene una implementación que muestra como
llevar a cabo el pase de vectores como parámetros.
Los detalles de implementación forman parte de los comentarios dentro
del código.
import javax.swing.JOptionPane; /* La clase ManejadorDeVectores se utiliza para demostrar la forma de * pasar referencias a vectores como parámetros * Pretende mostrar que si un vector es modificado a través de su refencia * dentro de un método, los cambios se mantendrán aún al salir del método * También muestra como crear y devolver instancias de vector en este caso con un método * que fabrica vectores de enteros. * Su diseño y estructura obedece solo a fines de demostración de pase de parámetros * Programado por: MSc. Edgar Casasola Murillo (c)2004 */ public class ManejadorDeVectores { /** <pre> * REQUIERE: Que el vector recibido como parámetros haya sido inicializado y sea diferente de null * EFECTUA: Suma el valor "incremento" a todos los elementos del vector * MODIFICA: Modifica los valores de las celdas referenciadas por "vector" sumándoles el "incremento" a cada una. * Los cambios llevadoa a cabo sobre el vector se mantendrán aún después de finalizar el método * @param vector Es un vector de enteros * @param incremento Es un entero que se utilizará para incrementar todos los valores del vector </pre> */ public static void sumarATodos(int vector[],int incremento){ for(int i=0;i<vector.length; i++){ vector[i]+=incremento; } } /** <pre> * crearVectorDeEnteros es un método "Fábrica" que crea instancias de vector de enteros * REQUIERE: Recibir un valor entero mayor que 0 * EFECTUA: Crea y devuelve un vector de enteros del tamaño recibido como parámetro en "cantidadDeCeldas" * MODIFICA: No modifica objetos externos al método * @param cantidadDeCeldas Es un entero que indica la cantidad de celdas que tendrá el vector * @return Devuelve una referencia a un vector recién creado con la cantidad de celdas solicitadas </pre> */ public static int [] crearVectorDeEnteros(int cantidadDeCeldas){ return new int [cantidadDeCeldas]; } /** <pre> * REQUIERE: Que el vector recibido como parámetro sea diferente de null * EFECTUA: Solicita al usuario valores y los asigna a cada celda del vector * MODIFICA: Modifica los valores de las celdas referenciadas por "vector" asignando los valores dados por el usuario * @param vector Es un vector de enteros */ public static void leerVectorDeEnteros(int vector[]){ for(int i=0;i<vector.length; i++){ vector[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor "+(i+1))); } } /** <pre> * REQUIERE: Recibir una referencia a vector diferente de null * EFECTUA: Recorre el vector y crea un String con su contenido * MODIFICA: No modifica objetos externos al método * @param vector Es un vector de enteros * @return Devuelve un String con una representación del contenido de las celdas del vector </pre> */ public static String vectorDeEnterosAString(int vector[]){ String salida="{ "; if(vector.length > 0) salida+=vector[0]; for(int i=1;i<vector.length; i++){ salida+=" , "+vector[i]; } salida+=" }"; return salida; } }
|
La clase que crea una instancia de vector y la pasa como parámetro para
ser modificada por método de la otra clase se presenta a continuación:
Los comentarios dentro del código describen la implementación
propuesta.
import javax.swing.JOptionPane; /* La clase PruebaManejadorDeVectores se utiliza para demostrar * el uso de la clase ManejadorDeVectores * Esa clase pretende mostrar que si un vector es modificado a través de su refencia * dentro de un método, los cambios se mantendrán aún al salir del método * Su diseño y estructura obedece solo a fines de demostración de pase de parámetros * Programado por: MSc. Edgar Casasola Murillo (c)2004 */ public class PruebaManejadorDeVectores { public static void main(String argv[]){ int cantidadDeElementos = Integer.parseInt(JOptionPane.showInputDialog("Cuantos valores va a almacenar?")); int [] datos; // Invoca al método que fabrica un nuevo vector de enteros datos = ManejadorDeVectores.crearVectorDeEnteros(cantidadDeElementos); // Llenar el vector con datos solicitados al usuario ManejadorDeVectores.leerVectorDeEnteros(datos); System.out.println("Antes de sumarle 4 a todos: "+ManejadorDeVectores.vectorDeEnterosAString(datos)); // Suma 4 a todos los elementos del vector ManejadorDeVectores.sumarATodos(datos,4); System.out.println("Después de sumarle 4 a todos: "+ManejadorDeVectores.vectorDeEnterosAString(datos)); System.exit(0); } }
|
La salida del programa es la siguiente si se digitan 4 valores: 12, 23, 34
y 45
Antes de sumarle 4 a todos: { 12 , 23 , 34 , 45 }
Después de sumarle 4 a todos: { 16 , 27 , 38 , 49 }
|
Código Fuente
ManejadorDeVectores.java
PruebaManejadorDeVectores.java