アルファベットと数字が与えられたときにアルファベットを返す必要があるという要件があります。例を指定すると、Cと4IはC+ 4 = Gを返します。また、Cと-2を指定すると、C +(-2)=Aを返します。
私がAAを持っている場合、AA + 4 = ADなので、常に文字列の最後の文字を取得したいと思います。
文字列配列を使用してアルファベットを格納することを考えていましたが、それは一種の悪い解決策のようです。私がそれをより良くすることができる方法はありますか?
アルファベット文字はすべてすでに順番に並んでいます。必要なのは、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;
}
たとえばこれを試してください:
public class example {
public static void main(String[] args) {
int number = 2;
char example = 'c';
System.out.println((char)(example+number));
}
}
これは更新された質問の例です:
入力数値と入力文字列を確認する必要があります (数値が 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);
}
}
アルファベット文字を配列に格納する必要はありません。これが、ASCII ですべての文字が連続した順序になっている理由の 1 つです。
char
を暗黙的に に変換する数学演算を実行しint
、結果を にキャストしchar
ます。「A」の前または「Z」の後に行っていないことを確認する必要があります。
ASCII テーブル リファレンスを次に示します。
最初に、キャラクターをint
キャスト付きの に変換してから、 を追加し、int
再び に変換しますchar
。例えば:
char c = 'c';
int cInt = (int)c;
int gInt = cInt + 4;
char g = (char)gInt; // 'G'
文字セットについてググったことはありますか?ASCII と同様に、文字はすでに数値で表されています。