2010年03月06日

17.キーボードからの1文字の入力

以前からやりたくてもできなかった、文字の入力がようやくできましたw

こちらは実用性がほとんどないのですが・・・

わかりやすいのでこっちから!w

まだ、覚えたばかりので、各文の理解はイマイチできていませんが・・・

説明できる所だけ説明します。

このやり方は、1文字(文字・数字・記号)だけ入力する際に使えるやり方です。

文字列は扱えません。

結構説明がややこしいのですが、、、

文字を入力させ、受け取った文字のASCIIコードを文字型に変換して、文字を表示するやり方です。

あらかじめ、代表的な文字のASCIIコードを以下に示しておきます。

033.JPG

まず、以下を見てみてください。

test40.java

////////////////////

import java.io.*;
public class test40{
 public static void main(String args[])throws IOException{
 System.out.println("1文字(数字)を入力してください。");
 int a;
 char b;
 a=System.in.read();
 System.out.println("あなたが入力した文字(数字)のASCIIコードは「" + a + "」です。");
 b=(char)a;
 System.out.print("あなたが入力した文字(数字)は「" + b + "」です。");
}
}

////////////////////

文字を入力する際には、まず一番上にある[ import java.io.*; ]を入力してください。

そうしないと以下の様にコンパイルの際にエラーが起きてしまいます。

////////////////////

