プロが教える店舗&オフィスのセキュリティ対策術

char [] aaa = {'a', 'b', 'c', 'd', 'e'};
と宣言したとします。
System.out.println((int)aaa[i]);
と出力すると97~101の数字になります。
それはなぜなのでしょうか。

A 回答 (3件)

数値を数字として扱うか、文字として扱うかの違いです。


半角アルファベットなら、コンピュータ内部ではアスキーコードで文字が表現されるのが普通です。
http://e-words.jp/p/r-ascii.html

逆に(char)97などとするとアルファベットが表示されますよ。数値を文字として認識させることになるわけです。

この回答への補足

文字だと計算には使えませんよね?
計算で使えるようにするために例えば、
char [] aaa = {'1', '2', '3', '4', '5'};
と宣言したとします。
これを2倍して出力するプログラムを作成したいのです。

補足日時:2009/11/12 22:23
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2009/11/21 11:36

最初の質問とまったく違う質問を補足として書かれても困ります。


それに「宣言したとします」と例を挙げるばかりでは、答えてもまた別の方向から質問されそうです。なぜ最初から条件を書かないのでしょうか。

やりたいことを明確にしてください。aaa[]には0~9の文字しか入らないという仮定でいいのでしょうか、それとも別の文字が入るのでしょうか? 文字が入る場合はどうなってほしいのでしょうか、例えば 'a' に対しての答え(aの2倍)はどうなればいいのでしょうか?

この回答への補足

すみません、最初の質問で書いたつもりだったのですが、文章が間違っていました。

>aaa[]には0~9の文字しか入らないという仮定でいいのでしょうか
はい、それで構いません。

補足日時:2009/11/13 07:56
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2009/11/21 11:36

> >aaa[]には0~9の文字しか入らないという仮定でいいのでしょうか


> はい、それで構いません。

ということであれば、
int num = aaa[0] - '0';
とすれば「文字が表している数字」が得られます。これを2倍して出力すればよいでしょう。
これはアスキーコードどうしの計算になります。'0'~'9'はアスキーコードの48~57(10進数)に相当するので、'0'のアスキーコードを引いてやれば差分がそのまま、元の文字が表していた「数字」になるわけです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2009/11/21 11:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!