Movimiento todos hacia abajo el elemento en un array (Java)

He tenido una búsqueda decente y soy incapaz de encontrar el código de trabajo que se mueve hacia abajo una matriz. Lo que estoy esperando a hacer, es la de almacenar el valor en la última posición en la matriz, reemplace la última posición y, a continuación, mueva la matriz[20] de la matriz[19]. Esto es para contar los últimos 20 movimientos que hace el jugador, pero estoy teniendo problemas para almacenar en realidad. Esto es lo que he intentado hacer

//an int moveArray[20] previously stated and instantiated
int temp1, temp2;

for (int i = moveArray.length - 1; i > 0; i--) 
{
     temp1 = moveArray[i - 1];
     temp2 = moveArray[i - 2];
     moveArray[i - 1] = moveArray[i];
     temp1 = temp2;
}
moveArray[moveArray.length - 1] = intoWalk;

consejos o soluciones realmente podría ayudar, gracias

  • Tu pregunta no es clara. Si usted tiene un arsenal con 20 elementos, que desea almacenar el 20 de elemento en el siglo 19 y también almacenar el valor contenido en el 19 de elemento antes de reemplazar. Qué es exactamente lo que usted planea hacer con el valor almacenado ? ¿Desea mover a los 18 años ?
  • el recuento de los últimos 20 movimientos que hace el jugador – suena como usted necesita un deque (FIFO), de tamaño 20.
InformationsquelleAutor DJCrawf | 2013-05-22

4 Kommentare

  1. 4

    Por lo que puedo entender de tu código . Usted debe utilizar el siguiente bucle, no parece haber ninguna necesidad de variables temporales.

    for(int i=0;i<moveArray.length-1;i++){ 
         moveArray[i] = moveArray[i+1];
    }
    moveArray[moveArray.length - 1] = intoWalk;
    • Muchas gracias, funciona perfectamente y ni siquiera me di cuenta de que podía hacerlo sin temps, Gracias de nuevo!
    • No sé por qué esto fue votada abajo. Es exactamente lo que yo haría y es una buena respuesta.
    • Incluso entonces usted también debe leer la respuesta por Florent con respecto a las Listas Enlazadas,que puede ser utilizado cuando usted no sabe la que no. de los últimos estados para ser almacenados.
  2. 3

    Primero, no es necesario utilizar variables temporales :

    int [] moveArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
    int intoWalk = 21;
    
    for (int i = 0; i < moveArray.length-1; i++) {
        moveArray[i] = moveArray[i+1];
    }
    moveArray[moveArray.length - 1] = intoWalk;
    
    for (int i=0; i<moveArray.length; i++)
        System.out.println(moveArray[i]);

    Pero hay una manera mejor de hacer esto : utilizar una lista enlazada para emular un FIFO :

    LinkedList<Integer> fifo = new LinkedList<Integer>();
    int intoWalk = 21;
    
    for (int i=1; i<=20; i++)
        fifo.add(i);
    
    fifo.removeFirst();
    fifo.add(intoWalk);
    
    for (Integer fifoItem : fifo)
        System.out.println(fifoItem);

    Al hacer esto, usted no tiene que modificar cada elemento en la matriz cada vez que desee agregar un número, sólo para agregar y quitar un elemento de la lista enlazada.

  3. 0
    //an int moveArray[20] previously stated and instantiated
    int temp1, temp2;
    temp1 = moveArray[moveArray.length - 1];
    for (int i = moveArray.length - 2; i >= 0; i--) 
    {
        temp2 = moveArray[i];
        moveArray[i] = temp1;
        temp1 = temp2;
    }
    
    moveArray[moveArray.length - 1] = intoWalk;

    Lo anterior debería hacer lo que quiera.

    Sin embargo, no creo que este es el camino correcto a seguir.

    Me gustaría utilizar la misma matriz como una matriz circular – de esa manera – usted no necesita moverse hacia abajo cada vez.

    Mantener un índice inicial. Comienza en

    start = 0;

    Se queda en 0 hasta el momento todos los 20 elementos están llenas.
    Cuando el siguiente elemento que entra,

    moveArray[start] = intoWalk;
    ++start;

    Cuando se desea iterar a través de la matriz en cualquier momento, de empezar a start en lugar de comenzar en 0.

    int i = start;
    do
    {
        //do what you want
    
        i = (i + 1)%20; 
    
    } while (i != start);
  4. 0

    Primero hacer el último elemento libre por el movimiento de todos los elementos de una fila hacia abajo.

    Ejemplo :

    String[] sarr=new String[10];
    for(int i=0;i<sarr.length;i++){
       sarr[i]=sarr[i+1];
    }

    A continuación, asigne la nueva variable para el final.

    sarr[sarr.length-1]="new value";

    Este enfoque es más simple y más fácil de leer.

    EDIT : Sí Bohemio es derecho lanzaba un ArrayIndexOutOfBounds excepción. La razón era que i+1 se intenta hacer referencia a un índice de la matriz de la gama en la última iteración.

    La solución es establecer el último elemento nulo o romper cuando es el último elemento.

    Voy a ir con la configuración de la última elemento nulo. El código modificado se presenta a continuación.

    int nextElementIndex = i + 1;
    sarr[i] = nextElementIndex < sarr.length ? sarr[nextElementIndex] : null;
    • Este código producirá un índice fuera de los límites exceptopn. Trate de i < arr.length - 1. También es de tipo int[] no String[]. De lo contrario, buena respuesta
    • arr.longitud – 1 no era el problema. Pero tienes razón, hay un error. He corregido.
    • Y también yo sólo quería mostrar OP de un ejemplo sencillo en lugar de cambiar su código, que en mi opinión fue demasiado complicado. Es muy fácil cambiar a cualquier tipo de.
    • Os aseguro que el código explotar si se ejecuta
    • Sí, sé que he corregido en la edición. Me estaba diciendo que no era debido a la condición de bucle 🙂
    • Al parecer tú no sé, porque ahora el código que has publicado para mover los elementos de abajo va a explotar! Mal hechizo para usted: En la última iteración, i será sarr.length - 1, que es el índice del último elemento, pero su código se hace referencia a sarr[i + 1]… BOOM!
    • Errm tío, ¿no ves mi edición? Que se fija. Pero es cierto que no de la manera que usted sugiere. Si el cambio de la matriz condición para sarr.length - 1, a continuación, el último elemento no se trajo abajo la matriz….. Estoy equivocado?
    • Sí, usted está equivocado. Yo sugiero que probar el código.
    • Oh, mierda. Debo pedir disculpas me encontré esto y se dio cuenta de lo que significaba…

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea