top
課題のソース・実行結果(コンパイラは全てjavac)と考察
提出期限 ~2003年10月20日
学籍番号 035735k
学部学科 工学部情報工学科
氏名 仲松 義嗣
Sorce of a
File name: rep_a.java
01:public class rep_a {
02: public static void main(String[] args){
03: System.out.println("Hello, Y.N's Home Page!"); ----- (1)
04: }
05:}
*rep_aの実行結果
% java rep_a
Hello, Java World!
%
*Considerations
出力させるメッセージを"Hello Java World!"以外の文字にするプログラムです。
(1)の行は文字列 Hello, Y.N's Home Page を表示するメソッドです。
Sorce of b
File name: rep_b.java
01:public class rep_b {
02: public static void main(String[] args){
03: int i;
04: for( i = 0; i <= 2; i++ ){
05: System.out.println("Hello, Java World!");
06: }
07: }
08:}
*rep_bの実行結果
% java rep_b
Hello, Java World!
Hello, Java World!
Hello, Java World!
%
*Considerations
同じメッセージを3回、別々の行に出力させるプログラムです。
繰り返し同じ操作を行うので、for文を使ってみました。何となくCとにています。
Sorce of c
File name: rep_c.java
01:public class rep_c {
02: public static void main(String[] args) {
03: System.out.println("Hello,");
04: System.out.println("Java World!");
05: }
06:}
*rep_cの実行結果
% java rep_c
Hello,
Java World!
%
*Considerations
「Hello,」と「Java World!」を別々の行に出力させるプログラムです。
Cでは改行するために、\n が必要だったが、System.out.printlnでは改行する
操作を含んでいることが分かる。
Sorce of d
File name:rep_d.java
01:public class rep_d {
02: public static void main(String[] args) {
03: System.out.println("Hello,"); ----- (1)
04: System.out.println("Java World!"); ----- (2)
05:
06: System.out.print("Hello,"); ----- (3)
07: System.out.print("Java World!"); ----- (4)
08: }
09:}
*rep_dの実行結果
% java rep_d
Hello,
Java World!
Hello,Java World!%
*Considerations
System.out.println(...)とSystem.out.print(...)の違いを調べるプログラムです。
(1)行と(2)行は rep_c.java と同じ操作を行っています。
(3)行と(4)行は(1)行と(2)行の System.out.println を System.out.print
に変えています。実行結果より、 System.out.println は改行操作を含んでいるが、
System.out.print は含んでいないことが分かります。
Sorce of e
File name:rep_e.java
01:public class rep_e {
02: public static void main(String[] args) {
03: int i;
04: for( i = 0; i <= 2; i++ ){
05: System.out.print("Hello, Java World!: ");
06: }
07: }
08:}
*rep_eの実行結果
% java rep_e
Hello, Java World!: Hello, Java World!: Hello, Java World!: %
*Considerations
同じメッセージを3回、同一行に出力させるプログラムです。
rep_b.javaとrep_d.javaを組み合わせることで実現できると考えました。
つまり、for文の中で System.out.printメソッドを使っています。
Sorce of f
File name:rep_f.java
01:public class rep_f {
02: public static void main(String[] args) {
03: System.out.println(" * ");
04: System.out.println(" *** ");
05: System.out.println("*****");
06: System.out.println(" *** ");
07: System.out.println(" * ");
08: }
09:}
*rep_fの実行結果
% java rep_f
*
***
*****
***
*
%
*Considerations
菱形模様(「*」を用いる)を出力させるプログラムです。
まず初めは、単純に改行操作を含む System.out.printlnメソッドを使って
プログラムを書いてみました。rep_gではこれをfor文を使って書いてみました。
Sorce of g
File name:rep_g.java
01:public class rep_g {
02: public static void main(String[] args) {
03: int n, i, j, k;
04: n = 5;
05:
06: for(i = 1; i <= n; i++){ ----- (1)
07: for(k = n-1; k >= i-1 ; k--){ ----- (2)
08: System.out.print(" ");
09: }
10: for(j = 1; j <= 2*i-1; j++){ ----- (3)
11: System.out.print("*");
12: }
13: System.out.println(" ");
14: }
15: }
16:}
*rep_gの実行結果
% java rep_g
*
***
*****
*******
*********
%
*Considerations
(1)のfor文が行を制御します。さらに、(2)のfor文が空白を(3)のfor文が*を
制御するものです。
(1):1行目から始まりn行目まで行数をインクリメントしています。
(2):-の数{ fig-1参照 }をkを制御変数として表しました。
(3):*の数をiを制御変数として 2*i-1 として表しました。
{fig-1}
----*----
---***---
--*****--
-*******-
*********
Considertions of compiler and interpreter
"高級言語(C,Java...)で書かれたコンピュータへの指示を、文法を含めて機
械語に翻訳するプログラム"にコンパイラとインタプリタがあるそうです。
では、コンパイラとインタプリタの違いは何でしょう。
コンパイラはソースコードを「まとめて」翻訳し、その後「一気に」実行します(C,C++...)。
また、インタプリタはソースコードを「少しずつ」翻訳し、「少しずつ」実行します(BASIC...)。
といった違いがあるそうです。すると、それぞれ次のような長所と短所が考えられます。
コンパイラ インタプリタ
---------------------------------------------------------------------------
長所 実行が速い 実行が遅い
---------------------------------------------------------------------------
短所 間違いの箇所を見つけにくい 間違いの箇所を見つけやすい
----------------------------------------------------------------------------
ここでJavaはどちらの方式を採用しているのかというと、両方採用している
そうです(!!!)。Java言語は、まずコンパイラにより中間的な言語(byte code)
に変換され、その言語がインタプリタにより機械語に変換されて実行されます。
この2段階の変換により、Javaのいろいろな機能が実現されているそうです。
たぶんきっと、その機能の1つにエラーのときの詳しい指摘があるのだと思い
ます。
Comments
後期最初のプログラミングのレポートは、それなりに難しかったです。
rep_g.javaのアルゴリズムなんかはC言語のときに勉強したパスカルの三角形
を参考にしました。つまり、アルゴリズムは文法と違って他の言語を参考に
できるということを実感しました。
プログラミング2の講義では、Javaの文法や典型的なアルゴリズムの表し方
を勉強できたらいいなと思っています。よろしくお願いします。
Reference of books
基礎Java
Java 重要クラス・リファレンス
top
mail