Pasar datos de ArrayList entre metodos (DUDA)

Iniciado por MrSimpatia, 7 Octubre 2018, 15:18 PM

0 Miembros y 1 Visitante están viendo este tema.

MrSimpatia

Buenas! tengo una gran duda, utilize "arraylist" para crear un array dinamico, el cual obviamente crezca tanto como el usuario desee, ahora bien... Quiero pasar los datos que tenga un arraylist de un metodo a otro
Código (java) [Seleccionar]
public void Vehiculos () {
int op1, n;
String busca, busca2, matri, mark, model, col, cant;
ArrayList <String> matricula = new ArrayList <String>();
ArrayList <String> marca = new ArrayList <String>();
ArrayList <String> modelo = new ArrayList <String>();
ArrayList <String> color = new ArrayList <String>();
ArrayList <String> cantpuertas = new ArrayList <String>();
do {
System.out.println("1.1- Registrar");
System.out.println("1.2- Modificar");
System.out.println("1.3- Eliminar");
System.out.println("1.4- Listar todos");
System.out.println("1.5- Buscar");
System.out.println("0- Volver");
System.out.print("Opcion: ");
op1 = dato.nextInt();
System.out.println("  ");
switch (op1) {
case 1:
System.out.print("Cuantos vehiculos desea registrar? ");
n = dato.nextInt();
dato.nextLine();
for (int f= 0; f<n ; f++) {
System.out.println("  ");
System.out.print("Matricula: ");
matri = dato.nextLine();
matricula.add(f, matri);
ArrayList<String> matriculaclon = (ArrayList<String>) matricula.clone();
System.out.print("Marca: ");
mark = dato.nextLine();
marca.add(f, mark);
ArrayList<String> marcaclon = (ArrayList<String>) marca.clone();
System.out.print("Modelo: ");
model = dato.nextLine();
modelo.add(f, model);
ArrayList<String> modeloclon = (ArrayList<String>) modelo.clone();
System.out.print("Color: ");
col = dato.nextLine();
color.add(f, col);
ArrayList<String> colorclon = (ArrayList<String>) color.clone();
System.out.print("Cantidad de puertas: ");
cant = dato.nextLine();
cantpuertas.add(f, cant);
ArrayList<String> cantpuertasclon = (ArrayList<String>) cantpuertas.clone();
}
System.out.println("  ");
break;

case 2:

break;

case 3:
System.out.print("Matricula del que desea eliminar: ");
dato.nextLine();
busca2 = dato.nextLine();
for (int f= 0; f<matricula.size(); f++) {
if (f == matricula.indexOf(busca2)) {
matricula.remove(f);
marca.remove(f);
modelo.remove(f);
color.remove(f);
cantpuertas.remove(f);
}
System.out.println("  ");
System.out.println("  ");
}


break;

case 4:
System.out.println("Listado de vehiculos:");
System.out.println("-----------------------------");
for (int f= 0; f<matricula.size(); f++) {
System.out.println("Matricula: "+matricula.get(f)+" |Marca: "+marca.get(f)+" |Modelo: "+modelo.get(f)+" |Color: "+color.get(f)+" |Cantidad de puertas: "+cantpuertas.get(f));
System.out.println(" ");
System.out.println(" ");
}
break;

case 5:
System.out.println("Matricula del vehiculo que desea buscar: ");
busca = dato.next();
for (int x = 0; x<matricula.size(); x++) {
if (x == matricula.indexOf(busca)) {
System.out.println("Matricula: "+matricula.get(x)+" Marca: "+marca.get(x)+" Modelo: "+modelo.get(x)+" Color: "+color.get(x)+" Cantidad de puertas: "+cantpuertas.get(x));
System.out.println("El vehiculo se encuentra en la posicion "+(x+1));
}
}
break;

case 0:
MenuPrincipal();
}

}while (op1 != 0);

Como pueden ver aqui arriba, yo creo el arraylist con diferentes nombres, y mi intencion es guardar de alguna forma, o pasar de alguna forma los datos de alguna de las array's a otro metodo el cual es este:
Código (java) [Seleccionar]
public void Alquileres () {
ArrayList <String> matriclon = new ArrayList <String>(matriculaclon);
int op3, z;
String matri;
do {
System.out.println("3.1- Alquilar");
System.out.println("3.2- Listar autos alquilados");
System.out.println("3.3- Consultar Estado");
System.out.println("0- Volver");
System.out.print("Opcion: ");
op3 = dato.nextInt();
switch(op3) {

case 1:
dato.nextLine();
System.out.print("Matricula del vehiculo: ");
matri = dato.nextLine();
for (int f= 0; matricula.size()) {

}
}

}while(op3 != 0);

Posiblemente encuentren mas errores que no vienen al caso (Lo se soy muy nuevo en esto jaja!)... Utilize "ArrayListnombre.clone" pero no puedo "clonarlo" a otro metodo, o mejor dicho no se como hacerlo  :( , Por favor abstenerse de configurarme el codigo y pasarmelo, quiero aprender de mis errores, desde ya muchas gracias!

3n31ch

Te dí una respuesta mas trabajada por privado. Sin embargo, te responderé cortamente por acá. Para pasar variables de un método a otro existen 4 formas.

1. Que la variable sea una atributo de la clase que contenga los dos métodos:

Código (java) [Seleccionar]

public class MyClass{
     private ArrayList<String> nombres = new ArrayList<>();
     public void methodA() {
          this.nombres.add("new name");
     }
     public void methodB(int index) {
          System.out.println(this.nombres.get(index));
     }
}


2. Que la variable sea estática:

Código (java) [Seleccionar]

public class MyClass{
     public static ArrayList<String> nombres = new ArrayList<>();
     public void methodA() {
          MyClass.nombres.add("new name");
     }
     public void methodB(int index) {
          System.out.println(MyClass.nombres.get(index));
     }
}


3. Que la envíes como parámetro

Código (java) [Seleccionar]

public class MyClass{
     public void methodA() {
          ArrayList<String> nombres = new ArrayList<>();
          nombres.add("new name");
          methodB(nombres, 0);
     }
     public void methodB(ArrayList<String> nombres, int index) {
          System.out.println(nombres.get(index));
     }
}


4. Que la obtengas desde un método get, instanciando un objeto de la clase que la contiene:

Código (java) [Seleccionar]

public class MyClassA{
     private ArrayList<String> nombres = new ArrayList<>();
     public ArrayList<String>getNombres() {
          return this.nombres;
     }
}
public class MyClassB{
     public void methodB(int index) {
          MyClassA myClassA = new MyClassA();
          System.out.println(myClassA.getNombres().get(index));
     }
}


En tu caso, la mejor es la número 1.

Saludos.-