2017-09-03 4 views
-4

J'essaye donc de déplacer un tableau vers la gauche, par exemple, si le tableau original était '1,2,3,4', le tableau transformé deviendrait '2,3,4, 1 ', c'est ce que j'ai jusqu'ici et je continue d'obtenir une erreur de déclaration de retour manquant, comment pourrais-je réparer?Décaler le tableau vers la gauche

public int shift (int [] d){ 

    for(int from =1; from <= d.length-1; from++) 
     d[from-1]= d[from]; 

     System.out.println ("d[from]"+",d[0]"); 
    } 
+4

Oui, c'est parce que vous manquez une déclaration de retour. – shmosel

+1

"Je continue d'obtenir une erreur de déclaration de retour manquante" car vous ne renvoyez rien même si votre méthode indique qu'elle renvoie un "int". – tkausl

+0

De même, vous devez conserver la valeur initiale de 'd [0]', vous pouvez donc l'affecter au dernier élément du tableau final. Et votre 'println' n'imprimera probablement pas ce que vous avez l'intention de faire. –

Répondre

0
public static void shift(int[] arr, int offs) { 
    // e.g. arr = 1,2,3,4,5,6,7,8,9; offs = 3 
    offs %= arr.length; 
    offs = offs < 0 ? arr.length + offs : offs; 

    if (offs > 0) { 
     // reverse whole array (arr = 9,8,7,6,5,4,3,2,1) 
     for (int i = 0, j = arr.length - 1; i < j; i++, j--) 
      swap(arr, i, j); 
     // reverse left part (arr = 7,8,9,6,5,4,3,2,1) 
     for (int i = 0, j = offs - 1; i < j; i++, j--) 
      swap(arr, i, j); 
     // reverse right part (arr = 7,8,9,1,2,3,4,5,6) 
     for (int i = offs, j = arr.length - 1; i < j; i++, j--) 
      swap(arr, i, j); 
    } 
} 

private static void swap(int[] arr, int i, int j) { 
    int tmp = arr[i]; 
    arr[i] = arr[j]; 
    arr[j] = tmp; 
} 
-1
public int shift (int[] d) { 

    for(int from =1; from <= d.length-1; from++) 
     d[from-1]= d[from]; 

    System.out.println ("d[from]"+",d[0]"); 
    return d.length=0?0:d[0]; 
} 

Notez qu'un tableau peut-être de la taille zéro, et vous pouvez obtenir « indice hors exception des limites ».

+2

Salut, ça ne vous dérange pas d'expliquer cette partie? d.length = 0? 0: d [0] – Melanie

0

Votre logique est bonne, mais vous avez juste besoin de modifier votre code.

int data[]={1,2,3,4}; 

shift(data); 

//print out Shifted Array 
for(int n : data){ 
    System.out.println(n); 
} 

    public void shift(int[] d){ 
     int f=d[0]; // Store first index 

     int from=1; 
     for(;from<d.length;from++){ 
      d[from-1]=d[from]; 
     }  

     d[from-1]=f; //set first index to the last index 
    } 

Vous n'avez pas besoin de retourner des données, car java passe la référence de l'objet valeur non.

0

En utilisant Collections.rotate:

public List<Integer> shift(int [] d) { 
    List<Integer> intList = new ArrayList<Integer>(); 

    for (int index = 0; index < d.length; index++) { 
    intList.add(d[index]); 
    } 

    Collections.rotate(intList, -1); 
    return intList; 
}