这可能是一个简单的修复,但我似乎无法解决它。
我试图在for循环期间为字符的ascii值添加一个整数。
它给了我程序期望变量而不是值的错误。我怎样才能做我想在这里做的事情?
以下是代码:
public boolean toggleEncryption(){
if(encrypted == false){
for(int i = 0; i < sentence.length(); i++){
if(sentence.charAt(i) >= 65 && sentence.charAt(i) <= 90){
int x = (int)sentence.charAt(i);
x += key;
while(x > 90){
x = x - 26;
}
sentence.charAt(i) += (char)x;
}
}
}
return encrypted;
}
sentence.charAt(i) += (char)x;
行不适合我
答案 0 :(得分:6)
简单:
sentence.charAt(i) += (char)x;
你错误地认为charAt()
给你一个“左手边”的东西。换句话说:您可以分配值的内容;像一个变量。
但这是不可能的:charAt()
返回一个char值;表示该索引处字符串中的char。
它不给你一些允许你操纵字符串本身的东西!字符串是不可改变的;您无法使用charAt()
修改其内容!
换句话说;你可以这样做:
char c = 'a';
c += 'b';
但你不能用charAt()
来实现同样的目标!
因此,为了使您的代码有效,您必须构建一个 new 字符串,例如:
StringBuilder builder = new StringBuilder(sentence.length());
for(int i = 0; i < sentence.length(); i++) {
if(sentence.charAt(i) >= 65 && sentence.charAt(i) <= 90){
int x = (int)sentence.charAt(i);
x += key;
while(x > 90){
x = x - 26;
}
builder.append(sentence.charAt(i) + (char)x));
} else {
builder.append(sentence.charAt(i));
}
}
(免责声明:我刚刚写下了上面的代码;那里可能存在拼写错误或小错误;它应该是“伪代码”,以帮助您前进!)
除此之外:我找到了该方法的名称;以及它如何处理该布尔字段...有点令人困惑。你看,如果加密是真的 ......方法什么都不做?!然后它不会“切换”任何东西。因此,这个名字真的是误导性的。不匹配你的代码正在做什么!
答案 1 :(得分:0)
这里charAt(i)
返回一个char:
sentence.charAt(i) += (char)x;
1)您不能为某个值指定一个字符,但可以将其设置为变量。
2)即使您使用了诸如
之类的变量char tempChar = sentence.charAt(i);
你不能这样做:
tempChar += (char)x;
因为你不能用另一个角色增加(+=)
一个角色。