2014-06-23 110 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建立你的结果。