Java プログラム問題

 

1)Java VMについての説明、利点を述べる。
Java VMとはJava Virtual Machineの略。Javaのソースコードは、コンパイラによりバイトコードに変換される。
バイトコードはOSに依存しない。そして、これを実行するのがJava VM。
つまりJava VMとはバイトコードを解釈し、実行するインタプリタ。

JavaVMの利点 
Visual BasicやC言語などで書かれたプログラムは基本的にOSに依存する形で動作する。
つまり、ある特定のOS向けに作られたプログラムは、そのOS上でしか動かせないのが原則。
しかしJavaで書かれたプログラムの場合OSに非依存であるから、OSの上に専用のJavaVMがインストールされていれば、
異なったOS上でも同じ様に動作できる。これは、まずJavaのソースコードは、
コンパイラによりバイトコードに変換される。(バイトコードはOSに依存しない)。
そして、バイトコードがJava VMによって実行時、随時解釈処理されるためである。

2)Javaアプリケーション、Java アプレット、Javaサーブレットについての説明をする。
Javaアプリケーションとは、それ単体で動作することができ、日頃コンピュータにインストールして使っているような、
スタンドアロンで動作するプログラム。

アプリケーションがそれ単体で動作するのに対して、基本的にJavaアプレットはWebページ上、つまりWWWブラウザの
上でしか動作させることが出来ない。アプレットはWebページ上から自動的にユーザのマシンにダウンロードされるという性質上、
アプリケーションや他の形態のJavaプログラムに比べて、セキュリティ面への配慮が非常に厳しくなっている。

Javaサーブレットは、Webサーバの上で直接動作するプログラム。
サーブレットはアクセスされるとWebサーバ上で定められた処理を行い、その結果だけをブラウザへ返す。


3)ソースコードとバイトコードについての説明、それぞれの違い、関連について述べる。
ソースコードとは、人間が理解しやすい形式のプログラム言語、(高級言語)で書かれたプログラムのこと。
一般に自分たちが今書いているプログラム。

バイトコードとは、例えば2進数なら01100000のようなバイトの並びにされたもの。

ソースコードとバイトコードの違いは、ソースコードは人間が理解しやすい形式のプログラム言語で書かれたプログラムのことで、
バイトコード(Javaの場合)はJava VMだけが理解することの出来る専用の言語。
Javaの場合、ソースコードをコンパイラによってバイトコードに変換する。これがクラスファイルである。
そして、クラスファイルがJava VMによって実行時、随時解釈される。

 

問1)

セ氏温度と華氏温度とを相互変換するプログラムで、xxFと入力された場合は華氏温度が
入力されたと判断して、対応するセ氏温度へと変換して結果を表示する。
逆にxxCと入力された場合はセ氏温度が入力されたと判断して、
対応する華氏温度へと変換して表示する。(xxの部分は数字)。

・CF.javaはこちら

解説

BufferedReaderクラスのreadLineメソッドを使い、入力された文字をString型で取り込み、
その長さをlengthメソッドでint型に返す。substringメソッドを使って数字の文字列だけを取り出して
double型にしてやる。
それで入力された最後の文字がCなら1.8 *セ氏温度+ 32の演算を行って結果をセ氏温度として表示する。
同様にして、最後の文字がFなら(華氏温度-32)/1.8の演算を行って、セ氏温度として表示する。

 

 

問2)                                        
2次方程式ax +bx+c=0の解を求めるプログラム                

・k2.javaはこちら

解説

BufferedReaderクラスのreadLineメソッドを使い、入力された文字をString型で取り込み、double型に変換する。
そして2次関数の公式を使って計算して、解が二つある場合、重根の場合、虚数解の場合と分けて表示するようにした。
(計算してない形も表示。計算はMathクラスのpowメソッドなどを使った)。

結果

重根の場合

C:\My Documents\2年後期\プログラム4>java kadai2
aを入力してください
1
bを入力してください
4
cを入力してください
4
計算しない表示は-4.0±√0.0/2.0です。
計算結果は-4.0/2.0(重根)

解が二つある場合
C:\My Documents\2年後期\プログラム4>java kadai2
aを入力してください
1
bを入力してください
7
cを入力してください
12
計算しない表示は-7.0±√1.0/2.0です。
計算結果は-6.0/2.0 or -8.0/2.0です。


虚数解の場合
C:\My Documents\2年後期\プログラム4>java kadai2
aを入力してください
1
bを入力してください
1
cを入力してください
1
計算しない表示は-1.0±√-3.0/2.0です。
計算結果は-1.0±√3.0i/2.0(虚数解)

例外の場合
C:\My Documents\2年後期\プログラム4>java kadai2
aを入力してください
a
入力された数値が正しくないです。

 

 

問3)
問2のプログラムを改良して、答えを既約にして表示できるようにしたプログラム。                   

・kadai2.javaはこちら
・Fraction.javaはこちら

解説

Fractionクラスでchange()メソッドとsimplify()メソッドを作った。change()メソッドは、小数をなくすメソッド。(10.1なら、101になる。)
これは、約分するときに小数があると約分できないから。simplify()メソッドは約分を行うメソッド。
この2つのメソッドをコンストラクタ呼び出したの時、いっしょに実行するようにした。

kadai2クラスで追加したのは、
Fraction f=new Fraction(num1,denominator);
Fraction f2=new Fraction(num2,denominator);の部分だけ。

 

 

 

問4)

適当な区切り文字で区切ってキーボードから一括入力された数値列(最大20個)に対して計算と平均値の計算を
行う電卓プログラムを作成する。
条件1.平均値を計算する機能を持った配列クラスを作ること。
条件2.配列クラスを使って電卓プログラムを作成すること。
条件3.キーボードからの入力数値は整数のみとし、計算結果の平均値は浮動小数点
(有効桁数字は小数点以下3位まで)とする。

 

解説

実行のmyCalculationクラス、myFrameクラス、myWindowCloseクラス、合計値や平均値を計算をするarrayクラスを作成。
区切り文字はドットにして、ドットで区切られた文字列ごとに取り出すために、StringTokenizerクラスのcountTokensメソッドと
nextTokenメソッドを使用。その取り出した文字列をint型に変換して合計値、平均値を計算する。
また、有効桁数字を小数点以下3位までにするためDecimalFormatクラスのformatメソッドを利用した。

機能追加する時にプログラムが複雑になるのを防ぐため、継承を利用して、myCalculationクラス、myFrameクラス、
myWindowCloseクラス、合計値や平均値を計算をするarrayクラスを作成。
区切り文字はドットにして、ドットで区切られた文字列ごとに取り出すために、StringTokenizerクラスのcountTokensメソッドと
nextTokenメソッドを使用。
入力できる数値列を最大20個ではなく、何個でも入力できるように配列の宣言を、String[] strarr = new String[loop];とした。
(hasMoreTokensを使用しなかった。)

 

・myCalculation.javaはこちら
・array.javaはこちら

 

 


                                           TOPへ