Javaで作る!初心者でも分かる電卓プログラムの作り方7選

初心者向けJava電卓プログラム作成ガイド Java

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスはSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

初めてプログラムを学ぶ方々にとって、実用的なプロジェクトを完成させることは、学びの一大段階となります。

今回は、Java言語を使って電卓プログラムを作成する方法を超高品質な記事で解説いたします。

7つの詳細なステップとサンプルコードを交えて、Java言語でのプログラミングの基本を習得しましょう。

電卓プログラムは、初心者にも扱いやすいトピックであるため、Java言語の基本からしっかり学べます。

●Javaとは?

Javaは、1990年代にSun Microsystems (現在はOracle Corporationが所有) によって開発された、オブジェクト指向プログラミング言語です。

この言語は、プラットフォーム非依存の特性を持ち、異なるオペレーティングシステムやデバイスで動作します。

Javaは、Webアプリケーション、モバイルアプリケーション、企業向けアプリケーションの開発に広く利用されています。

○Javaの特性と利点

Java言語は次のような特性と利点を持ちます。

  1. プラットフォーム非依存:Javaアプリケーションは、異なるプラットフォームで動作することが可能です。これは、Java Virtual Machine (JVM) と呼ばれる特殊な仮想マシン上でプログラムが実行されるためです。
  2. オブジェクト指向:Javaはオブジェクト指向プログラム言語であり、データと方法を一緒にグループ化することができます。これにより、コードの再利用性と保守性が向上します。
  3. 豊富なライブラリ:Javaは、広範なライブラリとツールを提供しており、開発者は多くの機能を簡単に実装できます。
  4. 強いメモリ管理:Javaはガベージコレクションというメモリ管理システムを導入しており、開発者はメモリの解放や管理についてあまり心配する必要がありません。

○Javaの基本的な構文

Java言語を学ぶ際に理解する必要がある基本的な構文を説明します。

□変数の宣言と初期化

Javaでは、データを保存するために変数を使用します。

変数はデータタイプと名前を持ちます。

下記のコードは、整数型の変数を宣言し、それに値を割り当てる方法を表しています。

   int number = 100; // このコードではint型の変数numberを宣言し、100という値を割り当てています。

□条件文

条件文を使用すると、特定の条件下でコードの異なる部分を実行できます。

下記のサンプルコードは、条件文を使用した簡単なプログラムを表しています。

   if (number > 50) {
       System.out.println("Number is greater than 50"); // このコードを実行すると、numberが50より大きい場合、"Number is greater than 50"と表示します。
   } else {
       System.out.println("Number is less than or equal to 50"); // このコードを実行すると、numberが50以下の場合、"Number is less than or equal to 50"と表示します。
   }

□ループ

ループを使用すると、特定のコードブロックを繰り返し実行できます。

下記のコードは、forループを使用した簡単な例を表しています。

   for (int i = 0; i < 10; i++) {
       System.out.println("Current number: " + i); // このコードを実行すると、0から9までの数字が順に表示されます。
   }

●電卓プログラムの構想

電卓は私たちの生活の中で非常に役立つツールとして使われてきました。

従って、プログラミングの学び舎として電卓プログラムの作成は最適です。

この記事では、Javaを使用して電卓プログラムを作成する方法を、7つの詳細なステップとともに紹介します。

○電卓プログラムの基本機能

電卓プログラムを考える上で、まず知っておくべき基本機能を挙げてみましょう。

  1. 加算
  2. 減算
  3. 乗算
  4. 除算
  5. 小数点以下の計算
  6. メモリ機能(オプション)

これらの基本的な機能を持つ電卓は、多くの場面で役立ちます。

しかし、要望や状況に応じて、これらの機能をカスタマイズすることも考慮する必要があります。

○必要なツールと環境

Javaを使用して電卓プログラムを作成するには、次のツールと環境が必要です。

  1. Java Development Kit (JDK):Javaプログラムを実行するためのソフトウェアパッケージです。
  2. Integrated Development Environment (IDE):Javaのコーディング、デバッグ、実行を助けるツールです。例えば、EclipseやIntelliJ IDEAなどがあります。
  3. コンピューター:Windows、Mac、Linuxなど、JavaがサポートするOSを実行するPCが必要です。

JDKは、公式のOracleウェブサイトからダウンロードできます。

IDEは好みや状況に応じて選択することができます。

●シンプルな電卓プログラムの作成ステップ

Java言語を学ぶ初心者にとって、電卓プログラムは素晴らしいスタート地点です。

それは、基本的な算術演算子や変数、ユーザー入力といったJavaの基本概念を網羅しながらも、シンプルで手を動かしやすいからです。

