Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java入門】2つの複素数を加算するプログラムの作り方を解説

この記事では、Javaを使って2つの複素数を加算する方法を解説します。複素数は「i」で表される虚部を持つ数値のため、実部と虚部をそれぞれ別々に計理する必要があります。

複素数の加算の基本

複素数は一般的に「a + bi」という形で表されます。ここで「a」が実部、「b」が虚部です。2つの複素数を足し合わせる場合は、以下のように実部同士・虚部同士をそれぞれ加算します。

(a + bi) + (c + di) = (a + c) + (b + d)i

入力と出力の例

入力:

15 + i24 と 3 + i7

出力:

18 + i31

アルゴリズム

ステップ1:開始
ステップ2:3つの複素数(my_input_1、my_input_2、my_result)を宣言する
ステップ3:複素数の値を設定する
ステップ4:実部と虚部をそれぞれ別々に加算して結果を返すメソッド add_complex_number を定義する
ステップ5:結果を my_result 変数に格納する
ステップ6:結果を表示する
ステップ7:終了

例1:インスタンスメソッドを使った実装

まずは、クラス内に加算用のメソッドを定義し、オブジェクト経由で呼び出す方法を見ていきましょう。

import java.util.*;
class ComplexNumbers {
    int my_real_number, my_imaginary_number;
    ComplexNumbers() {}
    ComplexNumbers(int my_real_temp, int my_imaginary_temp){
       my_real_number = my_real_temp;
       my_imaginary_number = my_imaginary_temp;
    }
    ComplexNumbers AddComplexNumbers(ComplexNumbers my_input_1, ComplexNumbers my_input_2){
       ComplexNumbers my_temp = new ComplexNumbers();
       my_temp.my_real_number = my_input_1.my_real_number + my_input_2.my_real_number;
       my_temp.my_imaginary_number = my_input_1.my_imaginary_number + my_input_2.my_imaginary_number;
       return my_temp;
    }
}
public class MainFunction {
    public static void main(String[] args){
       System.out.println("必要なパッケージがインポートされました");
       ComplexNumbers my_input_1 = new ComplexNumbers(15, 24);
       System.out.println("1つ目の複素数 : " + my_input_1.my_real_number + " + i" + my_input_1.my_imaginary_number);
       ComplexNumbers my_input_2 = new ComplexNumbers(3, 7);
       System.out.println("2つ目の複素数 : " + my_input_2.my_real_number + " + i" + my_input_2.my_imaginary_number);
       ComplexNumbers my_result = new ComplexNumbers();
       my_result = my_result.AddComplexNumbers(my_input_1, my_input_2);
       System.out.println("2つの複素数の和 : " + my_result.my_real_number + " + i" + my_result.my_imaginary_number);
    }
}

実行結果

必要なパッケージがインポートされました
1つ目の複素数 : 15 + i24
2つ目の複素数 : 3 + i7
2つの複素数の和 : 18 + i31

例2:staticメソッドを使った実装

次に、static メソッドとして加算処理を定義する方法を紹介します。こちらはオブジェクトを生成せずに直接メソッドを呼び出せるのが特徴です。

public class ComplexNumber {
    int real_number, imaginary_number;
    public ComplexNumber(int r, int i){
       this.real_number = r;
       this.imaginary_number = i;
    }
    public void print_complex_number(){
       System.out.print(this.real_number + " + i" + this.imaginary_number);
    }
    public static ComplexNumber add_complex_number(ComplexNumber n1, ComplexNumber n2){
       ComplexNumber my_result = new ComplexNumber(0, 0);
       my_result.real_number = n1.real_number + n2.real_number;
       my_result.imaginary_number = n1.imaginary_number + n2.imaginary_number;
       return my_result;
    }
    public static void main(String arg[]){
       ComplexNumber my_input_1 = new ComplexNumber(15, 24);
       ComplexNumber my_input_2 = new ComplexNumber(3, 7);
       System.out.println("2つの複素数は次のように定義されています");
       my_input_1.print_complex_number();
       System.out.print(" と ");
       my_input_2.print_complex_number();
       ComplexNumber my_result = add_complex_number(my_input_1, my_input_2);
       System.out.println("\n2つの複素数の和は次の通りです :");
       my_result.print_complex_number();
    }
}

実行結果

2つの複素数は次のように定義されています
15 + i24 と 3 + i7
2つの複素数の和は次の通りです :
18 + i31

まとめ

Javaで複素数を扱う場合、実部と虚部を別々のフィールドとして持つクラスを定義し、加算時にはそれぞれ対応する要素同士を足し合わせるのが基本的なアプローチです。インスタンスメソッドを使う方法とstaticメソッドを使う方法のどちらでも同じ結果が得られるため、用途や設計方針に応じて使い分けるとよいでしょう。

  1. Javaで2つの数の公約数の個数を求めるプログラムの書き方

    この記事では、Javaを使って2つの整数の公約数(共通の約数)の個数を求めるプログラムを紹介します。再帰処理によるユークリッドの互除法で最大公約数(GCD)を計算し、その約数を効率よく数える手法を、サンプルコードとともにわかりやすく解説します。 サンプルコード public class Demo{ static int find_gcd(int val_1, int val_2){ if (val_1 == 0) return val_2; return find_gcd(val_2%val_1,val_1); } sta

  2. Pythonで2つの数値を加算するプログラム:ビット演算による実装方法

    この記事では、2つの数値を加算するという問題に対する解法とアプローチについて詳しく解説します。 問題の概要 2つの大きな数値が与えられ、それらを加算した結果を出力することが求められます。 最も単純なアプローチは、オペランド同士を「+」演算子で結ぶ方法です。また、2つの数値をリストなどのイテラブルに格納し、Python標準ライブラリに用意されている組み込み関数 sum() を利用する方法もあります。 しかし、これらのアプローチでは10進数に対して直接演算を行うため、計算コストが増大するという課題があります。 ビット演算を用いた別のアプローチ そこで次に、数値をビット単位で操作する別のアプローチを