警告が表示された場合は、「ブロックされているコンテンツを許可」 をクリックすると、各例題の出力結果が閲覧できます。
 なお 出力結果の表示には JavaプラグインのJREが必要です。



 Java (ジャバ)


Java (ジャバ) は 1995年に Sun Microsystems (サン マイクロシステムズ) 社により 発表されたプログラム言語である。 Java は、C言語やC++ に類似した仕様をもつ比較的新しいプログラム言語であり、 ネットワークにも対応している。 Javaのプログラム処方には、アプリケーション (application) とアプレット (applet) がある。 JavaアプリケーションはJava仮想マシン上において単独で実行可能なプログラムであって、 使用法は従来からある他のプログラム言語と概ね同様である。 一方 アプレットは Java特有のもので、Web (ウェブ) ブラウザ表示用言語の HTML (エッチティーエムエル) から呼び出されて実行されるプログラムであって、単独では実行できない。 Javaは仮想マシン上において実行されるために、C言語やC++ に比較してプログラム実行速度が それほど高速ではない。 ここでは Javaアプレットのプログラム記述方法について概説する。 Javaプログラムは、テキストエディター等を用いて 「直接入力」モードで記す。 Javaでは、アルファベットの大文字と小文字が区別されるので注意すること。 Javaの各プログラム文の終わりには 必ずセミコロン「 ; 」を付す。 なお 文字入力モード (全角,半角,直接入力 などの区別) には特に注意を払うこと。 コンピューターでは空白も文字の一種とみなされ、全角と半角の空白は全く異なるので区別して入力する。 作成したJavaファイル名の拡張子は、「.java 」として保存する。 例えば Ex1.java など。 このソースファイルを Javaコンパイラにかけるとクラスファイルが出力生成される。 クラスファイルの拡張子は一般に .class となる。 異なるCPUをもつコンピュータ機種間での互換性を維持するために、 Javaコンパイラで出力されるクラスファイルは、CPU 固有の機械語まで変換されずに バイトコードと呼ばれる中間のコードで記述されている。 実行するときは、Java仮想マシンが中間コードを CPU 固有の機械語 (バイナリーコード) に 逐次変換しながらインタプリタ方式で実行する。 なお Javaコンパイラや仮想マシン (ソフト) については、予めコンピュータにインストール しておく必要がある。 JavaコンパイラのSDKについては、フリーソフトとして無償で配布されている。


Javaアプレットのソース ファイル記述例

以下の記述の各行において // の以後の文はコメント文と呼ばれる説明や注釈であり、プログラム実行には関係ない。 また コマンド (制御命令) 等を表す文字を太字で記してあるが、実際の記述では、すべて標準の文字形 すなわち 「直接入力」モードで記す。

[例 1] 二つの整数 591 と -365 の 和を求めて表示する。

// Applet (アプレット) 側のファイル名 Ex1.java

import java.awt.* ;        // awtフォルダ内の既成クラスファイルすべてをロード
import java.applet.* ;       // appletフォルダ内の既成クラスファイルすべてをロード

public class Ex1 extends Applet   // 既成のクラス Applet を継承して公開されたクラス Ex1 を作成
{
  public void paint(Graphics g)  // paintメソッド   (ここで g は Graphicsオブジェクトを示す仮引数で任意)
  {
    int i, j, k ;           // 変数 i, j, k を整数型として宣言
    String st_k ;          // 変数 st_k を文字列型として宣言
    i = 591 ;            // 変数 i に定数 591 を代入
    j = -365 ;            // 変数 j に定数 -365 を代入
    k = i+j ;             // 和 i+j を計算し、その結果を変数 k に代入
    st_k = Integer.toString(k) ;   // 整数型 k を文字列型に変換し、 st_k に代入
    g.drawString(st_k , 20 , 20) ;  // 変数 st_k の値を、位置 (x=20, y=20) に表示
                      // ただし 座標原点 (x=0, y=0) はアプレット表示領域の左上端の角隅で、y方向は下向き
  }                   // paintメソッドの終了
}                     // クラス Ex1 の終了