今回の記事では、Javaを用いて基本的な電卓プログラムを作成する手順を7つのステップで解説します。

○サンプルコード1:基本的な計算機能を持つクラスの作成

まずは、四則演算を行う基本的な計算機能を持つクラスを作成します。

// Calculatorクラスの定義
public class Calculator {

    // 足し算を行うメソッド
    public double add(double num1, double num2) {
        return num1 + num2;
    }

    // 引き算を行うメソッド
    public double subtract(double num1, double num2) {
        return num1 - num2;
    }

    // 掛け算を行うメソッド
    public double multiply(double num1, double num2) {
        return num1 * num2;
    }

    // 割り算を行うメソッド
    public double divide(double num1, double num2) {
        if (num2 != 0) {
            return num1 / num2;
        } else {
            System.out.println("0で割ることはできません。");
            return -1;  // エラーを表すための値
        }
    }
}

このコードでは、Calculatorというクラスを使って、基本的な四則演算のメソッドを定義しています。

特にdivideメソッドでは、0での除算を防ぐためのチェックを行っており、エラーメッセージとして「0で割ることはできません」と表示する処理を含んでいます。

○サンプルコード2:ユーザー入力の受け取り

次に、ユーザーからの入力を受け取るためのコードを作成します。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);  // Scannerオブジェクトの作成
        Calculator calculator = new Calculator();  // Calculatorオブジェクトの作成

        System.out.println("数値1を入力してください:");
        double num1 = scanner.nextDouble();

        System.out.println("数値2を入力してください:");
        double num2 = scanner.nextDouble();

        // 計算結果の一時保存用
        double result;

        System.out.println("演算子(+,-,*,/)を入力してください:");
        char operator = scanner.next().charAt(0);  // 1文字目を取得

        switch (operator) {
            case '+':
                result = calculator.add(num1, num2);
                System.out.println("結果:" + result);
                break;
            case '-':
                result = calculator.subtract(num1, num2);
                System.out.println("結果:" + result);
                break;
            case '*':
                result = calculator.multiply(num1, num2);
                System.out.println("結果:" + result);
                break;
            case '/':
                result = calculator.divide(num1, num2);
                if (result != -1) {  // 0での除算エラーをチェック
                    System.out.println("結果:" + result);
                }
                break;
            default:
                System.out.println("無効な演算子です。");
        }
    }
}

このコードを実行すると、ユーザーが数値と演算子を入力することで、計算結果を取得できるようになります。

例えば、ユーザーが「5」「+」「3」と入力すると、計算結果として「8」が表示されます。

○サンプルコード3:計算結果の表示

上記のコードにおいて、計算結果の表示はすでに含まれていますが、結果のフォーマットを変更することで、さらに見やすくすることができます。

// ...

        switch (operator) {
            case '+':
                result = calculator.add(num1, num2);
                System.out.printf("%f %c %f = %f%n", num1, operator, num2, result);
                break;
            // 他のcaseも同様に変更
            // ...

        }
    }
}

このコードの変更により、例えば「5 + 3」と入力した場合、「5.000000 + 3.000000 = 8.000000」という形式で結果が表示されます。

●電卓プログラムのカスタマイズ

電卓プログラムの作成過程では、基本的な計算機能からスタートし、徐々に新しい機能やエラーハンドリングなどを追加していきます。

ここでは、既に作成したシンプルな電卓プログラムに新しい機能を加えるカスタマイズ方法を解説します。

それでは、いくつかの新しい計算機能の追加とエラーハンドリングの導入方法を学びます。

○サンプルコード4:複数の計算機能の追加

ここでは、既存の電卓プログラムに新しい計算機能を追加する方法を紹介します。

下記のJavaコードは、剰余(%)と累乗(^)の計算機能を加えたものです。

下記のコードを確認し、その後の詳しい説明を参照してください。

public class Calculator {
    public static void main(String[] args) {
        // ユーザーからの入力を受け取ります
        Scanner scanner = new Scanner(System.in);

        System.out.print("数字1を入力してください: ");
        double num1 = scanner.nextDouble();

        System.out.print("数字2を入力してください: ");
        double num2 = scanner.nextDouble();

        System.out.print("演算子を入力してください(+,-,*,/,%,^): ");
        char operator = scanner.next().charAt(0);

        double result;

        // 入力された演算子に応じて計算を行います
        switch (operator) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                result = num1 / num2;
                break;
            case '%':
                result = num1 % num2; // 剰余の計算
                break;
            case '^':
                result = Math.pow(num1, num2); // 累乗の計算
                break;
            default:
                System.out.println("無効な演算子です。");
                return;
        }

        // 計算結果を表示します
        System.out.println("結果: " + result);
    }
}

このコードは、剰余と累乗の計算機能を追加しています。

