亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

移動字符串數組中的元素,直到所選字母位于索引 0

移動字符串數組中的元素,直到所選字母位于索引 0

收到一只叮咚 2021-10-13 17:22:23
我有一個字符串數組,如 first_page = {{"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,它會搜索A(A字符串中只有一個)并不斷將A每個元素向上移動一個索引,最后一個索引下的元素被移動到 index 0,而A不在 index 0。實現它的最簡單方法是什么?我遇到了麻煩,我目前不太工作的代碼如下:   for(int i = 0; i<25;i++) {        help[i] = first_page[keys_int[0]][i];                  }     for(int i = 0; i<25;i++) {       if(first_page[keys_int[0]][i].equals(plain_chars[0].toUpperCase())) {           rememberedi = i;          int k = i;            do {                first_page_copy[keys_int[0]][k+1] = help[k];                first_page_copy[keys_int[0]][k] = help[k-1];                k++;                if(k==24) {                    first_page_copy[keys_int[0]][k+1] = help[k];                          first_page_copy[keys_int[0]][0] = help[24];                          k = 1;                }              }while(!first_page[keys_int[0]][0].equals(plain_chars[0]));            i = 26;       }    }    該數組是多維的,但我只處理所選列中的一行。我將數組中的整行復制到數組中help,然后繼續用當前位置替換下一個元素,用上一個替換當前元素。感謝任何回應。
查看完整描述

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只包含一個字母。


查看完整回答
反對 回復 2021-10-13
?
慕萊塢森

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

}


查看完整回答
反對 回復 2021-10-13
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

數組移位算法非常簡單。最好在示例中展示它:

  1. 初始數組 {'a', 'b', 'c', 'd', 'e'}

  2. 您想'c'成為第一個元素,因此將數組向左移動以獲取offs = 2位置

  3. 第 1 步:反轉數組中的所有元素:{'e', 'd', 'c', 'b', 'a'}

  4. 第 2 步:反轉第一個3元素arr.length - offs = 5 - 2 = 3{'c', 'd', 'e', 'b', 'a'}

  5. 第 3 步:反轉最后一個2元素offs = 2{'c', 'd', 'e', 'a', 'b'}

  6. 在這里,您已經將給定的數組移動了 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;

}


查看完整回答
反對 回復 2021-10-13
  • 3 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號