例 1 のプログラム中で paint( ){  }drawString( ){  } などのことを メソッドと呼び、g はオブジェクトと呼ばれる。 一般にJavaプログラムの基本構造は、クラス, メソッド, オブジェクト などから成る。

public class Ex1 extends Applet {  } は公開されたクラス Ex1 を既存の Appletクラスを継承して作成することを意味しており、アプレットを作る際には必須のクラスである。 なお 公開されたクラスは、他のクラスから自由に呼び出すことが出来る。

プログラム中で、 public void paint( ){  } は、ペイント メソッド paint( ){  } が公開され、 かつ 値を返さないメソッドであることを意味している。 ここでメソッドとは、C言語における関数に類似した機能をもつ。

例 1 のJavaソースファイル名は拡張子も含めて、Ex1.java として保存する。 public class Ex1 extends Applet と記されている行で Ex1 はクラス名であって 任意であるが、このクラス名と作成したJavaソースファイル名は必ず一致させなければならない。 作成したソースファイルは一旦保存し、Java のコンパイラにかけるとクラスファイルが出力生成され、 これがアプレットと呼ばれるプログラムファイルである。 上記の例では、クラスファイル名は Ex1.class となり、拡張子 .class のファイル すなわちアプレットが自動的に生成されたことになる。

g.drawString( ) 中の数値の単位は、ピクセルすなわち画素を基準とする。 座標の原点は表示領域の左上隅の角が (0 , 0) である。

アプレットは、バイトコードで記述されたファイルであって、通常のテキストエディタ等では編集が出来ない。 このアプレット (クラスファイル) を以下に記すような HTMLファイルと同一フォルダ内に置き、 HTMLファイルのアイコンをマウスでダブルクリックするなどして開くと、 アプレットが呼び出され実行される。

HTML側のファイル名 Ex1.htm   (ここで Ex1 は任意でよい。)

<html>                                 // HTMLファイルの開始タグ
<body>                                 // 本文記述領域の開始タグ
<applet code = "Ex1.class" width = 100 height = 50></applet>  // アプレット Ex1.class の呼び出しコマンド
</body>                                // 本文記述領域の終了タグ
</html>                                // HTMLファイルの終了タグ

(例 1 の出力結果)
------------------------------

------------------------------

例 1 では、 HTMLファイル内に表示されるアプレット表示領域を、横幅 100 ピクセル,縦 50 ピクセル に指定している。 このアプレット領域が正しく表示されないときは、ブラウザの更新ボタンをクリックし再読み込みを行うこと。 アプレットは、単独では起動しないプログラムなので、Ex1.class のアイコンをダブルクリックしても実行されない。 必ず HTMLファイルの Ex1.htm のアイコンの方をダブルクリックすること。


[例 2] 文字列 ABCDEFGHIJKLMNOPQRSTUVWXYZ と 0123456789 を 改行して表示する。

// Applet (アプレット) 側のファイル名 Ex2.java

import java.awt.* ;
import java.applet.* ;

public class Ex2 extends Applet           // 既成のクラス Applet を継承して公開されたクラス Ex2 を作成
{
  public void paint(Graphics g)          // paintメソッド
  {
    String s1, s2 ;                 // 変数 s1, s2 を文字列型として宣言
    s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;  // 変数 s1 に文字列 ABCDEFGHIJKLMNOPQRSTUVWXYZ を代入
    s2 = "0123456789" ;              // 変数 s2 に文字列 0123456789 を代入
    g.drawString(s1 , 20 , 20) ;          // 変数 s1 の値を、位置 (x=20, y=20) に表示
    g.drawString(s2 , 20 , 40 ) ;          // 変数 s2 の値を、位置 (x=20, y=40) に表示
  }                         // paintメソッドの終了
}                           // クラス Ex2 の終了

文字列型の場合は、文字列の最初と最後に 「 " 」 を付すこと。

HTML側のファイル名 Ex2.htm

<html>
<body>
<applet code = "Ex2.class" width = 250 height = 60></applet> // アプレット Ex2.class の呼び出しコマンド
</body>
</html>

(例 2 の出力結果)
-----------------------------------------