剰余演算子(%)は、num1をnum2で割った余りを計算します。

累乗関数Math.powは、num1を基数とし、num2を指数として、num1のnum2乗を計算します。

実行結果の例としては、ユーザーが数字1に5、数字2に3、演算子に^を入力した場合、結果は125と表示されます。

○サンプルコード5:エラーハンドリングの導入

次に、エラーハンドリングの導入方法について説明します。

下記のコードでは、0での割り算や無効な演算子の入力に対するエラーハンドリングを導入しています。

public class Calculator {
    public static void main(String[] args) {
        // ユーザーからの入力を受け取ります
        Scanner scanner = new Scanner(System.in);

        try {
            System.out.print("数字1を入力してください: ");
            double num1 = scanner.nextDouble();

            System.out.print("数字2を入力してください: ");
            double num2 = scanner.nextDouble();

            System.out.print("演算子を入力してください(+,-,*,/,%,^): ");
            char operator = scanner.next().charAt(0);

            double result = 0;

            // 入力された演算子に応じて計算を行います
            switch (operator) {
                case '+':
                    result = num1 + num2;
                    break;
                case '-':
                    result = num1 - num2;
                    break;
                case '*':
                    result = num1 * num2;
                    break;
                case '/':
                    if (num2 == 0) {
                        throw new ArithmeticException("0で割ることはできません");
                    }
                    result = num1 / num2;
                    break;
                case '%':
                    result = num1 % num2;
                    break;
                case '^':
                    result = Math.pow(num1, num2);
                    break;
                default:
                    throw new IllegalArgumentException("無効な演算子です");
            }

            // 計算結果を表示します
            System.out.println("結果: " + result);
        } catch (InputMismatchException e) {
            System.out.println("無効な入力です。数値を入力してください");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

このコードでは、無効な入力や0での割り算に対するエラーハンドリングを実施しています。

適切なエラーメッセージを表示することで、ユーザーにフィードバックを提供します。

たとえば、0で割る操作を行った場合、”0で割ることはできません”というメッセージが表示されます。

また、無効な演算子を入力した場合には、”無効な演算子です”というメッセージが表示されます。

●電卓プログラムの応用例

Javaを用いて基本的な電卓プログラムを作成するスキルは、さらなる発展と応用を可能にします。

今回は電卓プログラムの応用例を解説します。

ご紹介する内容を実践すれば、初心者でも段階的にスキルアップが図れるでしょう。

では、具体的な応用例とその作成方法を見ていきましょう。

○サンプルコード6:GUIを用いた電卓アプリケーション

Java言語を使用して、グラフィカルなインターフェイスを持つ電卓アプリケーションを作成する方法を解説します。

JavaにはSwingというフレームワークがあり、これを利用することで、見た目にも美しいアプリケーションを構築することができます。

初めに、Swingフレームワークを利用するための準備を行いましょう。

下記のコードは、基本的なウィンドウを生成するものです。

import javax.swing.JFrame;

public class CalculatorApp {
    public static void main(String[] args) {
        // JFrameインスタンスを生成
        JFrame frame = new JFrame("電卓アプリケーション");
        // ウィンドウのクローズボタンをクリックしたときの動作を設定
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // ウィンドウのサイズを設定
        frame.setSize(300, 300);
        // ウィンドウを表示
        frame.setVisible(true);
    }
}

このコードを実行すると、タイトルが「電卓アプリケーション」と表示される300×300ピクセルのウィンドウが表示されます。

JFrameクラスを利用してウィンドウの生成と設定を行っています。

次に、このウィンドウに電卓の各ボタンとテキストフィールドを追加します。

これにより、ユーザーが計算を行う際に必要なインターフェイスが完成します。

tugi

のようにコードを拡張してください。

//... 以前のコードの続き

import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JPanel;

public class CalculatorApp {
    public static void main(String[] args) {
        // ...以前のコード

        // パネルを作成
        JPanel panel = new JPanel();
        // テキストフィールドを作成
        JTextField textField = new JTextField(10);
        // ボタンを作成
        JButton button1 = new JButton("1");
        JButton button2 = new JButton("2");
        JButton button3 = new JButton("3");

        // パネルにテキストフィールドとボタンを追加
        panel.add(textField);
        panel.add(button1);
        panel.add(button2);
        panel.add(button3);

        // フレームにパネルを追加
        frame.add(panel);

        // ウィンドウを表示
        frame.setVisible(true);
    }
}

このコードを実行すると、ウィンドウにテキストフィールドと「1」、「2」、「3」のボタンが追加されるという結果になります。

パネルを作成し、そのパネルにテキストフィールドとボタンを追加しています。

さらにこのパネルをフレームに追加することで、グラフィカルなインターフェイスが形成されます。

次に、各ボタンに動作を割り当てるためのイベントリスナーを追加します。

また、テキストフィールドに入力された値を使用して計算を行うロジックも実装します。

このプロセスは次の手順で実施します。

○サンプルコード7:履歴機能の追加

電卓アプリケーションに履歴機能を追加することで、過去の計算結果を簡単に参照できるようになります。

この機能はユーザーにとって非常に便利なものとなります。このセクションでは、履歴機能の実装方法を解説します。

まずは、履歴を保存するためのリストを作成します。

下記のコードではArrayListを用いて履歴を保持するリストを作成し、履歴ボタンをクリックしたときに履歴が表示される機能を追加しています。

// ...以前のコードの続き

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;

public class CalculatorApp {
    public static void main(String[] args) {
        // ...以前のコード

        // 履歴を保持するリストを作成
        ArrayList<String> history = new ArrayList<>();

        // 履歴ボタンを作成
        JButton historyButton = new JButton("履歴");
        panel.add(historyButton);

        // 履歴ボタンにアクションリスナーを追加
        historyButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 履歴を表示
                for (String item : history) {
                    System.out.println(item);
                }
            }
        });

        // ...以前のコードの続き
    }
}

