0

我正在尝试制作一个简单的“翻译”项目,因为我还在学习 Java。但是出了点问题,我花了很多时间,仍然不知道如何解决它。这是代码:

public static void main(String[] args)
 {

  char[] abcCode = {'!','@','#','$','%','^','&','*','(',')','_','-','+','=','|','`','~','}','{','[',']','"',';',':','>','<','?','/','\''};

  char[] numCode = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z'};


  String src = args[0];
  String result = "";


  for(int i=0; i < src.length();i++)
  {
   char ch = src.charAt(i); 
   if ('a' <= ch && ch <= 'z') 
    result += abcCode[ch-'a']; 
   else if (abcCode[0] <= ch && ch <= abcCode[15])
    result += numCode[ch-abcCode[0]];

  }

  System.out.println("src: "+src);
  System.out.println("result: "+result);}}

例如,如果我输入“lol”,我会得到“-|-”,这就是我想要的。但相反的情况永远不会奏效,我应该输入 -|- 并得到“lol”。此外,如果我输入“@”和其他几个,我会得到一个错误。有什么问题?有灯吗?

4

1 回答 1

0

您的问题是 abcCode 数组中填充了一些东西,这些东西在转换为数字时不会从一个值开始,而是在连续元素中增加一。我将以下代码放在数组声明之后:

   for (char c: abcCode)
   {
     System.out.println(c - args[0].charAt(0));
   }
   return;

并得到以下输出:

-91 -60 -89 -88 -87 -30 -86 -82 -84 -83 -29 -79 -81 -63 0 -28 2 1 -1 -33 -31 -90 -65 -66 -62 -64 - 61 -77 -85

(在我的输出中,每个数字都在不同的行,但我忘记了如何在答案中强制它。)

如您所见,结果数字不是另一个数组的有效索引。

于 2013-09-22T10:36:25.007 回答