繁体   English   中英

在for循环中添加到ASCII代码

[英]Adding to ascii code during for loop

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

我试图在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; 对我不起作用

简单:

sentence.charAt(i) += (char)x;

您错误地认为charAt()给您“左侧”的麻烦。 换句话说:您可以为其分配值的内容; 像一个变量。

但这是不可能的: charAt()返回一个char值; 代表该索引处字符串中的char。

没有给您提供让您操纵字符串本身的东西! 字符串是不可变的。 您不能使用charAt()修改其内容!

换一种说法; 你可以这样做:

char c = 'a';
c += 'b';

但是您不能使用charAt()实现相同的效果!

因此,为了使代码正常工作,您必须构建一个新的字符串,例如:

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)); 
  }
}

(免责声明:我只是写下了上面的代码;其中可能有错别字或小错误;它的意思是“伪代码”才能使您前进!)

除此之外:我找到了该方法的名称; 以及它如何处理该布尔字段...有点令人困惑。 您会看到,如果加密是正确的 ,则该方法不执行任何操作? 然后,它不会“切换”任何内容。 因此,这个名字确实令人误解。 与您的代码不匹配!

在这里charAt(i)返回一个char:

sentence.charAt(i) += (char)x;

1)您不能将字符分配给值,但可以将其分配给变量。

2)即使您使用了诸如

char tempChar = sentence.charAt(i);

您将无法执行以下操作:

tempChar += (char)x;

因为您不能将(+=)一个字符与另一个字符相加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM