Inverser un tableau en Java [dupliquer]
cette question a déjà une réponse ici:
- comment inverser un tableau int en Java? 39 réponses
si j'ai un tableau comme celui-ci:
1 4 9 16 9 7 4 9 11
Quelle est la meilleure façon d'inverser le tableau pour qu'il ressemble à ceci:
11 9 4 7 9 16 9 4 1
j'ai le code ci-dessous, mais je trouve qu'il est un peu ennuyeux:
public int[] reverse3(int[] nums) {
return new int[] { nums[8], nums[7], nums[6], nums[5], num[4],
nums[3], nums[2], nums[1], nums[0] };
}
y a-t-il un moyen plus simple?
15 réponses
Collections.reverse()
peut faire ce travail pour vous si vous mettez vos numéros dans une List
de Integers
.
List<Integer> list = Arrays.asList(1, 4, 9, 16, 9, 7, 4, 9, 11);
System.out.println(list);
Collections.reverse(list);
System.out.println(list);
sortie:
[1, 4, 9, 16, 9, 7, 4, 9, 11]
[11, 9, 4, 7, 9, 16, 9, 4, 1]
si vous voulez inverser le tableau en place:
Collections.reverse(Arrays.asList(array));
il fonctionne depuis tableaux.asList retourne un proxy de passage en écriture au tableau original.
Si vous ne voulez pas utiliser Collections
, alors vous pouvez faire ceci:
for (i = 0; i < array.length / 2; i++) {
int temp = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
}
j'aime garder le tableau original et retourner une copie. C'est une version générique:
public static <T> T[] reverse(T[] array) {
T[] copy = array.clone();
Collections.reverse(Arrays.asList(copy));
return copy;
}
sans conserver le tableau original:
public static <T> void reverse(T[] array) {
Collections.reverse(Arrays.asList(array));
}
essayez ceci:
public int[] reverse3(int[] nums) {
int[] reversed = new int[nums.length];
for (int i=0; i<nums.length; i++) {
reversed[i] = nums[nums.length - 1 - i];
}
return reversed;
}
mon entrée était:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
et la sortie que j'ai eu:
12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
vous pourriez utiliser org.Apache.commun.lang.ArrayUtils :
ArrayUtils.reverse(array)
dans le cas où vous ne voulez pas utiliser une variable temporaire, vous pouvez aussi faire comme ceci:
final int len = arr.length;
for (int i=0; i < (len/2); i++) {
arr[i] += arr[len - 1 - i]; // a = a+b
arr[len - 1 - i] = arr[i] - arr[len - 1 - i]; // b = a-b
arr[i] -= arr[len - 1 - i]; // a = a-b
}
en place inversion avec montant minimum de swaps.
for (int i = 0; i < a.length / 2; i++) {
int tmp = a[i];
a[i] = a[a.length - 1 - i];
a[a.length - 1 - i] = tmp;
}
Ou vous pouvez faire une boucle par elle backeards
int[] firstArray = new int[]{1,2,3,4};
int[] reversedArray = new int[firstArray.length];
int j = 0;
for (int i = firstArray.length -1; i > 0; i--){
reversedArray[j++] = firstArray[i];
}
(note: je n'ai pas compilé ceci mais j'espère que c'est correct)
je ferais quelque chose comme ça:
public int[] reverse3(int[] nums) {
int[] numsReturn = new int[nums.length()];
int count = nums.length()-1;
for(int num : nums) {
numsReturn[count] = num;
count--;
}
return numsReturn;
}
vous foiré
int[] firstArray = new int[]{1,2,3,4};
int[] reversedArray = new int[firstArray.length];
int j = 0;
for (int i = firstArray.length -1; i >= 0; i--){
reversedArray[j++] = firstArray[i];
}
public void swap(int[] arr,int a,int b)
{
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
public int[] reverseArray(int[] arr){
int size=arr.length-1;
for(int i=0;i<size;i++){
swap(arr,i,size--);
}
return arr;
}
ce qui suit va inverser en place le tableau entre les index i
et j
(pour inverser l'appel de tableau entier reverse(a, 0, a.length - 1)
)
public void reverse(int[] a, int i , int j) {
int ii = i;
int jj = j;
while (ii < jj) {
swap(ii, jj);
++ii;
--jj;
}
}
ce code aiderait:
int [] a={1,2,3,4,5,6,7};
for(int i=a.length-1;i>=0;i--)
System.out.println(a[i]);
vous pouvez envoyer le tableau original à une méthode par exemple:
après cela vous créez un nouveau tableau pour tenir les éléments inversés
public static void reverse(int[] a){
int[] reversedArray = new int[a.length];
for(int i = 0 ; i<a.length; i++){
reversedArray[i] = a[a.length -1 -i];
}