C:\java>javac test40.java
test40.java:2: シンボルを見つけられません。
シンボル: クラス IOException
場所    : test40 の クラス
        public static void main(String args[]) throws IOException{
                                                     
エラー 1 個

////////////////////

また同時に3行目。

いつもなら、[ public static void main(String args[]) ]だけで良かったのですが、文字入力の際は、[ public static void main(String args[])throws IOException ]と入力します。

やっぱり、コレをやらないと以下の様にエラーが起きてしまいコンパイルができません。

////////////////////

C:\java>javac test40.java
test40.java:4: 例外 java.io.IOException は報告されません。スローするにはキャッチ
または、スロー宣言をしなければなりません。
        a=System.in.read();
                        ^
エラー 1 個

////////////////////

では、それ以下の説明です。

今回一番大事な文字のデーターを受け取る部分。

[ System.in.read(); ]は、、、

文字を入力させ、ASCIIコード(数字)を渡すメソッドなので、そこでその数字を受け取る変数が必要です。

なので、5行目に[ int a; ]で数字を受け取る変数を定義しました。

6行目の[ char b; ]は、後の行で説明しますが、char型の変数を作っておきます。

7行目、[ a=System.in.read(); ]で、文字を入力させて、同時にその文字のASCIIコードを変数aに代入します。

8行目にこのアスキーコードを表示させてみます。

9行目。[ b=(char)a; ]で、先ほどchar型で定義しておいた変数bに、ASCIIコードで文字のデーターが入っている変数aをchar型に変換してから代入します。(キャスト演算子で変換)

そうすることで、変数bには、2バイトの文字データーが入っています。

ちょっと難しいですが、柔軟な理解力が大事ですw

そして、10行目で、入力された文字を表示します。

この[ System.in.read(); ]のメソッドではひらがな、漢字などは扱えません。

また、12のように二文字以上入力しても最初の文字しか扱われません。

実際にやってみます。

*「a」を入力したとき。
////////////////////

C:\java>java test40
1文字(数字)を入力してください。
a
あなたが入力した文字(数字)のASCIIコードは「97」です。
あなたが入力した文字(数字)は「a」です。
C:\java>

////////////////////

*「1」を入力したとき。
////////////////////

C:\java>java test40
1文字(数字)を入力してください。
1
あなたが入力した文字(数字)のASCIIコードは「49」です。
あなたが入力した文字(数字)は「1」です。
C:\java>

////////////////////

ここからはエラーの例です。

*「12」を入力したとき。
////////////////////

C:\java>java test40
1文字(数字)を入力してください。
12
あなたが入力した文字(数字)のASCIIコードは「49」です。
あなたが入力した文字(数字)は「1」です。
C:\java>

////////////////////

*「あ」を入力したとき。
////////////////////

C:\java>java test40
1文字(数字)を入力してください。

あなたが入力した文字(数字)のASCIIコードは「130」です。
あなたが入力した文字(数字)は「?」です。
C:\java>

////////////////////

*「烈」を入力したとき。
////////////////////

C:\java>java test40
1文字(数字)を入力してください。

あなたが入力した文字(数字)のASCIIコードは「151」です。
あなたが入力した文字(数字)は「?」です。
C:\java>

////////////////////

このような感じです。

次回は、文字列の入力を説明したいと思います〜

それではっ!(^o^)ノシ


ラベル:java 入力
posted by 榛 at 17:48| Comment(17) | JAVA | このブログの読者になる | 更新情報をチェックする

2010年02月28日

16.n進数の10進数表示

昨日に引き続き投稿です。

この時間(11:33)から書き始めているので、投稿分は明日の日程になっているかもしれませんね。

数字を表示する際、普通にprint関数内に数字を打ち込めば、10進数表記でした。

では、8進数、16進数の数字を10進数で表示するための方法を説明します。

わかりにくくなるかと思いますので以下に、10進数、(2進数)、8進数、16進数での表記を表にまとめました。

032a.JPG

まず単純に、System.out.println(); 内に10を入れてみてコンパイルして実行してみます。

test38.java

////////////////////

public class test38{
 public static void main(String args[]){
 System.out.println("10進数:" + 10);
}
}

////////////////////

実行結果は以下の様になります。

////////////////////

C:\java>java test38
10進数:10

////////////////////

当たり前のように10が表示されました。

では、新たな知識です。

8進数、16進数を10進数表示するにはどうすればいいか。

答えは、数字の前に[0]、[0x]をつければ良いのです。

8進数の10を10進数で表すと、[010]。

16進数の10を10進数で表すと、[0x10]。

というような感じに表記します。

では実際に、動かして見ます。

test39.java

////////////////////

public class test39{
 public static void main(String args[]){
 System.out.println("10進数:" + 10);
 System.out.println("8進数:" + 010);
 System.out.println("16進数:" + 0x10);
}
}

////////////////////

実行すると。

////////////////////

C:\java>java test39
10進数:10
8進数:8
16進数:16

////////////////////

このようになりました。

先ほど上に掲載した、表を見てみてください。

8進数の10は、10進数では8。

16進数の10は、10進数では16。

となっています。

それが表示された事になります。

よって、n進数の数を10進数表記できました。

たとえば、8進数の表示する値を[08]のようにしてみます。

※8進数に8という数字はない。

存在しないため、コンパイルをすると以下の様に表示されてしまいます。

////////////////////

C:\java>javac test40.java
test40.java:4: 整数 08 が大き過ぎます。
        System.out.println("8進数:" + 08);

////////////////////

エラーが出てコンパイルができません。

このことを注意して、[0]、[0x]を使って変換してください。

個人的に、この作業。

あまり需要がない気がしますw

10進数→2進数

10進数→8進数

10進数→16進数

等は、使える気がするんですけどねぇ〜w

やり方知らないんですよね〜w

と言うことで、頑張って覚えたいと思います!w

それではっ!(^o^)ノシ
posted by 榛 at 00:19| Comment(0) | JAVA | このブログの読者になる | 更新情報をチェックする

2010年02月26日

15.多次元配列

また、だいぶ久しぶりの投稿になってしまいましたw

このブログを捨てた訳じゃ無いので安心してくださいね!!(汗)

さて、1月に書いた前回の記事。

一次元配列をやっていたんですね。

では、今回はその応用。

多次元配列をやってみたいと思います。

文章での説明が難しいのでちょっと手軽に作った下の図を見てください(汗)

※クオリティーが低いのは、目をつぶってください。。。

2次元配列.JPG

数値を入れておける箱が、前回の一次元配列では上のよう横方向のみに並んでたとすると。

2次元配列になると下のように。縦・横方向にもデーターが格納可能になるのです。

コレを使うことによって、以下の様に縦・横に並んだデーターなどを扱いやすくなります。

ちなみに、1番目の括弧が「行」・2番目の括弧が「列」となっています。

また、3次元行列なども定義可能で、C[3][2][4]のように定義します。

今回は、言葉で説明がしにくいので・・・(管理人の文章力不足なもので・・・(汗))

例題を交えながら、やってみたいと思います。

と言っても、管理人の想像力も乏しいもので・・・

面白味も全くない。以下の例で。

・「以下に、1〜3月までの収入と支出を表にしたものがある。この要素以外に収支が無いとして、最終的に残った残高を計算しなさい。ただし、初期の持ち金を0円とする。」

例1.JPG

と言う問題があったとします。

このとき考えられる配列は、、、

「行」・・・「1月」、「2月」、「3月」の3要素。

「列」・・・「収入」、「支出」の2要素。

コレを、Aと言う配列で扱おうと言うことで、A[3][2]という配列を定義したいと思います。

小数点以下の要素が無いため、int型で定義したいと思います。

////////////////////

int a[][]=new int[3][2];

////////////////////

管理人未熟なもので、入力技術が未だに無いためw

各要素の値を、配列のそれぞれの場所に入力していきます。

このとき、配列は0から始まっていることに注意します。

////////////////////

a[0][0]=200;
a[0][1]=120;
a[1][0]=400;
a[1][1]=150;
a[2][0]=230;
a[2][1]=130;

////////////////////

これで、図で見ると以下の様に入りました。

例1-1.JPG

それでは計算をしていきたいと思います。

ここで、(a[0][0]-a[0][1]+a[1][0]-・・・・・・・・・)

1月を足して引いて、2月を足して引いて・・・を繰り返す事を考えてはいけません。

だいぶ手間が掛かってしまい、わざわざ配列にした意味が半減してしまいます。

配列の番地は、数字で扱われています。

その数字を決まった方式によって変化させて、計算をさせていくと便利です。

このとき、1列に入った数は、全て収入なのでプラス要素。

2列に入った数は、全て支出なのでマイナス要素。

と言うことは、1列を固定しておき、各行に入った数をfor文で回して足して、

2列目を固定しておき、各列に入った数をfor文で回して引いて、最終的に残った値が残高となります。

では、プログラムしてみましょう。

まず、行成分で使う値を扱う変数x。

列成分で使う値を扱う変数y。

合計を入れておく変数total。

この3つを定義します。

このとき、題意より、初期の持ち金は0円なのでtotalは、0で定義。

////////////////////

int x,y,total=0;

////////////////////

for文で、行を動かすときは、xを0から2まで。

列を動かすときは、yを0から1まで動かします。

ですが、このときyはfor文を使わない方が手短ですので、for文に入る前に、代入しておきます。

もちろん、もっと簡単に、、、

c[x][1];

のように扱っても問題有りません!

////////////////////

y=0;
 for(x=0;x<3;x++){
  total=total+a[x][y];
  }
 y=1;
 for(x=0;x<3;x++){
  total=total-a[x][y];
  }

////////////////////

今までの要素を全てあわせてると、、、

test36.java

////////////////////

public class test36{
 public static void main(String args[]){
 int a[][]=new int[3][2];
 int x,y,total=0;
 a[0][0]=200;
 a[0][1]=120;
 a[1][0]=400;
 a[1][1]=150;
 a[2][0]=230;
 a[2][1]=130;
 y=0;
 for(x=0;x<3;x++){
  total=total+a[x][y];
  }
 y=1;
 for(x=0;x<3;x++){
  total=total-a[x][y];
  }
 System.out.println("残高は" + total + "円です。");
}
}

////////////////////

のようになります。

結果は、以下の通り。

////////////////////

C:\java>java test36
残高は430円です。

////////////////////

収入の合計-支出の合計=残高 なので。

(200+400+230)-(120+150+130)=430

きちんとプログラムは動いていますね。

いろいろとこのファイルに改良を加えて、試してみてください。

新たな知識は、基礎を改良していくことにより、身につけられていく気がします。

では次に、配列を定義した状態で既に数を代入しておく方法の説明。

前回(1次元配列の時)は、以下の様にして数を代入しておきました。

////////////////////

int a[]= {3,17,65};

////////////////////

では、2次元配列では、どのようにすればいいでしょうか?

以下の通りになります。

※代入している値は、わかりやすいように、今回の例の値で。。。

////////////////////

int a[][]={{200,120},{400,150},{230,130}};

////////////////////

括弧をさらに括弧でくくることにより、定義することができます。

では、実際に使えているか、先ほどのプログラムの定義部分に置き換えて動かして見たいと思います。

test37.java

////////////////////

public class test37{
 public static void main(String args[]){
 int a[][]={{200,120},{400,150},{230,130}};
 int x,y,total=0;
 y=0;
 for(x=0;x<3;x++){
  total=total+a[x][y];
  }
 y=1;
 for(x=0;x<3;x++){
  total=total-a[x][y];
  }
 System.out.println("残高は" + total + "円です。");
}
}

////////////////////

動くか、やってみます。

////////////////////

C:\java>java test37
残高は430円です。

////////////////////

きちんと動いています。

初期値の代入ができていることが分かりました。

今回の多次元配列。

かなりわかりにくかったかと思いますが・・・

かなり大事なところです。

ここを勉強しておくと、実際の数をプログラムで扱うときに、応用がしやすいかと思います。

是非、勉強してみてください。

次回は何をやろうかなぁ・・・?

それではっ! (^o^)ノシ
ラベル:java 配列
posted by 榛 at 19:10| Comment(0) | JAVA | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。