在for循环期间添加ascii代码

时间:2017-04-09 18:45:19

标签: java

这可能是一个简单的修复,但我似乎无法解决它。

我试图在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;行不适合我

2 个答案:

答案 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;

因为你不能用另一个角色增加(+=)一个角色。