2017-04-09 15 views
0

これはおそらく単純な修正ですが、解決できないようです。forループ中にASCIIコードを追加する

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

'sentence'がStringの場合、それは不変なので、変更することはできません。 –

+0

私は実際にそれを理解しようとしています。私はこのサイト全体をたくさん使いません。あなたの答えを受け入れるためにどこをクリックしますか? –

答えて

6

シンプルのために働いていません:

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

(免責事項そこにはバグがありますが、それはあなたを得るための「疑似コード」を意味します)。

それ以外では:そのメソッドの名前が見つかりました。どのようにそのブール値のフィールドを扱うか...少し混乱します。暗号化がの場合、真の場合 ...このメソッドは何もしません。その後、何も「トグル」しません。したがって、その名前は本当に誤解を招くrespです。あなたのコードが行っていることと一致しません!ここで

+0

それは理にかなっています、私は何をしようとしていますか? –

+0

プラス:もっとコメントを入れました。彼らが役に立つと願っています。 – GhostCat

+0

文字配列に変換されましたが、あなたの答えは私の問題を解決するのに役立ちました。ありがとうございました。 –

0

charAt(i)は、charを返します。

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

1)あなたが値に文字を割り当てることはできませんが、あなたが変数にそれを行うことができます。

2)あなたは、このような

char tempChar = sentence.charAt(i); 

として変数を使用した場合でもそのあとで行うことはできません。

tempChar += (char)x; 

を使用すると、別の文字で(+=)文字をインクリメントすることができないので。

関連する問題