このコードを実行すると、履歴ボタンがパネルに追加され、クリックすると過去の計算結果がコンソールに表示されるという動作になります。

ArrayListを用いて履歴を保存し、アクションリスナーを用いてボタンクリック時の動作を定義しています。

●注意点と対処法

プログラミングの世界では、問題が発生することは避けられません。

しかし、適切な注意と対処法を知っていれば、プログラムのエラーを効率的に解決できます。

Javaで電卓プログラムを作成する際にもいくつかの一般的な注意点と対処法があります。

○入力エラーのハンドリング

ユーザーからの入力を受け取る際には、不正な入力や予期せぬ入力が送られてくる可能性があります。

下記のJavaコードは、ユーザーからの入力を受け取り、それが数値かどうかをチェックするシンプルな例です。

import java.util.Scanner;

public class InputErrorHandler {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("数字を入力してください: ");
        String input = scanner.nextLine();

        try {
            int number = Integer.parseInt(input);
            System.out.println("入力された数字は: " + number);
        } catch (NumberFormatException e) {
            System.out.println("有効な数字が入力されませんでした。");
        }
    }
}

このコードではScannerクラスを用いてユーザーからの入力を受け取っています。

そして、Integer.parseIntメソッドを使ってその入力が整数かどうかをチェックします。

もし整数でなければ、NumberFormatExceptionがスローされ、エラーメッセージが表示されます。

このコードを実行すると次のような結果が得られます。

まず、ユーザーに数字の入力を促します。

有効な数字が入力されれば、その数字がコンソールに表示されます。

無効な数字が入力されると、エラーメッセージが表示されます。

このような方法で、ユーザーからの不正な入力を効果的にハンドルすることができます。

○コードの保守性と拡張性

プログラムが大きくなるにつれて、コードの保守性と拡張性が重要になります。

ここでは、コードの保守性と拡張性を向上させるためのいくつかの基本的なテクニックを取り上げます。

まずは、コードの保守性について考えてみましょう。保守性の高いコードは、変更や修正が容易であり、バグのリスクも低くなります。

下記のポイントはコードの保守性を向上させるために重要です。

  1. 適切なコメント: コードには適切なコメントを付け、その機能と動作を明確に示しましょう。
  2. リーダブルなコード: 可読性の高いコードを書くことで、他の開発者がコードを理解しやすくなります。

次に、コードの拡張性について見ていきましょう。

拡張性の高いコードは、新しい機能や改善を簡単に追加できます。

次のポイントはコードの拡張性を向上させるために重要です。

  1. モジュラーデザイン: コードを独立したモジュールに分けることで、各モジュールを個別にテストや更新ができます。
  2. オブジェクト指向プログラミング: クラスとオブジェクトを使用してコードを構造化し、再利用と拡張を容易にします。

まとめ

Javaプログラミングの初学者向けのガイドとして、本記事では電卓プログラムの作成をテーマに7つの手順とそれぞれの手順に対応したサンプルコードを紹介しました。

本ガイドを通じて、初心者でも段階的にJavaのプログラムを作成することが可能です。

また、各サンプルコードの解説により、プログラムのカスタマイズや拡張が行いやすくなります。

特にエラーハンドリングやGUIの利用に関するところでは、プログラムの安定性と使い勝手を高める方法を詳しく解説しました。

本記事がJavaプログラミングの学習の一助となり、より多くの人がプログラミングの面白さと奥深さを感じるきっかけとなれば幸いです。