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:

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