2011-09-05 92 views
0

我正在研究一個小型的java程序,它的基本功能和我的功能之一是通過給定的鍵來改變字母表。我已經掌握了它的工作方式,但是它的方向錯了,我怎麼能讓它轉向另一個方向呢?shift array by k

public static char[] ourAlphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 


    public char[] shiftAlphabet(int key) { 

      int length = ourAlphabet.length; 

      char[] result = new char[length]; 

      for (int i=0; i < length; i++) 
      { 
       result[(i+key+26)%length] = ourAlphabet[i]; 
      } 

      return result; 
    } 

我猜它很簡單,但它讓我困惑!

例如;用鍵19產生 ; hijklmnopqrstuvwxyzabcdefg

什麼時候應該產生; TUVWXYZABCDEFGHIJKLMNOPQRS

+0

您是否嘗試用'-key'替換'+ key'? – wormsparty

+0

現在這種方式正在改變,您希望它轉移到哪個方向? –

+0

請注意,您可以通過保存和交換值(如排序)來限制自己使用ourAlphabet數組。 –

回答

2

如果使用result[(i-key+26)%length] = ourAlphabet[i];

然而,如果長度應該努力= 26,這仍然會給一個錯誤的結果!

因此我會用長度替換26;

result[(i-key+length)%length] = ourAlphabet[i]; 
+0

確實。硬編碼值是一種不好的做法。 –

8

更改爲:

result[i] = ourAlphabet[(i+key)%length]; 
0
public static char[] ourAlphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 


public char[] shiftAlphabet(int key) { 

     int length = ourAlphabet.length; 

     char[] result = new char[length]; 

     for (int i=0; i < length; i++) 
     { 
      ourAlphabet[(i+key+26)%length] = result[i]; 
     } 

     return result; 
} 
+0

'result'中的字符尚未初始化。 – Marcelo

+0

這可能會覆蓋字符。在for循環中需要一個臨時變量。 –