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

JavaJavaBeginner
今すぐ練習

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

はじめに

この実験では、Java で数値が整数であるかどうかを判断する方法を学びます。整数値をチェックするために Math.floor() メソッドから始めて、さまざまな手法を探ります。このメソッドが異なる浮動小数点数表現でどのように動作するかを理解するために、doublefloat の両方のデータ型で練習します。最後に、文字列入力を処理し、整数チェックを行う前に数値型に変換する方法を説明します。この実験では、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/data_types("Data Types") java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/math("Math") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/user_input("User Input") java/SystemandDataProcessingGroup -.-> java/math_methods("Math Methods") subgraph Lab Skills java/data_types -.-> lab-559960{{"Java で数値が整数かどうかをチェックする方法"}} java/operators -.-> lab-559960{{"Java で数値が整数かどうかをチェックする方法"}} java/math -.-> lab-559960{{"Java で数値が整数かどうかをチェックする方法"}} java/user_input -.-> lab-559960{{"Java で数値が整数かどうかをチェックする方法"}} java/math_methods -.-> lab-559960{{"Java で数値が整数かどうかをチェックする方法"}} end

Math.floor() を使って整数をチェックする

このステップでは、Java で Math.floor() メソッドを使って数値が整数であるかどうかを判断する方法を探ります。これは、特にユーザー入力や計算を扱う際に、プログラミングで一般的なタスクです。

まず、Math.floor() が何をするのかを理解しましょう。Java の Math.floor() メソッドは、引数以下の最大の整数を返します。たとえば、Math.floor(5.9)5.0 を返し、Math.floor(5.0)5.0 を返します。

この特性を使って、数値が整数であるかどうかをチェックすることができます。数値が整数であれば、それに Math.floor() を適用すると同じ数値が得られます。数値に小数部分がある場合、Math.floor() はより小さい整数を返します。

これを練習するために、新しい Java ファイルを作成しましょう。WebIDE を開き、~/project ディレクトリに IntegerCheck.java という名前の新しいファイルを作成します。

次に、以下のコードを IntegerCheck.java ファイルにコピーして貼り付けます。

public class IntegerCheck {

    public static void main(String[] args) {
        double number1 = 10.0;
        double number2 = 10.5;

        // Check if number1 is an integer
        if (number1 == Math.floor(number1)) {
            System.out.println(number1 + " is an integer.");
        } else {
            System.out.println(number1 + " is not an integer.");
        }

        // Check if number2 is an integer
        if (number2 == Math.floor(number2)) {
            System.out.println(number2 + " is an integer.");
        } else {
            System.out.println(number2 + " is not an integer.");
        }
    }
}

コードを分解してみましょう。

  • double number1 = 10.0;double number2 = 10.5;:2 つの double 型の変数を宣言します。1 つは整数値を表し、もう 1 つは非整数値を表します。
  • if (number1 == Math.floor(number1)):これが核心のロジックです。元の数値 (number1) と Math.floor(number1) の結果を比較します。もし両者が等しければ、その数値は整数です。
  • System.out.println(...):これらの行は結果をコンソールに出力します。

IntegerCheck.java ファイルを保存します。

次に、プログラムをコンパイルして実行しましょう。WebIDE のターミナルを開き、~/project ディレクトリにいることを確認します。

javac を使ってコードをコンパイルします。

javac IntegerCheck.java

コンパイルが成功すれば、~/project ディレクトリに IntegerCheck.class という名前の新しいファイルが表示されるはずです。

次に、java を使ってコンパイルされたコードを実行します。

java IntegerCheck

以下の出力が表示されるはずです。

10.0 is an integer.
10.5 is not an integer.

この出力は、Math.floor() を使ったロジックが double 型の値が整数を表すかどうかを正しく識別できることを確認しています。

double 型と float 型でテストする

前のステップでは、double 型の値で Math.floor() を使用しました。Java には、doublefloat など、数値を表すためのさまざまなデータ型があります。どちらも浮動小数点数(小数点付きの数値)に使用されますが、doublefloat よりも高い精度を提供します。

IntegerCheck.java プログラムを修正して、double 型と float 型の両方でテストし、Math.floor() がそれぞれの型でどのように動作するかを確認しましょう。

WebIDE エディタで IntegerCheck.java ファイルを開きます。

既存のコードを以下のコードに置き換えます。

public class IntegerCheck {

    public static void main(String[] args) {
        double doubleNumber1 = 20.0;
        double doubleNumber2 = 20.75;

        float floatNumber1 = 30.0f; // Note the 'f' suffix for float literals
        float floatNumber2 = 30.25f;

        // Check if doubleNumber1 is an integer
        if (doubleNumber1 == Math.floor(doubleNumber1)) {
            System.out.println(doubleNumber1 + " (double) is an integer.");
        } else {
            System.out.println(doubleNumber1 + " (double) is not an integer.");
        }

        // Check if doubleNumber2 is an integer
        if (doubleNumber2 == Math.floor(doubleNumber2)) {
            System.out.println(doubleNumber2 + " (double) is an integer.");
        } else {
            System.out.println(doubleNumber2 + " (double) is not an integer.");
        }

        // Check if floatNumber1 is an integer
        // Math.floor() takes a double, so the float is promoted to double
        if (floatNumber1 == Math.floor(floatNumber1)) {
            System.out.println(floatNumber1 + " (float) is an integer.");
        } else {
            System.out.println(floatNumber1 + " (float) is not an integer.");
        }

        // Check if floatNumber2 is an integer
        if (floatNumber2 == Math.floor(floatNumber2)) {
            System.out.println(floatNumber2 + " (float) is an integer.");
        } else {
            System.out.println(floatNumber2 + " (float) is not an integer.");
        }
    }
}

