2017-10-11 120 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

相关问题