-----------------------------------------

例 2 では、 HTMLファイル内に表示されるアプレット表示領域を、横幅 250 ピクセル,縦 60 ピクセル に指定している。 このアプレット領域が正しく表示されないときは、ブラウザの更新ボタンをクリックし再読み込みを行うこと。 アプレットは、単独では起動しないプログラムなので、Ex2.class のアイコンをダブルクリックしても実行されない。 必ず HTMLファイルの Ex2.htm のアイコンの方をダブルクリックすること。


[例 3] 二つの実数 5000.0 と 0.2 の 和,差,積,商 をそれぞれ求めて表示する。

// Applet (アプレット) 側のファイル名 Ex3.java

import java.awt.* ;
import java.applet.* ;

public class Ex3 extends Applet       // 既成のクラス Applet を継承して公開されたクラス Ex3 を作成
{
  public void paint(Graphics g)       // paintメソッド
  {
    double x , y , wa , sa , seki , syo ;    // 実数型変数の型宣言
    String st_wa , st_sa , st_seki , st_syo ;  // 文字列型変数の型宣言
    x = 5000.0 ;               // 変数 x に定数 5000.0 を代入
    y = 0.2 ;                 // 変数 y に定数 0.2 を代入
    wa = x+y ;               // 和 x+y を計算し、その結果を変数 wa に代入
    sa = x-y ;               // 差 x-y を計算し、その結果を変数 sa に代入
    seki = x*y ;              // 積 x*y を計算し、その結果を変数 seki に代入
    syo = x/y ;              // 商 x/y を計算し、その結果を変数 syo に代入
    st_wa = Double.toString(wa) ;    // 実数型変数 wa を文字列型に変換し、 変数 st_wa に代入
    st_sa = Double.toString(sa) ;    // 実数型変数 sa を文字列型に変換し、 変数 st_sa に代入
    st_seki = Double.toString(seki) ;   // 実数型変数 seki を文字列型に変換し、 変数 st_seki に代入
    st_syo = Double.toString(syo) ;   // 実数型変数 syo を文字列型に変換し、 変数 st_syo に代入
    g.drawString(st_wa , 20 , 20) ;   // 変数 st_wa の値を、位置 (x=20, y=20) に表示
    g.drawString(st_sa , 20 , 40) ;   // 変数 st_sa の値を、位置 (x=20, y=40) に表示
    g.drawString(st_seki , 20 , 60) ;  // 変数 st_seki の値を、位置 (x=20, y=60) に表示
    g.drawString(st_syo , 20 , 80) ;   // 変数 st_syo の値を 、位置(x=20, y=80) に表示

  }                         // paintメソッドの終了
}                           // クラス Ex3 の終了


HTML側のファイル名 Ex3.htm

<html>
<body>
<applet code = "Ex3.class" width = 250 height = 150></applet> // アプレット Ex3.class の呼び出しコマンド
</body>
</html>

(例 3 の出力結果)
-----------------------------------------

-----------------------------------------


[例 4] 二つの実数 3.0e2 と 2.0e-1 の 和,差,積,商 をそれぞれ求めて表示する。 ただし 3.0e2 は 3.0×102 を意味する。 また 2.0e-1 は 2.0×10-1 を意味する。

// Applet (アプレット) 側のファイル名 Ex4.java

import java.awt.* ;
import java.applet.* ;

public class Ex4 extends Applet
{
  public void paint(Graphics g)
  {
    double x, y, wa, sa, seki, syo ;
    String st_wa, st_sa, st_seki, st_syo ;
    x = 3.0e2 ;
    y = 2.0e-1 ;
    wa = x+y ;
    sa = x-y ;
    seki = x*y ;
    syo = x/y ;
    st_wa = Double.toString(wa) ;
    st_sa = Double.toString(sa) ;
    st_seki = Double.toString(seki) ;
    st_syo = Double.toString(syo) ;
    g.drawString(st_wa , 20 , 20) ;
    g.drawString(st_sa , 20 , 40) ;
    g.drawString(st_seki , 20 , 60) ;
    g.drawString(st_syo , 20 , 80) ;
  }
}

