3 回答

TA貢獻1875條經驗 獲得超3個贊
正如其他答案已經說過的那樣,第一步是找到應該移動到 position 的字符的索引0。
private static int indexOf(char character, char[] characters) {
for (int i = 0; i < characters.length; i++) {
if (characters[i] == character) {
return i;
}
}
return -1;
}
然后我們可以使用這些類Arrays并System以快速的方式執行轉換。
protected static void shiftRight(char character, char[] characters) {
int indexOf = indexOf(character, characters);
if (indexOf > 0) {
char[] temp = Arrays.copyOfRange(characters, 0, indexOf);
System.arraycopy(characters, indexOf, characters, 0, characters.length - indexOf);
System.arraycopy(temp, 0, characters, characters.length - temp.length, temp.length);
}
}
如果indexOf是小于0的character沒有被發現。如果indexOf是0則characters不需要移位,因為數組已經具有所需的狀態。在這兩種情況下都不會發生轉變。
將此應用于問題中的字符:
public static void main(String[] args) throws Exception {
char character = 'A';
char[] characters = { 'U', 'M', 'Y', 'Q', 'I', 'A', 'L', 'D', 'P', 'F', 'E', 'G', 'T', 'Z', 'V', 'W', 'H', 'O', 'X', 'J', 'C', 'R', 'B', 'S', 'N', 'K' };
System.out.println(Arrays.toString(characters));
shiftRight(character, characters);
System.out.println(Arrays.toString(characters));
}
這打?。?/p>
[U, M, Y, Q, I, A, L, D, P, F, E, G, T, Z, V, W, H, O, X, J, C, R, B, S, N, K]
[A, L, D, P, F, E, G, T, Z, V, W, H, O, X, J, C, R, B, S, N, K, U, M, Y, Q, I]
請注意:我使用的是
一個數組,String而不是問題中使用的數組,char因為每個數組String只包含一個字母。

TA貢獻1810條經驗 獲得超4個贊
這聽起來像是很多不必要的轉變。如果我做對了,請告訴我:例如:{A,B,C,D,E,F,G} - 類型 'E' - 結果:{E,F,G,A,B,C,D}
在這種情況下:只需先找到 'E' 的索引,然后您就可以執行 for- 循環(不需要 do - while)
for(int i=0; i<source.length; i++){
target[i] = source[(i+index)%source.length];
}

TA貢獻1712條經驗 獲得超3個贊
數組移位算法非常簡單。最好在示例中展示它:
初始數組
{'a', 'b', 'c', 'd', 'e'}
您想
'c'
成為第一個元素,因此將數組向左移動以獲取offs = 2
位置第 1 步:反轉數組中的所有元素:
{'e', 'd', 'c', 'b', 'a'}
第 2 步:反轉第一個
3
元素arr.length - offs = 5 - 2 = 3
:{'c', 'd', 'e', 'b', 'a'}
第 3 步:反轉最后一個
2
元素offs = 2
:{'c', 'd', 'e', 'a', 'b'}
在這里,您已經將給定的數組移動了 2 個位置。
您可以就地完成所有這些操作,而無需創建臨時數組。這是一個很好的方法,特別是對于巨大的數組。
public static void shiftArray(char[] arr, char ch) {
int pos = indexOf(arr, ch);
if (pos > 0) {
for (int i = 0, j = arr.length - 1; i < j; i++, j--)
swap(arr, i, j);
for (int i = 0, j = arr.length - pos - 1; i < j; i++, j--)
swap(arr, i, j);
for (int i = arr.length - pos, j = arr.length - 1; i < j; i++, j--)
swap(arr, i, j);
}
}
輔助方法:
private static int indexOf(char[] arr, char ch) {
for (int i = 0; i < arr.length; i++)
if (arr[i] == ch)
return i;
return -1;
}
private static void swap(char[] arr, int i, int j) {
char ch = arr[i];
arr[i] = arr[j];
arr[j] = ch;
}
添加回答
舉報