es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Combinar múltiples booleanos con elementos de List en Android.

Hola, estoy desarrollando un juego y trabajando en la detección de colisiones. Por ahora, mi método no permite agregar elementos dinámicamente, como puedes ver, estoy agregando nodos de colisión (11, 12, 13, …) manualmente. Aquí está mi código:

private boolean isNotACollision(int index, int actualIndex) {
    return title.equals("shop")
            && index != 11 && index != 12 && index != 13 && index != 21 && index != 23 && index != 31 && index != 33
            && actualIndex != 11 && actualIndex != 12 && actualIndex != 13 && actualIndex != 21 && actualIndex != 23 && actualIndex != 31 && actualIndex != 33;
}

Quiero construir dinámicamente un boolean isNotCollision() dependiendo del número de elementos de colisión en List<integer>. Quiero reconstruirlo de tal manera que tenga List<integer> collisionNodes como argumento.

private boolean isNotACollision(int index, int actualIndex, List<integer> collisionNodes) {
    boolean shopMapCollision = (title.equals("shop")
            && ¿QUÉ AQUÍ??;
    return shopMapCollision;
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para construir dinámicamente el método isNotACollision(), puedes utilizar un bucle for para iterar a través de la lista collisionNodes y agregar las condiciones correspondientes a la variable booleana shopMapCollision. Aquí tienes un ejemplo:

    private boolean isNotACollision(int index, int actualIndex, List<integer> collisionNodes) {
        boolean shopMapCollision = (title.equals("shop")) ? true : false; // inicializar como verdadero si no es un mapa "shop"
        for (int node : collisionNodes) {
            if (index == node || actualIndex == node) {
                shopMapCollision = false;
                break; // salir del bucle prematuramente si se encuentra un nodo de colisión
            }
        }
        return shopMapCollision;
    }
    

    En esta versión del método isNotACollision(), se pasa la lista collisionNodes como argumento. El método inicializa la variable shopMapCollision como true si el mapa no es el mapa “shop”. Luego, el bucle for itera a través de la lista collisionNodes y agrega la condición (index == node || actualIndex == node) a la variable shopMapCollision. Si se encuentra un nodo de colisión, la variable shopMapCollision se establece en false y el bucle se sale prematuramente utilizando la sentencia break. Finalmente, el método devuelve la variable shopMapCollision.

    Ahora puedes llamar al método isNotACollision() con diferentes listas de nodos de colisión, y construirá dinámicamente las condiciones basadas en el número de elementos en la lista. Por ejemplo:

    List<integer> nodes1 = Arrays.asList(11, 12, 13, 21, 23, 31, 33);
    List<integer> nodes2 = Arrays.asList(14, 15, 16);
    boolean result1 = isNotACollision(20, 30, nodes1); // devuelve false
    boolean result2 = isNotACollision(20, 30, nodes2); // devuelve true
    

    En el primer ejemplo, el método isNotACollision() verificará si los parámetros index y actualIndex son iguales a alguno de los elementos de la lista nodes1, y devolverá false si se detecta una colisión. En el segundo ejemplo, el método isNotACollision() devolverá true porque ninguno de los elementos de la lista nodes2 coincide con los parámetros index o actualIndex.

Comments are closed.