我有一個問題,其中包含字母表中的字母數組。我想知道將數組元素移動一定數量的最佳方式是什麼。例如,如果關鍵是2,移動數組元素一定量?
和
array = "A,B,C,D,E.."
我怎麼能提出的是,這樣的改造後,
array = "C,D,E,F,G..."
會最簡單的辦法是if
聲明?
感謝
我有一個問題,其中包含字母表中的字母數組。我想知道將數組元素移動一定數量的最佳方式是什麼。例如,如果關鍵是2,移動數組元素一定量?
和
array = "A,B,C,D,E.."
我怎麼能提出的是,這樣的改造後,
array = "C,D,E,F,G..."
會最簡單的辦法是if
聲明?
感謝
這應做到:
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。
如果我做了input.length - 2,那會給我一個24的數組。如果我希望它的大小是26,那麼Z映射到B?對不起,沒有說清楚。 – AkshaiShah
@AkshaiShah啊,我明白了。更新了我的答案。 – Baz
忘了問模數input.length是做什麼的? – AkshaiShah
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]);
我認爲這樣做會完成這項工作,只是想知道從= 2開始,還是= 1,這是否意味着我的新陣列將從B開始並以A結尾? – AkshaiShah
它會拋出一個'IllegalArgumentException'。如果你需要從>到,那麼編寫你自己的實現會容易得多。 – jn1kk
你必須使用數組,如何收集,如列表...
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]
對不起我的朋友,不得不使用數組 – AkshaiShah
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]
你說你有一個*陣列*,但你的變量實際上看起來像一個*字符串*包含逗號分隔值? – ruakh
所以在轉換之後,A和B是在列表的末尾還是被截斷? – Mike
@ monkybonk05根據我的回答評論,OP希望他們在列表的末尾。 – Baz