Java で数値が完全平方数かどうかをチェックする方法

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java で与えられた整数が完全平方数であるかどうかを判断する方法を学びます。Math.sqrt() メソッドを使用して数値の平方根を計算し、その結果が整数であるかどうかを確認する方法を探ります。

実践的なコーディング演習を通じて、ユーザー入力を受け取り、平方根を計算し、元の数値が完全平方数であるかどうかを判断する Java プログラムを実装します。また、負の数や完全平方数でない数など、様々な入力でプログラムをテストし、その堅牢性を確保します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/math("Math") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/user_input("User Input") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/SystemandDataProcessingGroup -.-> java/math_methods("Math Methods") subgraph Lab Skills java/if_else -.-> lab-559958{{"Java で数値が完全平方数かどうかをチェックする方法"}} java/math -.-> lab-559958{{"Java で数値が完全平方数かどうかをチェックする方法"}} java/user_input -.-> lab-559958{{"Java で数値が完全平方数かどうかをチェックする方法"}} java/exceptions -.-> lab-559958{{"Java で数値が完全平方数かどうかをチェックする方法"}} java/math_methods -.-> lab-559958{{"Java で数値が完全平方数かどうかをチェックする方法"}} end

平方根の計算と整数のチェック

このステップでは、数値の平方根を計算し、元の数値が完全平方数であるかどうかを判断する Java プログラムを作成します。完全平方数とは、整数の平方である整数のことです。言い換えると、整数をそれ自身と掛け合わせた積です。たとえば、9 は 3 * 3 なので完全平方数です。

Java が提供する Math.sqrt() メソッドを使用して平方根を計算します。このメソッドは double 型の値を返し、小数点以下の値が含まれる場合があります。元の数値が完全平方数であるかどうかを確認するには、その平方根が整数であるかどうかを調べる必要があります。

  1. まず、~/project ディレクトリに SquareRootChecker.java という名前の新しい Java ファイルを作成しましょう。左側のファイルエクスプローラーで右クリックして「New File」を選択し、SquareRootChecker.java と入力することで作成できます。

  2. エディタで SquareRootChecker.java ファイルを開き、以下のコードを貼り付けます。

    import java.util.Scanner;
    
    public class SquareRootChecker {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.print("Enter an integer: ");
            int number = scanner.nextInt();
    
            if (number < 0) {
                System.out.println("Cannot calculate the square root of a negative number.");
            } else {
                double squareRoot = Math.sqrt(number);
    
                // Check if the square root is an integer
                if (squareRoot == Math.floor(squareRoot)) {
                    System.out.println(number + " is a perfect square.");
                } else {
                    System.out.println(number + " is not a perfect square.");
                }
            }
    
            scanner.close();
        }
    }

    このコードの新しい部分を見てみましょう。

    • import java.util.Scanner;: ユーザー入力を読み取るために Scanner クラスを再度インポートします。
    • System.out.print("Enter an integer: ");: これはユーザーに数値の入力を促します。
    • int number = scanner.nextInt();: これはユーザーが入力した整数を読み取り、number 変数に格納します。
    • if (number < 0): これは入力された数値が負であるかどうかをチェックする if 文です。負の場合、エラーメッセージを出力します。
    • double squareRoot = Math.sqrt(number);: この行では Math.sqrt() メソッドを使用して number の平方根を計算し、結果を squareRoot という double 型の変数に格納します。
    • if (squareRoot == Math.floor(squareRoot)): これが平方根が整数であるかどうかをチェックする核心のロジックです。Math.floor(squareRoot)squareRoot 以下の最大の整数を返します。squareRoot が整数であれば、squareRootMath.floor(squareRoot) は等しくなります。
    • System.out.println(...): これらの行は、数値が完全平方数であるかどうかに基づいて結果を出力します。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. 次に、ターミナルでプログラムをコンパイルします。

    javac SquareRootChecker.java

    エラーがなければ、SquareRootChecker.class ファイルが作成されます。

  5. コンパイルされたプログラムを実行します。

    java SquareRootChecker
  6. プログラムは整数の入力を促します。9 のような数値を入力して Enter キーを押します。9 が完全平方数であることを示す出力が表示されるはずです。再度プログラムを実行し、10 のような数値を入力します。10 が完全平方数ではないことを示す出力が表示されるはずです。

    Enter an integer: 9
    9 is a perfect square.
    Enter an integer: 10
    10 is not a perfect square.

平方根を計算し、数値が完全平方数であるかどうかをチェックする Java プログラムを正常に作成しました!

Math.sqrt() を使った完全平方数の判定

このステップでは、Math.sqrt() がどのように動作するか、および前のステップで数値が完全平方数であるかどうかを判定するためにどのように使用したかを理解することに焦点を当てます。

Math.sqrt() メソッドは、多くの数学関数を提供する Java の組み込み Math クラスの一部です。Math.sqrt(double a)double 型の値 a を入力として受け取り、その平方根を double 型で返します。