HTML側のファイル名 Ex4.htm

<html>
<body>
<applet code = "Ex4.class" width = 250 height = 150></applet>
</body>
</html>

(例 4 の出力結果)
-----------------------------------------

-----------------------------------------


[例 5] 二つの整数 1000000000000000 (16桁) と 999999999999999 (15桁) の 和,差,積,商 を それぞれ求めて表示する。 このとき計算する式も表示する。

// Applet (アプレット) 側のファイル名 Ex5.java

import java.awt.* ;
import java.applet.* ;

public class Ex5 extends Applet
{
  public void paint(Graphics g)
  {
    long m, n, k1, k2, k3, k4 ;      // 倍長整数型の変数の宣言 (倍長整数型は19桁まで可)
    String st_k1, st_k2, st_k3, st_k4 ;  // 文字列型変数の型宣言
    m = 1000000000000000L ;    // 16桁  (倍長整数型の定数を指定するときは、数字の末尾に L が必要)
    n = 999999999999999L ;     // 15桁  (倍長整数型の定数を指定するときは、数字の末尾に L が必要)
    k1 = m+n ;              // 和 m+n を計算し、その結果を k1 に代入
    k2 = m-n ;              // 差 m-n を計算し、その結果を k2 に代入
    k3 = m*n ;              // 積 m*n を計算し、その結果を k3 に代入
    k4 = n/m ;              // 商 n/m を計算し、その結果を k4 に代入
    st_k1 = Long.toString(k1) ;     // 倍長整数型 k1 を文字列型に変換し、 st_k1 に代入
    st_k2 = Long.toString(k2) ;     // 倍長整数型 k2 を文字列型に変換し、 st_k2 に代入
    st_k3 = Long.toString(k3) ;     // 倍長整数型 k3 を文字列型に変換し、 st_k3 に代入
    st_k4 = Long.toString(k4) ;     // 倍長整数型 k4 を文字列型に変換し、 st_k4 に代入
    g.drawString("m+n = ", 20 , 20) ;   // 文字列 m+n = を、位置 (x=20, y=20) に表示
    g.drawString(st_k1 , 60 , 20) ;     // 変数 st_k1 の値を、位置 (x=60, y=20) に表示
    g.drawString("m-n = " , 20 , 40) ;   // 文字列 m-n = を、位置 (x=20, y=40) に表示
    g.drawString(st_k2 , 60 , 40) ;     // 変数 st_k2 の値を、 位置(x=60, y=40) に表示
    g.drawString("m*n = ", 20 , 60) ;   // 文字列 m*n = を、位置 (x=20, y=60) に表示
    g.drawString(st_k3 , 60 , 60) ;     // 変数 st_k3 の値を、位置 (x=60, y=60) に表示
    g.drawString("n/m = ", 20 , 80) ;   // 文字列 n/m = を、位置 (x=20, y=80) に表示
    g.drawString(st_k4 , 60 , 80) ;     // 変数 st_k4 の値を、位置 (x=60, y=80) に表示

  }
}

HTML側のファイル名 Ex5.htm

<html>
<body>
<applet code = "Ex5.class" width = 250 height = 150></applet>
</body>
</html>

(例 5 の出力結果)
-----------------------------------------

-----------------------------------------

例 5 の積の計算 m*n においては桁数を超えた計算結果となる。 一般に整数型や倍長整数型では、桁数を超えた計算結果については保証されない。 整数型や倍長整数型の除算 n/m については、少数点以下は全て切り捨てられた整数のみが出力される。


[例 6] 二つの実数 5.00000000000009e20 と 5.00000000000008e20 の 和,差,積,商 をそれぞれ求めて表示する。 このとき計算式も表示する。

// Applet (アプレット) 側のファイル名 Ex6.java

import java.awt.* ;
import java.applet.* ;

