2014-06-23 67 views
1

我不確定,但我認爲我的問題是我的功能沒有比較字符的權利。我是否也使用Switch?我的「解密」代碼無法正常工作

我的輸入x是一個字符串,當x =「aaaaa」時,它返回「aaaaa」而不是「zzzzz」。

String c = ""; 
     for (int i = 0; i < x.length(); i++) { 
      char getChar = x.charAt(i); 

      switch (getChar) { 
       case 1: (getChar) = 'a'; 
         c += "z"; 
         break; 
       case 2: (getChar) = 'b'; 
         c += "y"; 
         break; 
       case 3: (getChar) = 'c'; 
         c += "x"; 
         break; 
       case 4: (getChar) = 'd'; 
         c += "w"; 
         break; 
       case 5: (getChar) = 'e'; 
         c += "v"; 
         break; 
       case 6: (getChar) = 'f'; 
         c += "u"; 
         break; 
       case 7: (getChar) = 'g'; 
         c += "t"; 
         break; 
       case 8: (getChar) = 'h'; 
         c += "s"; 
         break; 
       case 9: (getChar) = 'i'; 
         c += "r"; 
         break; 
       case 10:(getChar) = 'j'; 
         c += "q"; 
         break; 
       case 11:(getChar) = 'k'; 
         c+= "p"; 
         break; 
       case 12:(getChar) = 'l'; 
         c += "o"; 
         break; 
       case 13:(getChar) = 'm'; 
         c += "n"; 
         break; 
       default : 
         c += x.charAt(i); 
      } 
     } 

    System.out.println(c); 
} 
+3

您應該使用'case'a'' ..來代替。 ''a''的十進制值不爲0.另外使用['StringBuilder'](http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html)替代'+'。 – Maroun

+0

@MarounMaroun爲什麼使用StringBuilder而不是我所做的更好? – user3717963

+0

有關詳細信息,請參見[此鏈接](http://www.yoda.arachsys.com/java/strings.html)。 – Maroun

回答

5
switch (getChar)//<--You are passing charcter in switch case 
//but checking for 1,2 int as case 1,2... 

你需要改變什麼是你case

switch你會路過的人物,如a,b,c...

switch(getchar) 
{ 
case 'a': 
    //yourwork 
    break; 
//do this for all letters 
} 

而且爲concacting String你應該使用StringBuilder(如Maroun Maroun)已經提出並使用stringBuilder.append('char')方法您的字符添加到字符串直接建設者沒有必要使用String(即「A」,「B」等)。

+0

爲什麼使用StringBuilder而不是我所做的更好? – user3717963

0

A switch如果所有案例的處理方式幾乎完全相同,並且可以輕鬆轉換爲單個計算,則聲明不是最佳選擇。您可以使用此if/else塊更換整個switch語句:

if (getChar >= 'a' && getChar <= 'm') { 
    char newChar = (char) ('z' - (getChar - 'a')); 
    c += newChar; 
} else { 
    c += getChar; 
} 

注:@task和@MarounMaroun是正確的,建議您到使用StringBuilder建立你的結果。