_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ Object Oriented Programming JAVA オブジェクト指向プログラミング言語JAVA Report#1 j03060横田敏明 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ オブジェクト指向言語java Javaの利点は仮想マシンによる移植生の高さであると思われる。 C言語では、マシンのスペックなどによってデータビット数に若干の違いが出るが、 javaは仮想マシンを実装したマシンならそれらの問題をクリアし、移植が可能。 では、本題に入りましょうか。 ★課題A public class first{ public static void main(String args[]){ System.out.println("Je suis Japonais"); }} ★課題B public class second{ public static void main(String args[]){ for(int count=0; count < 3; ++count){ System.out.print("Same message..."); } }} for文を用いて表示させました。 カウント変数の宣言を使用する時に行なえるので便利ですね。 ★課題C public class thrd{ public static void main(String args[]){ System.out.println("Hello,\nJava World!"); }} 改行を意味するエスケープシーケンスがC言語と同じですね! ★課題D "print"で表示すると改行されません。なので、"ln"は改行の意味です。 すなわち、C言語でいうところのprintf関数と同じ。 私が考察するに"println"の"ln"は英語での改行の略称では? ★課題E public class fifth{ public static void main(String args[]){ for (int count=0; count < 3; ++count){ System.out.println("Same masse.."); } }} 課題Bとの違いはやはり"ln"ですね。 ★課題F public class sixth{ public static void main(String args[]){ System.out.println(" *\n ***\n*****\n ***\n *"); }} ★課題G public class sept{ public static void main(String args[]){ for (int count=0; count < 30; ++count){ for (int count2=0; count2 <= Math.sqrt(count * 3); ++count2){ System.out.println("*"); } System.out.println("");} }} さて、どうなることか……。 ★実行結果 * ** *** **** **** **** ***** ***** ***** ****** ****** ****** ******* ******* ******* ******* ******* ******** ******** ******** ******** ******** ********* ********* ********* ********* ********* ********** ********** ********** ということで、放物線でした! なぜなら、 for(int count2=0; count2 < Math.sqrt(count * 3); ++count){ と書いてあるように、二次関数の逆関数は0.5次関数より。 ★★★_/_/_/_/_/_/_/総合的考察_/_/_/_/_/_/_/★★★ 今回の課題ではあまり手応えが無かったのですが、一応Javaについての考察を 書きます。 特筆すべきはやはり! ★計算速度の遅さ★ ではないでしょうか。 これはJavaを開発したサンにとっては痛いところではないでしょうか? 試しに3から10000までの素数をサーチして、その計算時間を計測しまし た。 以下にそのプログラムを示します。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ public class prime{ //class define public static void main(String[] argv){ boolean pas=false; // "pas" is flag. System.out.println("2"); for(long point=3; point < 10000; ++point ){ for( long temp=2; temp < Math.sqrt(point)+1; ++temp){ if((point % temp)==0){ temp=point; pas=true; // "true" is not prime number } } if(pas==false) System.out.println(point); pas=false; // boolean format } } } _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ このプログラムをC言語で書くと…… _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #include #include int main() { int count, temp, ans; for (temp=2; temp < 10000; ++temp){ ans = 0; for (count=2; count < sqrt(temp) + 1; ++count){ if ( (temp % count) == 0 ){ count = temp; ans = 1;} else ans = 0; } if ( ans == 0 ) printf("%d\n",temp); } } _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ と、なるわけですが、計算時間を計ると、javaはCの約3〜4倍の時間がかか りました。しかも、変数にboolean型を導入して高速化を図ったにもかかわら ず、だ。 1000000ぐらいまで計算するとその遅さは致命的になってくる……。 以上のことから、やはりjavaは重い!!ということが判明しました。 その原因は……仮想マシン? もしくは、プリプロセッサがないから……? ……しかし裏を返せば、計算速度が遅いという事実は javaがCよりも高級な言語だということですね! それはこれからの歴史が証明してくれるでしょう。 2003.10.11.SAT j03060 横田敏明