-2

アルファベットと数字が与えられたときにアルファベットを返す必要があるという要件があります。例を指定すると、Cと4IはC+ 4 = Gを返します。また、Cと-2を指定すると、C +(-2)=Aを返します。

私がAAを持っている場合、AA + 4 = ADなので、常に文字列の最後の文字を取得したいと思います。

文字列配列を使用してアルファベットを格納することを考えていましたが、それは一種の悪い解決策のようです。私がそれをより良くすることができる方法はありますか?

4

6 に答える 6

2

アルファベット文字はすべてすでに順番に並んでいます。必要なのは、1つに番号を追加して別の文字を取得することだけです。

私はあなたがこのようなものが欲しいと思います:

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 ですべての文字が連続した順序になっている理由の 1 つです。

charを暗黙的に に変換する数学演算を実行しint、結果を にキャストしcharます。「A」の前または「Z」の後に行っていないことを確認する必要があります。

ASCII テーブル リファレンスを次に示します。

于 2013-02-13T21:35:08.757 に答える
0

最初に、キャラクターをintキャスト付きの に変換してから、 を追加し、int再び に変換しますchar。例えば:

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

文字セットについてググったことはありますか?ASCII と同様に、文字はすでに数値で表されています。

于 2013-02-13T21:40:39.730 に答える