我想创建一个方法,它将使用一个短语和一个取自args的数字。 数字形式args会将短语的字母从args中移动为数字的字母数量。
示例 javac Caesar.java java Caesar abcd 1
最终结果应该打印出来 BCDE
我的方法给了我一些问题..帮助?
private String encode(String num, int x)
{
char[] charnum = args[1];
for (x = 0; x <= charnum.length; x++)
{
charnum = charnum + x;
}
return new String(charnum);
}
我该怎么办?同样,我必须编写一个解码器方法。 除了之外,我将会有相同的设置 for循环更改的效果
charnum = charnum - x;
我的问题是,当我尝试编译时,我收到以下错误
symbol : variable argslocation: class Lab041
char[] charnum = args[1];
^
Lab041.java:17: operator + cannot be applied to char[],int
charnum = charnum + x;
^
2 errors
我该如何解决?并且我对解码方法的假设是正确的吗?
答案 0 :(得分:2)
Charnum是一个字符数组。你想做的事:
for (i = 0; i <= charnum.length; i++) {
charnum[i] = (char) (charnum[i] + x);
}
这将引用该数组的元素。
另请注意,如果你翻过'z'
,你就没有安全防护装备答案 1 :(得分:2)
我会从一个更简单的编码方法开始,比如这个
private static String encode(String num, int x)
{
StringBuilder sb = new StringBuilder();
for (char c : num.toCharArray()) {
sb.append((char) (c + x));
}
return sb.toString();
}
然后使用它,我会使用像这样的主要方法
public static void main(String[] args)
{
if (args == null || args.length < 2) {
System.out.println("Not enough arguments.");
System.exit(1);
}
int val = Integer.valueOf(args[args.length - 1]);
for (int i = 0; i < args.length - 1; i++) {
if (i != 0) {
System.out.print(' ');
}
System.out.print(encode(args[i], val));
}
System.out.println();
}
答案 2 :(得分:1)
java cmd line args是一个字符串数组,你不能简单地将它分配给一个char数组,而String类有一个方法toCharArray()
还可以使用事实char数据类型可以通过加法运算符来操作,例如:
char c = 'a';
c = (char)(c + 1); // c is now 'b'
答案 3 :(得分:1)
类CaesarCipher {
private final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
public String encrypt(String plainText,int shiftKey)
{
plainText = plainText.toLowerCase();
String cipherText="";
for(int i=0;i<plainText.length();i++)
{
int charPosition = ALPHABET.indexOf(plainText.charAt(i));
int keyVal = (shiftKey+charPosition)%26;
char replaceVal = this.ALPHABET.charAt(keyVal);
cipherText += replaceVal;
}
return cipherText;
}
public String decrypt(String cipherText, int shiftKey)
{
cipherText = cipherText.toLowerCase();
String plainText="";
for(int i=0;i<cipherText.length();i++)
{
int charPosition = this.ALPHABET.indexOf(cipherText.charAt(i));
int keyVal = (charPosition-shiftKey)%26;
if(keyVal<0)
{
keyVal = this.ALPHABET.length() + keyVal;
}
char replaceVal = this.ALPHABET.charAt(keyVal);
plainText += replaceVal;
}
return plainText;
}
}