2017-04-09 89 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值;表示該索引處字符串中的字符。

它確實不是給你的東西,讓你操縱字符串本身!字符串是不可改變的;您不能使用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)); 
    } 
} 

(免責聲明:我只是寫下上面的代碼,可能有錯別字或小錯誤在那裏;它的意思是「僞代碼」,讓你走!)

除此之外:我找到該方法的名稱;以及它如何處理該布爾字段...有點混亂。你看,如果加密是true ...該方法什麼都不做?!然後它不會「切換」任何東西。因此這個名字真的是誤導性的。不匹配你的代碼正在做什麼!

+0

這很有道理,我應該如何使用以實現我的目標? –

+0

加:我提出了更多評論;希望他們有幫助。 – GhostCat

+0

我最終轉換爲char數組,但你的答案幫助我解決了我的問題。謝謝。 –

0

這裏charAt(i)返回一個char:

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

1)不能將角色分配給一個值,但你可以把它做一個變量。

2)即使你使用一個變量如

char tempChar = sentence.charAt(i); 

你不能這樣做,那麼:

tempChar += (char)x; 

正如你不能增加(+=)與其他字符的字符。