public class Ex6 extends Applet
{
  public void paint(Graphics g )
  {
    double x, y, wa, sa, seki, syo ;
    String st_wa, st_sa, st_seki, st_syo ;
    x = 5.00000000000009e20 ;
    y = 5.00000000000008e20 ;
    wa = x+y ;
    sa = x-y ;
    seki = x*y ;
    syo = x/y ;
    st_wa =Double.toString(wa) ;
    st_sa = Double.toString(sa) ;
    st_seki = Double.toString(seki) ;
    st_syo = Double.toString(syo) ;
    g.drawString("x+y = ", 20 , 20) ;
    g.drawString(st_wa , 60 , 20) ;
    g.drawString("x-y = ", 20 , 40) ;
    g.drawString(st_sa , 60 , 40) ;
    g.drawString("x*y = ", 20 , 60) ;
    g.drawString(st_seki , 60 , 60) ;
    g.drawString("x/y = ", 20 , 80) ;
    g.drawString(st_syo , 60 , 80) ;
  }
}

HTML側のファイル名 Ex6.htm

<html>
<body>
<applet code = "Ex6.class" width = 250 height = 150></applet>
</body>
</html>

(例 6 の出力結果)
-----------------------------------------

-----------------------------------------

例 6 の差の計算 x-y において、実数型の計算では大きな数同士を互いに差し引くと、 桁落ちが生じて計算結果の精度が低下するので注意を要する。 なお 整数型や倍長整数型では、桁落ちは生じない。


[例 7] 各種の数学関数の値をそれぞれ求めて表示する。

// Applet (アプレット) 側のファイル名 Ex7.java

import java.awt.* ;
import java.applet.* ;

public class Ex7 extends Applet
{
  public void paint(Graphics g )
  {
    double x, y1, y2, y3, y4, y5, y6, y7, y8 ;
    String st_y1, st_y2, st_y3, st_y4, st_y5, st_y6, st_y7, st_y8 ;
    x = 2.0 ;
    y1 = Math.sqrt(x) ;     // x の平方根
    y2 = Math.pow(x, 8) ;    // x の 8乗
    y3 = Math.pow(x, 8.0/3.0) ; // x の 8/3乗
    y4 = Math.exp(x) ;      // 指数
    y5 = Math.log(x) ;      // 自然対数
    y6 = Math.sin(x) ;      // 正弦
    y7 = Math.cos(x) ;      // 余弦
    y8 = Math.tan(x) ;      // 正接
    st_y1 = Double.toString(y1) ;
    st_y2 = Double.toString(y2) ;
    st_y3 = Double.toString(y3) ;
    st_y4 = Double.toString(y4) ;
    st_y5 = Double.toString(y5) ;
    st_y6 = Double.toString(y6) ;
    st_y7 = Double.toString(y7) ;
    st_y8 = Double.toString(y8) ;
    g.drawString(st_y1 , 20 , 20) ;
    g.drawString(st_y2 , 20 , 40) ;
    g.drawString(st_y3 , 20 , 60) ;
    g.drawString(st_y4 , 20 , 80) ;
    g.drawString(st_y5 , 20 , 100) ;
    g.drawString(st_y6 , 20 , 120) ;
    g.drawString(st_y7 , 20 , 140) ;
    g.drawString(st_y8 , 20 , 160) ;
  }
}

HTML側のファイル名 Ex7.htm

<html>
<body>
<applet code = "Ex7.class" width = 250 height = 200></applet>
</body>
</html>

(例 7 の出力結果)
-----------------------------------------

-----------------------------------------


繰り返し操作を制御する for文 を用いたプログラム例を以下に示す。 繰り返し操作のことをループという。

[例 8] 二次関数 y = x * x について、独立変数 x を一定間隔で増加させ、 それに応じた従属変数 y の値を繰り返し計算してファイル出力する。

// Applet (アプレット) 側のファイル名 Ex8.java

import java.awt.* ;
import java.applet.* ;