float 型のリテラル値(30.0f30.25f)の後にある f 接尾辞に注意してください。これは、Java で数値が double 型(浮動小数点数リテラルのデフォルト)ではなく float 型であることを示すために必要です。

また、Math.floor()double 型の引数を取るように定義されていることにも注意してください。float 型の値を Math.floor() に渡すと、Java はメソッドが実行される前に自動的に float 型を double 型に昇格させます。floatNumber1 == Math.floor(floatNumber1) の比較が機能するのは、Math.floor() の結果(double 型)が floatNumber1(比較のために double 型に昇格される)と比較されるからです。

IntegerCheck.java ファイルを保存します。

次に、~/project ディレクトリのターミナルから修正したプログラムをコンパイルして実行します。

javac IntegerCheck.java
java IntegerCheck

以下のような出力が表示されるはずです。

20.0 (double) is an integer.
20.75 (double) is not an integer.
30.0 (float) is an integer.
30.25 (float) is not an integer.

これは、Math.floor() を使った比較方法が double 型と float 型の両方で正しく機能することを示しています。

文字列入力の変換を扱う

実際のアプリケーションでは、ユーザーからの入力を取得する必要があり、この入力は通常 String として読み取られます。入力が整数を表すかどうかを判断するなどの数値チェックを行うには、まず Stringdouble などの数値型に変換する必要があります。

このステップでは、プログラムを修正して、ユーザー入力を String として受け取り、それを double に変換してから、Math.floor() を使って元の入力が整数を表すかどうかをチェックします。

WebIDE エディタで IntegerCheck.java ファイルを開きます。

既存のコードを以下のコードに置き換えます。

import java.util.Scanner; // Import the Scanner class

public class IntegerCheck {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Create a Scanner object

        System.out.print("Enter a number: "); // Prompt the user for input
        String input = scanner.nextLine(); // Read user input as a String

        try {
            // Convert the String input to a double
            double number = Double.parseDouble(input);

            // Check if the number is an integer using Math.floor()
            if (number == Math.floor(number)) {
                System.out.println("The input '" + input + "' represents an integer.");
            } else {
                System.out.println("The input '" + input + "' does not represent an integer.");
            }

        } catch (NumberFormatException e) {
            // Handle cases where the input is not a valid number
            System.out.println("Invalid input: '" + input + "' is not a valid number.");
        } finally {
            scanner.close(); // Close the scanner
        }
    }
}

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

  • import java.util.Scanner;:この行は、コンソールからの入力を読み取るために使用される Scanner クラスをインポートします。
  • Scanner scanner = new Scanner(System.in);:これは、標準入力ストリーム(System.in、通常はキーボード)から入力を読み取る Scanner オブジェクトを作成します。
  • System.out.print("Enter a number: ");:この行は、ユーザーに数値の入力を促します。
  • String input = scanner.nextLine();:これは、ユーザーが入力した全行を String として読み取り、input 変数に格納します。
  • try { ... } catch (NumberFormatException e) { ... }:これは try-catch ブロックです。潜在的なエラーを処理するために使用されます。この場合、String 入力を double に変換しようとしています。入力が有効な数値でない場合(例えば、"hello")、NumberFormatException が発生し、catch ブロック内のコードが実行されます。
  • double number = Double.parseDouble(input);:これが変換の重要な部分です。Double.parseDouble()Double クラスの静的メソッドで、Stringdouble 値に変換しようとします。
  • finally { scanner.close(); }finally ブロックは、例外が発生したかどうかに関係なく、scanner.close() メソッドが呼び出され、Scanner が使用しているシステムリソースが解放されることを保証します。

IntegerCheck.java ファイルを保存します。

次に、~/project ディレクトリのターミナルからプログラムをコンパイルして実行します。

javac IntegerCheck.java
java IntegerCheck

プログラムは、入力を待機するようになります。

整数(例えば 42)を入力して Enter キーを押してみましょう。出力は次のようになるはずです。

Enter a number: 42
The input '42' represents an integer.

プログラムを再度実行し、非整数の数値(例えば 3.14)を入力して Enter キーを押します。出力は次のようになるはずです。

Enter a number: 3.14
The input '3.14' does not represent an integer.

プログラムをもう一度実行し、数値ではないもの(例えば test)を入力して Enter キーを押します。出力は次のようになるはずです。

Enter a number: test
Invalid input: 'test' is not a valid number.

これは、ユーザー入力を String として扱い、それを数値型に変換してから Math.floor() チェックを適用し、同時に無効な入力による潜在的なエラーを処理する方法を示しています。

まとめ

この実験では、Java で Math.floor() メソッドを使用して数値が整数かどうかをチェックする方法を学びました。整数の場合、Math.floor() は同じ値を返し、非整数の場合、より小さい整数を返すという概念を探りました。このロジックを Java プログラムに実装し、元の数値と Math.floor() の結果を比較して、それが整数かどうかを判断しました。