例えば:

  • Math.sqrt(9.0)3.0 を返します。
  • Math.sqrt(10.0) はおよそ 3.1622776601683795 を返します。
  • Math.sqrt(0.0)0.0 を返します。
  • Math.sqrt(-9.0)NaN (非数値) を返します。

私たちの SquareRootChecker.java プログラムでは、ユーザーから整数を読み取りますが、Math.sqrt()double 型を期待します。Java は、int 型の numberMath.sqrt() に渡すときに自動的に double 型に変換します。

完全平方数を判定するキーは、計算された平方根 (double squareRoot) とその床関数の値 (Math.floor(squareRoot)) を比較することにあります。

  • squareRoot が整数 (例えば 3.0) である場合、Math.floor(squareRoot) も 3.0 になり、条件 squareRoot == Math.floor(squareRoot) は真になります。
  • squareRoot に小数部分がある場合 (例えば 3.16...)、Math.floor(squareRoot) は 3.0 になり、条件 squareRoot == Math.floor(squareRoot) は偽になります。

この簡単な比較により、元の整数が完全平方数であるかどうかを効果的に判定できます。

異なる入力に対する出力を観察し、理解を深めるために、プログラムを数回再実行しましょう。

  1. ターミナルで ~/project ディレクトリにいることを確認します。

  2. コンパイルされたプログラムを再度実行します。

    java SquareRootChecker
  3. 数値 25 を入力し、Enter キーを押します。出力を観察します。

    Enter an integer: 25
    25 is a perfect square.
  4. 再度プログラムを実行します。

    java SquareRootChecker
  5. 数値 15 を入力し、Enter キーを押します。出力を観察します。

    Enter an integer: 15
    15 is not a perfect square.

異なる入力でプログラムを実行することで、Math.sqrt()Math.floor() の比較が完全平方数を正しく識別する方法がわかります。

負の数と非整数入力のテスト

このステップでは、SquareRootChecker.java プログラムを負の数でテストし、ユーザーが整数ではないものを入力した場合に何が起こるかを検討します。

私たちが書いたコードでは、負の数のチェックを含めています。

if (number < 0) {
    System.out.println("Cannot calculate the square root of a negative number.");
}

この if 文は、ユーザーが負の整数を入力した場合を処理します。このコードの部分をテストしましょう。

  1. ターミナルで ~/project ディレクトリにいることを確認します。

  2. コンパイルされたプログラムを実行します。

    java SquareRootChecker
  3. 入力を求められたら、負の数を入力します。たとえば、-4 を入力して Enter キーを押します。

    Enter an integer: -4
    Cannot calculate the square root of a negative number.

    予想通り、プログラムは負の数の平方根を計算できないことを正しく識別し、適切なメッセージを出力します。

次に、ユーザーが整数ではない入力、たとえばテキストや小数を入力した場合に何が起こるかを考えてみましょう。私たちのプログラムは scanner.nextInt() を使用して入力を読み取ります。このメソッドは整数値のみを読み取るように設計されています。ユーザーが整数として解析できないものを入力すると、InputMismatchException が発生し、プログラムはクラッシュします。

このようなエラーを適切に処理することは、堅牢なプログラムを作成する上で重要な部分です。この入門実験では、非整数入力に対する完全なエラー処理を実装しませんが、このようなことが起こり得ることを認識することは重要です。将来の実験では、try-catch ブロックのような例外を処理する技術を学び、予期しないユーザー入力に対してより強いプログラムを作成する方法を学びます。

今は、非整数入力を入力したときに何が起こるかを観察しましょう。

  1. コンパイルされたプログラムを再度実行します。

    java SquareRootChecker
  2. 入力を求められたら、いくつかのテキストを入力します。たとえば、hello を入力して Enter キーを押します。

    Enter an integer: hello
    Exception in thread "main" java.util.InputMismatchException
        at java.base/java.util.Scanner.throwFor(Scanner.java:939)
        at java.base/java.util.Scanner.next(Scanner.java:1594)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
        at SquareRootChecker.main(SquareRootChecker.java:9)

    InputMismatchException を示すエラーメッセージが表示されます。これは、scanner.nextInt() が整数を期待していたが、「hello」を受け取ったためです。

このステップでは、さまざまなタイプのユーザー入力を考慮し、プログラムがそれらをどのように処理するかを考えることの重要性を強調しています。現在のプログラムは単純ですが、これらの潜在的な問題を理解することは、より複雑なアプリケーションを開発するために不可欠です。

まとめ

この実験では、Java で与えられた整数が完全平方数であるかどうかを判定する方法を学びました。入力された数値の平方根を計算するために Math.sqrt() メソッドを利用しました。

核心となるロジックは、計算された平方根が整数であるかどうかを、Math.floor() を使ってその床関数の値と比較することでチェックすることでした。また、平方根が実数ではない負の入力数値のケースも処理しました。このプロセスにより、完全平方数を効果的に識別することができました。