public class Ex8 extends Applet
{
  public void paint(Graphics g )
  {
    int i ;         // 変数 i を整数型として宣言
    double x, y ;      // 変数 x, y を倍精度実数型として宣言
    String st_x, st_y ;   // 変数 st_x, st_y を文字列型として宣言

    for(i=-5; i<=5; i=i+1)
    {                      // forループの開始
      x=1.0*i ;
      y=x*x ;                 // x の 2乗を計算し、y に代入
      st_x=Double.toString(x) ;       // 倍精度実数型 x を文字列型に変換し、 st_x に代入
      st_y=Double.toString(y) ;        // 倍精度実数型 y を文字列型に変換し、 st_y に代入
      g.drawString(st_x, 20, 20+50+10*i) ;  // 変数 st_x の値を、位置 (x=20, y=20+50+10*i ) に表示
      g.drawString(st_y, 80, 20+50+10*i) ;  // 変数 st_y の値を、位置 (x=80, y=20+50+10*i ) に表示
    }                       // forループの終了
  }
}

HTML側のファイル名 Ex8.htm

<html>
<body>
<applet code = "Ex8.class" width = 250 height = 200></applet>
</body>
</html>

(例 8 の出力結果)
-----------------------------------------

-----------------------------------------

例 8 において、 for(i=-5; i<=5; i=i+1) {  } は、 i = -5 から始めて、i の値が 5 になるまで i を +1 しながら {  }中のプログラムを繰り返す forループのプログラム文である。 i の値が 5 になると forループ領域から抜けて繰り返し実行は終了する。 例 8 の for(i=-5; i<=5; i=i+1) において、i<=5 を  i<5 に変えると i = 5 が除外されるので、+1 の間隔での繰り返し実行は i = 4 に達すると終了する。


[例 9] 1 から 100 までの整数をすべて加えた 1+2+3+4+ ‥ ‥ +100 の値 を求めて表示する。

// Applet (アプレット) 側のファイル名 Ex9.java

import java.awt.* ;
import java.applet.* ;

public class Ex9 extends Applet
{
  public void paint(Graphics g )
  {
    long m, n ;
    String st_m ;
    m=0 ;               // 最初に、変数 m を零に初期化
    for(n=1; n<=100; n=n+1)
    {                 // forループの開始
      m=m+n ;           // 変数 m の値に n を加えた数値を m に代入
    }                 // forループの終了
    st_m=Long.toString(m) ;    // forループ領域から抜けた時点で、倍長整数型 m を文字列型に変換し、 st_m に代入
    g.drawString(st_m, 20, 20) ;  // forループ領域から抜けた時点での変数 st_m の値を表示
  }
}

HTML側のファイル名 Ex9.htm

<html>
<body>
<applet code = "Ex9.class" width = 100 height = 50></applet>
</body>
</html>

(例 9 の出力結果)
-----------------------------------------

-----------------------------------------

例 9 において、 for(n=1; n<=100; n=n+1) {  } は、 n = 1 から始めて、n の値が 100 になるまで n を +1 しながら {  }中のプログラムを繰り返す forループのプログラム文である。 n の値が 100 になると forループ領域から抜けて繰り返し実行は終了する。 このとき、forループ領域から抜けた時点での変数 m の値は 1+2+3+4+ ‥ ‥ +100 となっている。


[例 10] 1 から 10 までの整数のすべて積 1*2*3*4* ‥ ‥ *10 の値 を求めて表示する。

// Applet (アプレット) 側のファイル名 Ex10.java

import java.awt.* ;
import java.applet.* ;

public class Ex10 extends Applet
{
  public void paint(Graphics g )
  {
    long m, n ;
    String st_m ;
    m=1 ;              // 最初に、変数 m を 1 に初期化
    for(n=1; n<=10; n=n+1)
    {                // forループの開始
      m=m*n ;          // 変数 m と n の積を m に代入
    }                // forループの終了
    st_m=Long.toString(m) ;    // forループ領域から抜けた時点で、倍長整数型 m を文字列型に変換し、 st_m に代入
    g.drawString(st_m, 20, 20) ;  // forループ領域から抜けた時点での変数 st_m の値を表示
  }
}

HTML側のファイル名 Ex10.htm

<html>
<body>
<applet code = "Ex10.class" width = 100 height = 50></applet>
</body>
</html>

(例 10 の出力結果)
-----------------------------------------

-----------------------------------------

