2017-10-11 137 views
1

我想編寫一個程序,它將接收一個字符串並將2添加到字符串的每個字符,這很簡單這裏是我的代碼。 例子: -在Java中對字符串進行簡單加密

String str="ZAP YES"; 
nstr="BCR AGU" //note Z=B and Y=A 

String str=sc.nextLine(); 
String nstr=""  
for(int i=0;i<str.length();i++) 
    { 
     char ch=sc.charAt(i); 
     if(ch!=' ') 
     { 
      if(ch=='Z') 
       ch='B'; 
      else if(ch=='Y') 
       ch='A'; 
      else 
       ch=ch+2; 
     } 
     nstr=nstr+ch; 
    } 

現在我想的n倍(而不是2),這真是我沒能解決,增加的每一個字符。

我可能會想到使用n%26,並使用循環的條件,但我無法解決它如何實現。

+1

想想,如果你有CH爲 'Z' 會發生什麼?如果你的角色的ascii char值是256,會發生什麼? – SMA

+0

你是什麼意思,'通過n'? – notyou

+0

與第一種情況相同,n是一個變量,現在它是在運行時決定的。 – quadgen

回答

3

您對使用% 26有正確的想法。缺失的部分是你的範圍不是基於零的。

for (int i = 0; i < str.length(); i++) { 
    char ch = str.charAt(i); 
    if (ch != ' ') { 
     ch = (char)((ch - 'A' + n) % 26 + 'A'); 
    } 

    nstr += ch; 
} 
+0

剛剛編譯好你的代碼,它的工作完美無缺,謝謝。 – quadgen

+0

可以在2分鐘內接受你的答案,並由SO – quadgen

2

你必須:可以通過減去 'A'(i..e,治療 'A' 爲0時, 'B' 爲1,等),然後readding它模擬一個從零開始的範圍:

  1. 以你的性格,它重新映射到0-26指數
  2. 您的增量添加到該索引
  3. 套用26模的結果
  4. 重新映射指數再次回到ASCII

例子:

public static char increment(char c, int n) { 
    return (char) (((c - 'A') + n) % 26 + 'A'); 
} 

public static void main(String[] args) { 
    System.out.println(increment('Z', 1)); // returns 'A' 
    System.out.println(increment('Z', 2)); // returns 'B' 
} 
+0

說你是一分鐘遲到先生不能接受你的答案,但它幫助了我,因此我+1。 – quadgen

+0

ahah下次我會先發布代碼,然後用評論編輯:)快樂編碼! – Oneiros

相關問題