【发布时间】:2013-12-31 06:54:32
【问题描述】:
我正在尝试实现一个简单的 cesar 密码。我在使用基于新键 [] 对字符串进行编码的函数时遇到问题。在这里,我展示了如何设置我的密钥。
private String[] alphabet = {"a", "b", "c","d", "e", "f","g", "h", "i","j", "k", "l","m", "n", "o",
"p", "q", "r","s", "t", "u","v", "w", "x","u", "z"};
public String[] CoderNewKey(int shift) {
_NewKey = null;
_NewKey = new String[25];
for (int i = 0; i < 25; i++) {
_NewKey[i] = alphabet[(i + shift) % 25];
}
return _NewKey;
}
我遇到的问题是 Coder,没有一个 if 语句是真的,而且 rtnstring 总是只是 ""。
public String Coder(String[] key, String msg){
String rtnstring = "";
for ( int i = 0; i < msg.length();i++){
for (int x = 0; x<26 ; x++){
if ( msg.substring(i, i+1) == alphabet[x]){
rtnstring.concat(key[x]);
}if (msg.substring(i, i+1) == " "){
rtnstring.concat(" ");
}
}
}
return rtnstring;
}
这是我对编码器方法的逻辑。
它一次通过字符串 msg 1 个字母。它将字母与其在字母表中的索引匹配,然后根据给定键中的索引创建一个新字符串。
【问题讨论】:
-
在java中,字符串应该总是与equals方法进行比较。你会在这里找到一个很好的解释。thejavageek.com/2013/07/27/…
-
这种问题每天大约问1-5次。答案是不断泛滥
-
@RafaEl 这个问题有一个有趣的转折点,最好的答案是“不要使用
String”。 -
@chrylis 我想我们大多数人都同意这一点。但是我很生气看到 "for string comparison, use equals(), equalsIgnoreCase()" 类型的答案:-/