例 10 において、 for(n=1; n<=10; n=n+1) {  } は、 n = 1 から始めて、n の値が 10 になるまで n を +1 しながら {  }中のプログラムを繰り返す forループのプログラム文である。 n の値が 10 になると forループ領域から抜けて繰り返し実行は終了する。 このとき、forループ領域から抜けた時点での変数 m の値は 1*2*3*4* ‥ ‥ *10 となっている。


条件判断を行うプログラム if 文の例を以下に記す。

[例 11] 二次方程式 a*x*x + b*x + c = 0.0 の実数解を求めて表示する。 ただし実数の解がないときは 「実数解なし」 という文字列を表示する。

// Applet (アプレット) 側のファイル名 Ex11.java

import java.awt.* ;
import java.applet.* ;

public class Ex11 extends Applet
{
  public void paint(Graphics g )
  {
    double a, b, c, D, x1, x2 ;
    String st_a, st_x1, st_x2 ;

    for(a=-2.0; a<=2.0; a=a+4.0)
    {                     // forループの開始
      b=7.0 ;
      c=-15.0 ;
      D=b*b-4.0*a*c ;            // 判別式 D の定義
      if (D>=0.0)
      {                      // ifブロックの開始
        x1=(-b+Math.sqrt(D))/(2.0*a) ;    // 解 x1
        x2=(-b-Math.sqrt(D))/(2.0*a) ;    // 解 x2
        st_a =Double.toString(a) ;       // 倍精度実数型 a を文字列型に変換し、 st_a に代入
        st_x1=Double.toString(x1) ;     // 倍精度実数型 x1 を文字列型に変換し、 st_x1 に代入
        st_x2=Double.toString(x2) ;     // 倍精度実数型 x2 を文字列型に変換し、 st_x2 に代入
        g.drawString("a =", 20, 20) ;    // 文字列 a = を 位置(x=20, y=20) に表示
        g.drawString("x1 =", 20, 40) ;   // 文字列 x1 = を 位置(x=20, y=40) に表示
        g.drawString("x2 =", 20, 60) ;   // 文字列 x2 = を位置 (x=20, y=60) に表示
        g.drawString(st_a, 50, 20) ;     // 変数 st_a の値を 位置(x=50, y=20) に表示
        g.drawString(st_x1, 50, 40) ;    // 変数 st_x1 の値を 位置(x=50, y=40) に表示
        g.drawString(st_x2, 50, 60) ;    // 変数 st_x2 の値を 位置(x=50,y= 60) に表示
      }                    // ifブロックの終了
      else
      {                    // elseブロックの開始
         st_a =Double.toString(a) ;
         g.drawString("a =", 20, 100) ; 
         g.drawString(st_a, 50, 100) ;
         g.drawString("実数解なし", 20, 120) ;
      }                     // elseブロックの終了
    }                       // forループの終了
  }
}

HTML側のファイル名 Ex11.htm

<html>
<body>
<applet code = "Ex11.class" width = 250 height = 200></applet>
</body>
</html>

(例 11 の出力結果)
-----------------------------------------

-----------------------------------------

例 11 の if ( D >= 0.0 ) {  } else {  } において、 条件式 D >=0.0 が真のときifブロック内のプログラムを実行する。 ただし 条件式 D >= 0.0 が偽になったときは、elseブロック内のプログラムを実行する。 if 文の基本構造は if ( ) {  } else {  } の形をしており、if ( ) 中に 条件式を指定し、その直後の {  }中には条件式が真のときに行う 操作プログラム (if ブロック) を記述する。 else の後の {  } 中は条件式が偽になったときの 処理プログラム (else ブロック) を記述する。 if 文において、条件式が偽になったときの処理が必要ないときは、 else {  } の部分は省略してもよい。 すなわち else {  } を省略した場合は、条件式が真のときのみを実行して終了する。

if ( )中に記せる条件式には、下記のような式がある。
   D > 0.0   ( D は零より大きい。)
   D < 0.0   ( D は零より小さい。)
   D >= 0.0   ( D は零と等しいか零より大きい。)
   D <= 0.0   ( D は零と等しいか零より小さい。)
   D == 0.0   ( D は零と等しい。)
   D != 0.0   ( D は零に等しくない。)
