2012-09-12 148 views
2

我有一個問題,其中包含字母表中的字母數組。我想知道將數組元素移動一定數量的最佳方式是什麼。例如,如果關鍵是2,移動數組元素一定量?

array = "A,B,C,D,E.." 

我怎麼能提出的是,這樣的改造後,

array = "C,D,E,F,G..." 

會最簡單的辦法是if聲明?

感謝

+0

你說你有一個*陣列*,但你的變量實際上看起來像一個*字符串*包含逗號分隔值? – ruakh

+0

所以在轉換之後,A和B是在列表的末尾還是被截斷? – Mike

+0

@ monkybonk05根據我的回答評論,OP希望他們在列表的末尾。 – Baz

回答

0

這應做到:

char[] input = ... 
char[] result = new char[input.length]; 
int shift = 2; 

for(int i = 0; i < input.length; i++) 
{ 
    result[i] = input[(i + shift) % input.length]; 
} 

正如你所看到的,你需要一個for循環。 if不會這樣做。它會將所有的char s兩​​個轉移到左邊。

其結果將是:['C', 'D', ..., 'Z', 'A', 'B']

這種方法被稱爲一個circular shift

+0

如果我做了input.length - 2,那會給我一個24的數組。如果我希望它的大小是26,那麼Z映射到B?對不起,沒有說清楚。 – AkshaiShah

+0

@AkshaiShah啊,我明白了。更新了我的答案。 – Baz

+0

忘了問模數input.length是做什麼的? – AkshaiShah

0
char[] newArray = Arrays.copyRange(oldArray, shiftValue, oldArray.length); 

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#copyOfRange(char[], int, int)

編輯:如果您需要在陣列旋轉,看看下面的方法:

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#rotate(java.util.List, int)

或者:

Character[] arr = {'a', 'b', 'c', 'd'}; 
List<Character> chars = Arrays.asList(arr); 
Collections.rotate(chars, -2); 
arr = chars.toArray(new Character[0]); 
+0

我認爲這樣做會完成這項工作,只是想知道從= 2開始,還是= 1,這是否意味着我的新陣列將從B開始並以A結尾? – AkshaiShah

+0

它會拋出一個'IllegalArgumentException'。如果你需要從>到,那麼編寫你自己的實現會容易得多。 – jn1kk

3

你必須使用數組,如何收集,如列表...

List<?> list = Arrays.asList('A', 'B', 'C', 'D', 'E'); 
Collections.rotate(list, -2); 
System.out.println(list); 

輸出

[C, D, E, A, B] 

替代,使用靈長類動物的類包裝...例如陣列字符,整型等,這將仍然允許使用的集合通過直寫Arrays.asList()方法....

final Character[] array = { 'A', 'B', 'C', 'D', 'E' }; 
    Collections.rotate(Arrays.asList(array), -2); 
    System.out.println(Arrays.toString(array)); 

輸出

[C, D, E, A, B] 
+0

對不起我的朋友,不得不使用數組 – AkshaiShah

0

你試過Collections.rotate

final Character[] vals = { 'A', 'B', 'C', 'D', 'E' }; 
final List<Character> list = Arrays.asList(vals); 
Collections.rotate(list, -2); 
/* vals will be rotated */ 
System.out.println(Arrays.toString(vals)); 

...產生(見ideone paste):

[C,d,E,A,B]