-2

我有一个要求,我需要在给定字母和数字时返回字母。例如,如果给定 C 和 4,我将返回 C+4 = G 如果给定 C 和 -2,我将返回 C + (-2) = A

如果我有 AA,那么 AA + 4 = AD,所以我总是想从字符串中取出最后一个字符。

我正在考虑使用字符串数组来存储字母,但这似乎是一种糟糕的解决方案。有什么方法可以让我做得更好吗?

4

6 回答 6

2

字母字符都已按顺序排列,您只需在其中添加一个数字即可获得另一个。

我想你想要这样的东西:

addToChar('A', 4);

char addToChar(char inChar, int inNum)
{
  return (char)(inChar + inNum);
}

您可能还想检查它是小于“A”还是大于“Z”。

回应您的编辑:

void addToChar(char[] inChars, int inNum)
{
   for (int i = inChars.length-1; inNum != 0 && i >= 0; i--)
   {
      int result = inChars[i]-'A'+inNum;
      if (result >= 0)
      {
         inNum = result / 26;
         result %= 26;
      }
      else
      {
         inNum = 0;
         while (result < 0) // there may be some room for optimization here
         {
            result += 26;
            inNum--;
         }
      }
      inChars[i] = (char)('A'+result);
   }
}

处理溢出:(效率稍低)('Z' + 1输出'AA'

static String addToChar(String inChars, int inNum)
{
   String output = "";
   for (int i = inChars.length()-1; inNum != 0 || i >= 0; i--)
   {
      if (i < 0 && inNum < 0)
         return "Invalid input";
      int result = i >= 0 ? inChars.charAt(i)-'A'+inNum
                          : -1+inNum;
      if (result > 0)
      {
         inNum = result / 26;
         result %= 26;
      }
      else
      {
         inNum = 0;
         while (result < 0)
         {
            result += 26;
            inNum--;
         }
      }
      output = (char)('A'+result) + output;
   }
   return output;
}
于 2013-02-13T21:35:38.600 回答
1

试试这个例如:

public class example {

 public static void main(String[] args) {

     int number = 2;
     char example = 'c';

     System.out.println((char)(example+number));

    }
 }
于 2013-02-13T21:38:38.437 回答
1

这是更新问题的示例:

仍然需要验证输入数字和输入字符串(让我们说如果数字是 124 会发生什么?)

 public class example {

 public static void main(String[] args) {

     int number = 1;
     String example = "nicd";
     //get the last letter from the string
     char lastChar = example.charAt(example.length()-1);
     //add the number to the last char and save it
     lastChar = (char) (lastChar+number);
     //remove the last letter from the string
     example = example.substring(0, example.length()-1);
     //add the new letter to the end of the string
     example = example.concat(String.valueOf(lastChar));
     //will print nice
     System.out.println(example);

    }
 }
于 2013-02-13T22:04:03.510 回答
0

您不需要将字母存储在数组中;这就是 ASCII 具有连续顺序的所有字母的原因之一。

执行数学运算,将 隐式转换char为 a int,然后将结果转换为 a char。你必须检查你没有在“A”之前或“Z”之后去。

这是一个ASCII 表参考

于 2013-02-13T21:35:08.757 回答
0

你曾经在谷歌上搜索过字符集吗?与 ASCII 一样,字符已经由数字表示。

于 2013-02-13T21:40:39.730 回答
0

首先,使用演员将您的角色转换为inta,然后添加您的int,并将其转换回 a char。例如:

char c = 'c';
int cInt = (int)c;
int gInt = cInt + 4;
char g = (char)gInt; // 'G'
于 2013-02-13T21:44:59.107 回答