if ( )中に記す条件式が二つになる場合は、以下のように記す。
   ( D > -50.0 ) && ( D < 80.0 )     (D は -50.0 より大きく かつ D は 80.0 より小さい。)
   ( D < -50.0 ) || ( D > 80.0 )      (D は -50.0 より小さいか または D は 80.0 より大きい。)
ここで記号 && は論理における 「かつ」 、記号 || は 「または」 を意味する。


ネスト (入れ子) 構造のプログラム例を以下に記す。 ネスト (入れ子) とは、for文の中にさらに for文が入って多重ループになっている場合や if 文の中にさらに if 文が入っているようなプログラム構造のことをいう。

[例 12] 二次関数 y = a x * x について、係数 a の値を変えて、グラフを描く。

// Applet (アプレット) 側のファイル名 Ex12.java

import java.awt.* ;
import java.applet.* ;

public class Ex12 extends Applet
{
  public void paint(Graphics g )
  {
    int ix, iy, ipx, ipy ;
    double x, y, a, lx, ly, xd, xu, yd, yu, pn, dx ;

    ix=20 ;                              // 左端余白
    iy=20 ;                              // 上端余白
    lx=180.0 ;                            // x軸の長さ
    ly=180.0 ;                            // y軸の長さ
    xd=-1.0 ;                            // x の初値
    xu=1.0 ;                             // x の終値
    yd=-1.0 ;                            // y の最小値
    yu=1.0 ;                             // y の最大値
    pn=200.0 ;                           // プロット数
    g.drawLine(ix, iy+(int)(ly/2), ix+(int)(lx), iy+(int)(ly/2)) ;  // x軸の描画
    g.drawLine(ix+(int)(lx/2), iy, ix+(int)(lx/2), iy+(int)(ly)) ;   // y軸の描画
    g.setColor(new Color(0,0,255)) ;                // グラフの色を青に設定
    dx=(xu-xd)/pn ;                         // x の増分

    for(a=-2.5; a<=2.5; a=a+0.5)
    {                       // a=-2.5 から a=2.5 まで変化させる for ループの開始
      for(x=xd; x<=xu; x=x+dx)
      {                     // x=xd から x=xu まで変化させる for ループの開始
        y=a*x*x ;               // 2次関数
        ipx=(int)( (x-xd)*lx/(xu-xd) )+ix ;    // x のプロット位置
        ipy=(int)( ly-(y-yd)*ly/(yu-yd) )+iy ;   // y のプロット位置
        if(ipy>iy && ipy<(int)(ly)+iy)
        {                    // ipy の範囲を指定する if ブロックの開始
          if(ipx>ix && ipx<(int)(lx)+ix)
          {                  // ipx の範囲を指定する if ブロックの開始
            g.drawLine(ipx, ipy, ipx, ipy) ;  // プロット出力
          }                  // ipx の範囲を指定する if ブロックの終了
        }                    // ipy の範囲を指定する if ブロックの終了
      }                      // x=xd から x=xu まで変化させる for ループの終了
    }                        // a=-2.5 から a=2.5 まで変化させる for ループの終了
  }
}

HTML側のファイル名 Ex12.htm

<html>
<body>
<applet code = "Ex12.class" width = 250 height = 250></applet>
</body>
</html>

(例 12 の出力結果)
-----------------------------------------

-----------------------------------------

例 12 において、内側の for文のループから先に実行される。 すなわち 最初は係数 a = -2.5 一定でもって変数 x が xd = -1.0 から xu = 1.0 まで変化し、 次に a が +0.5 されて a = 2.0 一定でもって x が xd = -1.0 から xu = 1.0 まで変化する。

g.drawLine(ix1, iy1, ix2, iy2) は、 位置 (x=ix1, y=iy1) から 位置(x=ix2, y=iy2) まで直線を描く。 だだし ix1, iy1, ix2, iy2 は整数型 int でなければならない。 (int)( ) は、( )中の変数を整数型に変換する。


 コンピュータ ソフトウェア へ戻る

 情報技術 へ戻る

 トップページ へ戻る