メソッドのサンプル

Revised: Dec./30th/2001: Since: Dec./30th/2001

ここでは、二次方程式の解の公式をメソッドとして作成してみます。

二次方程式の一般形は次のようになります:

ax^2 + bx + c = 0

コマンドライン引数から、 a, b, c を受け取って、次の解の公式を計算します:

     -b ± D
x = ---------- ,	D^2 = b^2 -4ac.
        2a

D^2 は判別式と呼ばれ、正数または0 (D^2 ≥ 0) ならば実数解、負数 (D^2 < 0) ならば虚数解 (α ± i β) であることを意味します。

同じクラス内に作成

利用するメソッドと同じクラス内に、解の公式のメソッドを作成します。修飾子 static が宣言された main() メソッドから利用しますから、この解の計算メソッドも static にしておく必要があります。

KaiTest.java:

class KaiTest {
	public static void main(String[] args) {
		System.out.print(args[0] + "x*x + ");
		System.out.print(args[1] + "x + ");
		System.out.println(args[2]);
		//引数を double 型に変換
		double a = Double.parseDouble(args[0]);
		double b = Double.parseDouble(args[1]);
		double c = Double.parseDouble(args[2]);
		//メソッドの戻り値を配列で定義
		double[] x;
		//メソッド呼び出し
		x = koushiki(a,b,c);
		System.out.println("\t解 x1 = " + x[0]);
		System.out.println("\t解 x2 = " + x[1]);
	}
	static double[] koushiki(double a, double b, double c) {
		//解の配列を定義
		double[] x = {0,0};
		//判別式の変数を定義
		double d2=0, d=0;
		//判別式
		d2 = b*b - 4*a*c;
		if (d2 < 0) {	//虚数解ならば
			System.out.println("虚数解! 判別式 = " + d2);
		} else {	//実数解ならば
			//java.lang.Math クラスの静的メソッド sqrt()
			//d2 の平方根(ルート)計算
			d = Math.sqrt(d2);
			x[0] = (-b + d)/(2*a);	//解1
			x[1] = (-b - d)/(2*a);	//解2
		}
		return x;	//解を配列で戻す
	}
}

コマンドライン引数 args[0] - args[2]文字列型として定義されていますが、 Double クラス静的メソッド parseDouble() を用いて double 型に型変換しています。こうすることで、四則演算が可能になります。一般に、他のパッケージのクラスを利用する場合はインポートする必要がありますが、 java.lang パッケージに含まれるクラスは、 javac によってコンパイルされるときに、全て自動的にインポートされますので、明示的にインポートする必要はありません。

解の公式計算のためのメソッド koushiki()

static静的メソッド。 main() メソッドは静的メソッドであり、静的メソッドからは静的メソッドしか利用できない。
double[]戻り値は double配列
koushiki(...)メソッド名と引数の定義。このメソッドは三つの double 型のリテラルを引数として受け取る。
{...}メソッドの実装。呼び出されると、この内部を実行して、 returnで呼び出し元に制御を戻す。

このメソッドの内部では、判別式を計算し、負値ならば制御を戻し、0以上の値ならば解の公式を計算して、制御を戻します。判別式の平方根を計算するのに、コアパッケージ java.langMath クラスで定義された静的メソッド sqrt() を用いています。このクラスは Double クラスや String クラスと同様に java.lang パッケージに含まれているので、明示的なインポートは必要ありません。

C:\Java>javac KaiTest.java
C:\Java>java KaiTest 1 -2 -3
1x*x + -2x + -3
        解 x1 = 3.0
        解 x2 = -1.0
C:\Java>java KaiTest 1 -2 3
1x*x + -2x + 3
虚数解! 判別式 = -8.0
        解 x1 = 0.0
        解 x2 = 0.0

別のクラスのメソッドとして定義

次の例は、解を計算するメソッドを別のクラスに定義しています。このクラスは、係数 a, b, c を変数値として持ったオブジェクトとして利用します。

クラス Kai

フィールド
double a, b, c
二次方程式の係数
double[] kai
二次方程式の解
コンストラクタ
Kai(double a , double b, double c)
二次方程式の係数をセット
メソッド
public double calKai()
解の公式を計算してフィールドにセットし、判別式の値を返す。
public double[] getKai()
解のフィールドの値を返す。

ここでは、このような発想でコーディングします。このクラスを利用する main() メソッドは、 KaiTest2 クラスに作ります。

KaiTest2.java:

//利用される二次方程式の解の公式クラス
class Kai {
	//係数の定義
	private double a = 0, b = 0, c = 0;
	//解の定義
	private double[] kai = {0,0};
	//コンストラクタ
	//ax^2 + bx +c = 0
	Kai(double a , double b, double c) {
		this.a = a;
		this.b = b;
		this.c = c;
	}
	//解の公式計算
	public double calKai() {
		//判別式の変数を定義
		double d2 = 0, d = 0;
		//判別式
		d2 = b*b - 4*a*c;
		if (d2 >= 0) {	//判別式が正か0ならば
			d = Math.sqrt(d2);
			kai[0] = (-b + d)/(2*a);	//解1
			kai[1] = (-b - d)/(2*a);	//解2
		}
		return d2;
	}
	//解を得る
	public double[] getKai() {
		return kai;
	}
}
//Kai クラスの利用
class KaiTest2 {
	public static void main(String[] args) {
		System.out.print(args[0] + "x*x + ");
		System.out.print(args[1] + "x + ");
		System.out.println(args[2]);
		//引数を double 型に変換
		double a = Double.parseDouble(args[0]);
		double b = Double.parseDouble(args[1]);
		double c = Double.parseDouble(args[2]);
		//解の配列
		double[] x = {0,0};
		//解の公式計算の戻り値
		double d2;
		//インスタンス化
		Kai obj = new Kai(a,b,c);
		//解の公式を計算する
		d2 = obj.calKai();
		if (d2 >= 0) {	//戻り値が 0 以上ならば
			//解を得る
			x = obj.getKai();
			if (d2 > 0) {
				System.out.println("\t 解 x1 = " + x[0]);
				System.out.println("\t 解 x2 = " + x[1]);
			} else {
				System.out.println("重解");
				System.out.println("\t x1 = x2 = " + x[0]);
			}
		} else {	//戻り値が負ならば
			System.out.println("虚数解! 判別式 = " + d2);
		}
	}
}
C:\Java>javac KaiTest2.java
C:\Java>java KaiTest2 1 -2 -3
1x*x + -2x + -3
         解 x1 = 3.0
         解 x2 = -1.0
C:\Java>java KaiTest2 1 -2 1
1x*x + -2x + 1
重解
         x1 = x2 = 1.0
C:\Java>java KaiTest2 1 -2 3
1x*x + -2x + 3
虚数解! 判別式 = -8.0


Copyright © 2001 SUGAI, Manabu. All Rights Reserved.