Método para desplazar todos los componentes de un Array un lugar a
la derecha. El último elemento pasará a la primera posición.
Ejemplo, si el Array original contiene los siguientes valores:
15
|
22
|
4
|
56
|
71
|
10
|
2
|
Se realizarán los siguientes desplazamientos:
De forma que el contenido final de Array sea este:
2
|
15
|
22
|
4
|
56
|
71
|
10
|
En este caso el contenedor será un ArrayList. El método
recibirá un ArrayList de tipo Integer con una serie de valores numéricos y
devolverá el mismo ArrayList con sus elementos desplazados una posición a la
derecha. Los desplazamientos se realizarán sobre el mismo array. No se puede
utilizar un array auxiliar para reailzar el proceso.
Solución:
Vamos a
resolverlo de dos maneras. La primera será el método que podríamos llamar clásico para rotar las componentes de un array que consiste en guardar el último elemento del array en una variable
auxiliar, a continuación desplazar todos los elementos una posición a la
derecha desde el final hasta el principio del array y por último asignar al
primer elemento el valor guardado en el auxiliar.
Este es
el código Java de este primer método de desplazamiento:
public static void desplazarDerecha(ArrayList<Integer> a) {
int i;
int aux = a.get(a.size() - 1); //guardar el último elemento en una variable
for (i = a.size() - 1; i > 0; i--) { //desplazar los elementos
a.set(i, a.get(i - 1)); //a cada elemento se le asigna el anterior
}
a.set(0, aux); //asignar al primero el último que se guardó al principio
}
La segunda
forma de resolverlo es utilizando dos métodos de la clase ArrayList:
add(posición,
valor);
remove(posición);
Con el
método add insertamos al principio del ArrayList el último valor. Insertar en
una posición significa crear un elemento nuevo en esa posición y desplazar el
resto de los elementos hacia la derecha.
Por ejemplo, si el array es este:
15
|
22
|
4
|
56
|
71
|
10
|
2
|
Al insertar el último elemento al principio, el contenido del array ahora
es este:
2
|
15
|
22
|
4
|
56
|
71
|
10
|
2
|
Solo queda eliminar el último elemento y tendremos el resultado:
2
|
15
|
22
|
4
|
56
|
71
|
10
|
Este es
el código Java de este segundo método de desplazamiento:
public static void desplazarDerecha2(ArrayList<Integer> a) {
int aux = a.get(a.size()-1); //guardar el último elemento en una variable
a.add(0,aux); //insertar al principio el último valor
a.remove(a.size()-1); //eliminar el último elemento
}
Programa completo
para utilizar estos métodos:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> A = leerArray();
mostrar(A);
//utilizando el método clásico
desplazarDerecha(A);
mostrar(A);
//utilizando solo los métodos de ArrayList
desplazarDerecha2(A);
mostrar(A);
}
//pedir por teclado los valores del ArrayList
public static ArrayList<Integer> leerArray() {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> numeros = new ArrayList<>();
int N;
do {
System.out.print("Número de elementos del array (>0): ");
N = sc.nextInt();
} while (N <= 0);
for (int i = 0; i < N; i++) {
System.out.print("elemento[" + i + "]= ");
numeros.add(sc.nextInt());
}
return numeros;
}
//método clásico: guardamos el último elemento en un auxiliar,
//desplazamos todos los elementos una posición a la derecha
//finalmente guardamos en el primer elemento el valor guardado en el auxiliar
public static void desplazarDerecha(ArrayList<Integer> a) {
int i;
int aux = a.get(a.size() - 1); //guardar el último elemento en una variable
for (i = a.size() - 1; i > 0; i--) { //desplazar los elementos
a.set(i, a.get(i - 1)); //a cada elemento se le asigna el anterior
}
a.set(0, aux); //asignar al primero el último que se guardó al principio
}
//Utilizando métodos de ArrayList:
//guardamos el último elemento en una variable
//insertamos este elemento al principio
//eliminamos el último elemento
public static void desplazarDerecha2(ArrayList<Integer> a) {
int aux = a.get(a.size()-1);
a.add(0,aux);
a.remove(a.size()-1);
}
//Método para mostrar todo el ArrayList
public static void mostrar(ArrayList<Integer> a) {
System.out.println(a);
}
}
public static void main(String[] args) {
ResponderEliminar// TODO Auto-generated method stub
ArrayList tabla= new ArrayList();
datosLista(tabla);
rotar(tabla);
}
private static void rotar(ArrayList tabla) {
// TODO Auto-generated method stub
int aux= tabla.get(0);
tabla.remove(0);
tabla.add(aux);
System.out.println("algo");
}
private static void datosLista(ArrayList tabla) {
// TODO Auto-generated method stub
tabla.add(15);
tabla.add(22);
tabla.add(4);
tabla.add(56);
tabla.add(71);
tabla.add(10);
tabla.add(2);
}
Utilizando los metodos de ArrayList lo hice de esta forma:
ResponderEliminarpublic void rotacionArrayList (){
ArrayList array = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9));
System.out.println(array);
array.add(0, array.get(array.size()-1));
array.remove(array.size()-1);
System.out.println(array);
}