はじめに
この実験では、Java で与えられた整数が完全平方数であるかどうかを判断する方法を学びます。Math.sqrt() メソッドを使用して数値の平方根を計算し、その結果が整数であるかどうかを確認する方法を探ります。
実践的なコーディング演習を通じて、ユーザー入力を受け取り、平方根を計算し、元の数値が完全平方数であるかどうかを判断する Java プログラムを実装します。また、負の数や完全平方数でない数など、様々な入力でプログラムをテストし、その堅牢性を確保します。
平方根を計算して整数をチェックする
このステップでは、数値の平方根を計算し、元の数値が完全平方数であるかどうかを判断する Java プログラムを作成します。完全平方数とは、整数の平方である整数のことです。言い換えると、整数をそれ自身と掛け合わせた積です。たとえば、9 は 3 * 3 なので完全平方数です。
Java が提供する Math.sqrt() メソッドを使用して平方根を計算します。このメソッドは double 型の値を返し、小数点以下の値が含まれる場合があります。元の数値が完全平方数であるかどうかを確認するには、その平方根が整数であるかどうかを調べる必要があります。
まず、
~/projectディレクトリにSquareRootChecker.javaという名前の新しい Java ファイルを作成しましょう。左側のファイルエクスプローラーで右クリックして「New File」を選択し、SquareRootChecker.javaと入力することで作成できます。エディタで
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が整数であれば、squareRootとMath.floor(squareRoot)は等しくなります。System.out.println(...): これらの行は、数値が完全平方数であるかどうかに基づいて結果を出力します。
ファイルを保存します(Ctrl+S または Cmd+S)。
次に、ターミナルでプログラムをコンパイルします。
javac SquareRootChecker.javaエラーがなければ、
SquareRootChecker.classファイルが作成されます。コンパイルされたプログラムを実行します。
java SquareRootCheckerプログラムは整数の入力を促します。
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 型の number を Math.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)は偽になります。
この簡単な比較により、元の整数が完全平方数であるかどうかを効果的に判定できます。
異なる入力に対する出力を観察し、理解を深めるために、プログラムを数回再実行しましょう。
ターミナルで
~/projectディレクトリにいることを確認します。コンパイルされたプログラムを再度実行します。
java SquareRootChecker数値
25を入力し、Enter キーを押します。出力を観察します。Enter an integer: 25 25 is a perfect square.再度プログラムを実行します。
java SquareRootChecker数値
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 文は、ユーザーが負の整数を入力した場合を処理します。このコードの部分をテストしましょう。
ターミナルで
~/projectディレクトリにいることを確認します。コンパイルされたプログラムを実行します。
java SquareRootChecker入力を求められたら、負の数を入力します。たとえば、
-4を入力して Enter キーを押します。Enter an integer: -4 Cannot calculate the square root of a negative number.予想通り、プログラムは負の数の平方根を計算できないことを正しく識別し、適切なメッセージを出力します。
次に、ユーザーが整数ではない入力、たとえばテキストや小数を入力した場合に何が起こるかを考えてみましょう。私たちのプログラムは scanner.nextInt() を使用して入力を読み取ります。このメソッドは整数値のみを読み取るように設計されています。ユーザーが整数として解析できないものを入力すると、InputMismatchException が発生し、プログラムはクラッシュします。
このようなエラーを適切に処理することは、堅牢なプログラムを作成する上で重要な部分です。この入門実験では、非整数入力に対する完全なエラー処理を実装しませんが、このようなことが起こり得ることを認識することは重要です。将来の実験では、try-catch ブロックのような例外を処理する技術を学び、予期しないユーザー入力に対してより強いプログラムを作成する方法を学びます。
今は、非整数入力を入力したときに何が起こるかを観察しましょう。
コンパイルされたプログラムを再度実行します。
java SquareRootChecker入力を求められたら、いくつかのテキストを入力します。たとえば、
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() を使ってその床関数の値と比較することでチェックすることでした。また、平方根が実数ではない負の入力数値のケースも処理しました。このプロセスにより、完全平方数を効果的に識別することができました。



