2017-09-03 3 views
-4

Also versuche ich ein Array nach links zu verschieben, zB wenn das ursprüngliche Array '1,2,3,4' wäre, würde das transformierte '2,3,4, 1 ', das ist was ich bisher habe und ich bekomme immer wieder einen fehlenden Return Statement Fehler, wie würde ich es beheben?Verschiebe Array nach links

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

Ja, das ist, weil Sie eine return-Anweisung sind vermisst. – shmosel

+1

"Ich bekomme immer einen fehlenden Return-Statement-Fehler", weil Sie nichts zurückgeben, obwohl Ihre Methode sagt, dass sie ein 'int' zurückgibt. – tkausl

+0

Außerdem müssen Sie den Anfangswert von 'd [0]' beibehalten, damit Sie ihn dem letzten Element des letzten Arrays zuweisen können. Und deine 'println' werden wahrscheinlich nicht drucken, was du vorhast. –

Antwort

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

Beachten Sie, dass ein Array vielleicht der Größe Null, und Sie können "Index außerhalb der Grenzen Ausnahme" bekommen.

+2

hallo, verstehen Sie diesen Teil? d.length = 0? 0: d [0] – Melanie

0

Ihre Logik ist richtig, aber Sie brauchen nur einige Änderungen in Ihrem 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 
    } 

Sie müssen keine Daten zurück, weil Java die Referenz von das Objekt nicht Wert übergeben.

0

Mit 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; 
} 
Verwandte Themen