Как проверить, является ли число целым в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии (LabEx) вы научитесь определять, является ли число целым в Java. Мы рассмотрим различные методы, начиная с метода Math.floor() для проверки на целочисленные значения. Вы будете практиковаться с типами данных double и float, чтобы понять, как этот метод работает с разными представлениями чисел с плавающей запятой. В конце мы рассмотрим, как обрабатывать строковые входные данные и преобразовывать их в числовые типы перед выполнением проверки на целое число. Это лабораторное занятие предоставит вам практические навыки для валидации числовых данных в ваших 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(). Метод Math.floor() в Java возвращает наибольшее целое число, которое меньше или равно аргументу. Например, Math.floor(5.9) вернет 5.0, а Math.floor(5.0) вернет 5.0.

Мы можем использовать это свойство для проверки, является ли число целым. Если число является целым, применение к нему метода Math.floor() даст то же самое число. Если число имеет дробную часть, метод Math.floor() вернет меньшее целое число.

Создадим новый Java-файл, чтобы потренироваться в использовании этого метода. Откройте WebIDE и создайте новый файл с именем IntegerCheck.java в директории ~/project.

Теперь скопируйте и вставьте следующий код в файл 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;: Мы объявляем две переменные типа double, одна из которых представляет целое число, а другая - нецелое число.
  • 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

В предыдущем шаге мы использовали метод Math.floor() с значениями типа double. В Java есть разные типы данных для представления чисел, в том числе double и float. Оба типа используются для чисел с плавающей запятой (чисел с десятичной точкой), но double обеспечивает большую точность, чем float.

Давайте модифицируем нашу программу IntegerCheck.java, чтобы протестировать работу метода Math.floor() с обоими типами: double и float.

Откройте файл IntegerCheck.java в редакторе WebIDE.

Замените существующий код следующим:

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.");
        }
    }
}

Обратите внимание на суффикс f после литералов типа float (30.0f, 30.25f). В Java это необходимо, чтобы указать, что число имеет тип float, а не double (по умолчанию литералы с плавающей запятой имеют тип double).

Также обратите внимание, что метод 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. Чтобы выполнить числовые проверки, например, определить, представляет ли ввод целое число, сначала нужно преобразовать String в числовой тип, например, double.

В этом шаге мы модифицируем нашу программу, чтобы она принимала ввод пользователя в виде String, преобразовывала его в double, а затем использовала Math.floor() для проверки, представляет ли исходный ввод целое число.

Откройте файл IntegerCheck.java в редакторе WebIDE.

Замените существующий код следующим:

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);: Это создает объект Scanner, который читает ввод из стандартного потока ввода (System.in), который обычно представляет клавиатуру.
  • System.out.print("Enter a number: ");: Эта строка приглашает пользователя ввести число.
  • String input = scanner.nextLine();: Эта строка считывает всю введенную пользователем строку ввода как String и сохраняет ее в переменной input.
  • try { ... } catch (NumberFormatException e) { ... }: Это блок try-catch. Он используется для обработки потенциальных ошибок. В данном случае мы пытаемся преобразовать строковый ввод в double. Если ввод не является допустимым числом (например, "hello"), возникнет исключение NumberFormatException, и код внутри блока catch будет выполнен.
  • double number = Double.parseDouble(input);: Это важная часть преобразования. Double.parseDouble() - это статический метод класса Double, который пытается преобразовать String в значение типа double.
  • 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() для определения, является ли оно целым.