Error handling ArrayList in Java

0

Aldo Francisco Castillo shared a link. 6 min

Hello, good! I appeal to you this time with two Java questions. I find myself doing a U laboratory for which I must store polar coordinates (x, y), for this I am using the code that I leave below, but at the time of testing it fails as it is in the image, which could be ?

The aux "coordinatesAux" list appears empty when I print it out of the if where I add elements to it.

Also, when adding elements, I change all the existing elements with the element that I am adding.

Code:

private ArrayList<ArrayList<Character>> constructor(int filas, int columnas, int seed, ArrayList<Pieza> piezas, int gamePieces)
{
    ArrayList<ArrayList<Character>> newBoard = new ArrayList<>();
    ArrayList<ArrayList<Integer>> coordenadasAux = new ArrayList<>();
    ArrayList<ArrayList<Integer>> dondePonerGato = new ArrayList<>();
    ArrayList<Integer> parOrdenado = new ArrayList<>();
    ArrayList<ArrayList<Integer>> coordenadas;
    Pieza pieza;
    int numeroRandom;
    int sumador;
    int sumadorFilas;
    int sumadorColumnas;
    int verificador;
    int aux;
    int n = 0;
    int aux2 = 1;
    int gatos;

    newBoard = inicializarTablero(filas, columnas);

    while (n < gamePieces)
    {
        aux = 0;
        gatos = 0;
        verificador = 0;

        numeroRandom = (int) ((Math.random() * (seed + aux2)) % 19);
        pieza = piezas.get(numeroRandom);
        coordenadas = pieza.coordenadas;

        sumador = (int) (Math.random() * (seed + aux2));
        sumadorFilas = sumador % filas;
        sumadorColumnas = sumador % columnas;




        for (int i = 0; i < filas; i++)
        {
            for (int j = 0; j < columnas; j++)
            {
                if (aux <= 3)
                {
                    if (i == (coordenadas.get(0).get(aux) + sumadorFilas) && j == (coordenadas.get(1).get(aux)) + sumadorColumnas)
                    {
                        if (newBoard.get(i).get(j) == '#')
                        {
                            System.out.println("gato encontrado, verificador = 1");
                            verificador = 1;
                            aux++;
                        }
                    }
                }
            }
        }

        aux = 0;

        if (verificador != 1)
        {
            System.out.println("//////////////////// iniciando busqueda de coordenadas ////////////////////");
            for (int i = 0; i < filas; i++)
            {
                for (int j = 0; j < columnas; j++)
                {
                    //System.out.println("n: " + n);
                    if (aux <= 3)
                    {
                        if (i == (coordenadas.get(0).get(aux) + sumadorFilas) && j == (coordenadas.get(1).get(aux) + sumadorColumnas))
                        {
                            System.out.println("i: " + i + "\n" + "j: " + j + "\n" + "coordenada fila: " + (coordenadas.get(0).get(aux) + sumadorFilas) + "\n" + "coordenada columna: " + (coordenadas.get(1).get(aux) + sumadorColumnas));

                            parOrdenado.add(i);
                            parOrdenado.add(j);
                            System.out.println("par ordenado: " + parOrdenado);

                            coordenadasAux.add(parOrdenado);
                            System.out.println("coordenadas aux: " + coordenadasAux);

                            parOrdenado.clear();

                            aux++;
                            gatos++;
                        }
                        //System.out.println("coordenadas Aux" + coordenadasAux);
                    }// fin if aux <= 3
                    //System.out.println("coordenadas Aux" + coordenadasAux);
                }// fin for columnas
                //System.out.println("coordenadas Aux" + coordenadasAux);
            }// fin for filas

            //System.out.println("coordenadas Aux" + coordenadasAux);

            if ((coordenadasAux.size() % 4) != 0)
            {
                System.out.println("coordenadas aux: " + coordenadasAux);
                coordenadasAux.clear();
                System.out.println("coordenadas aux: " + coordenadasAux + " borrado");
            }

            else
            {
                System.out.println("coordenadas aux: " + coordenadasAux + "\ndonde Poner Gato: " + dondePonerGato);
                dondePonerGato.addAll(coordenadasAux);
                coordenadasAux.clear();
                System.out.println("coordenadas aux: " + coordenadasAux + " copiadas\nen dondePonerGato: " + dondePonerGato + "\ny borradas");
            }
        }

        if ((gatos % 4) == 0)
        {
            n++;
        }

        aux2++;
    }

    //newBoard = agregarGatos(newBoard, dondePonerGato);
    return newBoard;
}

Errors:

//////////////////// iniciando busqueda de coordenadas //////////////////// i: 8 j: 4 coordenada fila: 8 coordenada columna: 4 par ordenado: [8, 4] coordenadas aux: [[8, 4]] i: 9 j: 4 coordenada fila: 9 coordenada columna: 4 par ordenado: [9, 4] coordenadas aux: [[9, 4], [9, 4]] coordenadas aux: [[], []] coordenadas aux: [] borrado //////////////////// iniciando busqueda de coordenadas //////////////////// i: 3 j: 3 coordenada fila: 3 coordenada columna: 3 par ordenado: [3, 3] coordenadas aux: [[3, 3]] i: 4 j: 3 coordenada fila: 4 coordenada columna: 3 par ordenado: [4, 3] coordenadas aux: [[4, 3], [4, 3]] coordenadas aux: [[], []] coordenadas aux: [] borrado //////////////////// iniciando busqueda de coordenadas //////////////////// i: 9 j: 3 coordenada fila: 9 coordenada columna: 3 par ordenado: [9, 3] coordenadas aux: [[9, 3]] coordenadas aux: [[]] coordenadas aux: [] borrado //////////////////// iniciando busqueda de coordenadas //////////////////// i: 3 j: 3 coordenada fila: 3 coordenada columna: 3 par ordenado: [3, 3] coordenadas aux: [[3, 3]] i: 3 j: 4 coordenada fila: 3 coordenada columna: 4 par ordenado: [3, 4] coordenadas aux: [[3, 4], [3, 4]] i: 4 j: 4 coordenada fila: 4 coordenada columna: 4 par ordenado: [4, 4] coordenadas aux: [[4, 4], [4, 4], [4, 4]] i: 5 j: 4 coordenada fila: 5 coordenada columna: 4 par ordenado: [5, 4] coordenadas aux: [[5, 4], [5, 4], [5, 4], [5, 4]] coordenadas aux: [[], [], [], []] donde Poner Gato: [] coordenadas aux: [] copiadas en dondePonerGato: [[], [], [], []] y borradas //////////////////// iniciando busqueda de coordenadas //////////////////// coordenadas aux: [] donde Poner Gato: [[], [], [], []] coordenadas aux: [] copiadas en dondePonerGato: [[], [], [], []] y borradas

    
asked by Army564 28.12.2018 в 02:23
source

1 answer

1

The problem you have is that you do the following:

coordenadasAux.add(parOrdenado);
parOrdenado.clear();

You have to keep in mind that aux coordinates are not adding the list but a reference to that list, so if you then clear the list with clear, that change will also be reflected in coordinatesAux and you get the result:

coordenadas aux: [[], []]

To avoid this you could change parOrdenado.clear () by:

parOrdenado = new ArrayList<>();

This way you clean the list, but the address pointed to by the list changes and the changes you apply to parOrdenado are not going to be reflected in coordinatesAux.

Greetings and I hope it serves you.

    
answered by 28.12.2018 / 10:01
source