Inverser un tableau en Java [dupliquer]

cette question a déjà une réponse ici:

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?

42
demandé sur theJollySin 2012-10-01 22:20:35

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]
70
répondu Vikdor 2012-10-07 14:06:32

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.

61
répondu Jordan Denison 2015-01-07 08:49:36

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;
}
31
répondu kanhai shah 2015-04-01 05:43:53

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));
}
11
répondu Luigi R. Viggiano 2013-01-27 14:42:08

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

9
répondu AWAiS SOOMrO 2018-04-22 17:41:27

vous pourriez utiliser org.Apache.commun.lang.ArrayUtils : ArrayUtils.reverse(array)

5
répondu EFalco 2014-03-21 14:37:40

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
}
4
répondu iaL 2015-08-05 17:29:45

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;
}
3
répondu Mathias Bak 2014-11-08 22:17:23

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)

2
répondu RNJ 2012-10-01 18:33:38

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;
}
2
répondu Rodrigo Kossmann 2012-10-01 18:35:34

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];
}
2
répondu user2719349 2013-08-26 20:13:52
 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;
}
2
répondu Himanshu Gupta 2015-01-12 05:42:20

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;
        }
    }
2
répondu David Soroko 2015-06-30 16:17:33

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]);
-2
répondu Jaipal Kumar 2014-12-04 17:43:30

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];


}
-3
répondu shayyy7 2015-08-16 11:25:55