2017-04-07 18 views
0

これは正しくコンパイルされますが、実行すると数値の配列が出力され、一連のエラーが出力されます。どのようにして左シフトシフトを残すことができますか?配列を左にシフトする方法は?

public class ArrayLeftShift { 
public static void main(String[] args) { 
    int[] myList = {95, -10, 23, -3, 78}; 

    System.out.print("myList: "); 
    printArray(myList); 

    leftShift(myList); 
    System.out.print("After left shift: "); 
    printArray(myList);  
} 

public static void leftShift(int[] list) { 
int other = list[list.length+1]; 

for (int i = list.length+2; i >= 0; i++) 
    list[i-1] = list[i]; 

list[0] = other; 
System.out.print("\nshifted Array: "); 
} 

public static void printArray(int[] list) { 
for (int d: list) 
    System.out.print(d + " "); 
System.out.println(); 
} 

} 
+0

出力は何ですか?どのようなエラーが出るのか。 –

+0

forループは長さ+ 2で始まり、永遠に実行されます。 – stark

+0

言語タグは重要です。 – crashmstr

答えて

0
public static int[] leftShift(int[] a) { 
    int[] r = new int[a.length]; 
    for (int i = 0; i < a.length - 1; i++) 
     r[i] = a[i+1]; 
    r[a.length - 1] = a[0]; 
    return r; 
} 

....

+0

これは実際に動作しました、ありがとうございます – DissolvedMan

+0

正しいマークを付けてください? –

0

期待どおりの出力はありますか?

「-10 23 -3 78」ですか?

または循環シフト左に "-10 23 -3 78 95"?

私は、環状に行くと、次のように実装します:あなたが左にすべてをシフトし、これは動作するはずのバックエンドへの最初の値をラップする場合

public static void leftShift(int[] list) { 
    int first = list[0]; 

    for (int i = 0; i < list.length - 1; i++) { 
    list[i] = list[i+1]; 
    } 

    list[list.length - 1] = first; 
} 
+0

OPはインプレースにシフトしようとしていますが、 – njzk2

+0

@ njzk2あなたは正しく編集されています。 –

関連する問題