Введение
В этом практическом занятии (лабораторной работе) вы научитесь определять, является ли число типом double в Java. Мы рассмотрим различные методы, начиная с проверки, является ли объект экземпляром оберточного класса Double с использованием оператора instanceof.
После этого вы узнаете, как преобразовать строку в число типа double и обработать возможные ошибки. Наконец, мы рассмотрим, как различать типы Double и Integer, чтобы убедиться, что вы работаете с правильным числовым представлением.
Проверка экземпляра класса Double
На этом этапе мы рассмотрим класс Double в Java и научимся проверять, является ли объект экземпляром этого класса. В Java примитивные типы данных, такие как double, имеют соответствующие оберточные классы, например, Double. Класс Double предоставляет полезные методы для работы с числами с двойной точностью.
Сначала создадим новый Java-файл с именем DoubleCheck.java в каталоге ~/project. Это можно сделать с помощью проводника файлов WebIDE слева. Щелкните правой кнопкой мыши в каталоге ~/project, выберите "Новый файл" и введите DoubleCheck.java.
Теперь откройте файл DoubleCheck.java в редакторе и добавьте следующий код:
public class DoubleCheck {
public static void main(String[] args) {
// Declare a primitive double variable
double primitiveDouble = 123.45;
// Declare a Double object
Double doubleObject = 67.89;
// Declare an Integer object
Integer integerObject = 100;
// Check if primitiveDouble is an instance of Double (This will not work directly)
// System.out.println("Is primitiveDouble an instance of Double? " + (primitiveDouble instanceof Double)); // This line would cause a compile error
// Check if doubleObject is an instance of Double
System.out.println("Is doubleObject an instance of Double? " + (doubleObject instanceof Double));
// Check if integerObject is an instance of Double
System.out.println("Is integerObject an instance of Double? " + (integerObject instanceof Double));
}
}
В этом коде:
- Мы объявляем примитивную переменную типа
doubleс именемprimitiveDouble. - Мы объявляем объект типа
Doubleс именемdoubleObject. - Мы объявляем объект типа
Integerс именемintegerObjectдля сравнения. - Мы используем оператор
instanceofдля проверки, являются лиdoubleObjectиintegerObjectэкземплярами классаDouble. - Обратите внимание, что оператор
instanceofнельзя использовать напрямую с примитивными типами, такими какdouble.
Сохраните файл DoubleCheck.java.
Теперь скомпилируем и запустим программу. Откройте терминал внизу WebIDE. Убедитесь, что вы находитесь в каталоге ~/project.
Скомпилируйте код с помощью javac:
javac DoubleCheck.java
Если нет ошибок компиляции, запустите скомпилированный код с помощью java:
java DoubleCheck
Вы должны увидеть вывод, похожий на следующий:
Is doubleObject an instance of Double? true
Is integerObject an instance of Double? false
Этот вывод подтверждает, что doubleObject является экземпляром класса Double, в то время как integerObject - нет. Это демонстрирует, как использовать оператор instanceof для проверки типа объекта в Java.
Преобразование строки в тип double
На этом этапе мы научимся преобразовывать строку (String), представляющую число, в значение типа double в Java. Это распространенная задача, когда числовой ввод поступает в виде текста, например, от пользователя или при чтении из файла. Класс Double предоставляет статический метод parseDouble(), специально предназначенный для этой цели.
Создадим новый Java-файл с именем StringtoDouble.java в каталоге ~/project. Используйте проводник файлов WebIDE для создания этого файла.
Откройте файл StringtoDouble.java и добавьте следующий код:
public class StringtoDouble {
public static void main(String[] args) {
// A string representing a double value
String doubleString = "987.65";
// Another string representing a double value
String anotherDoubleString = "3.14159";
// A string that is not a valid double
String invalidDoubleString = "hello";
// Parse the strings to double values
try {
double parsedDouble1 = Double.parseDouble(doubleString);
double parsedDouble2 = Double.parseDouble(anotherDoubleString);
System.out.println("Parsed double from \"" + doubleString + "\": " + parsedDouble1);
System.out.println("Parsed double from \"" + anotherDoubleString + "\": " + parsedDouble2);
// Attempt to parse an invalid string (This will cause an error)
// double parsedDouble3 = Double.parseDouble(invalidDoubleString);
// System.out.println("Parsed double from \"" + invalidDoubleString + "\": " + parsedDouble3);
} catch (NumberFormatException e) {
System.out.println("Error parsing string: " + e.getMessage());
}
}
}
В этом коде:
- У нас есть две строки,
doubleStringиanotherDoubleString, которые содержат корректные представления чисел типа double. - Также есть строка
invalidDoubleString, которая не представляет собой корректное число. - Мы используем метод
Double.parseDouble()для преобразования корректных строк в примитивные значения типаdouble. - Мы обернули код преобразования в блок
try-catch. Это важно, потому что если строку нельзя преобразовать в корректное число типа double (как в случае сinvalidDoubleString), методparseDouble()выбросит исключениеNumberFormatException. Блокcatchобрабатывает эту ошибку корректно.
Сохраните файл StringtoDouble.java.
Теперь скомпилируем и запустим программу. Откройте терминал и убедитесь, что вы находитесь в каталоге ~/project.
Скомпилируйте код:
javac StringtoDouble.java
Запустите скомпилированный код:
java StringtoDouble
Вы должны увидеть вывод, похожий на следующий:
Parsed double from "987.65": 987.65
Parsed double from "3.14159": 3.14159
Если вы раскомментируете строки, которые пытаются преобразовать invalidDoubleString, и запустите код снова, вы увидите сообщение об ошибке из блока catch, что демонстрирует, как программа обрабатывает некорректный ввод.
На этом этапе показано, как преобразовать строковые представления чисел в фактические значения типа double, что является важным навыком для обработки ввода в ваших Java-программах.
Различие между типами double и int
На этом этапе мы рассмотрим, как различать значения типа double и int (целые числа) в Java, особенно когда дело касается чисел, которые могут казаться похожими. Тип double может представлять как числа с десятичной частью, так и целые числа, в то время как тип int может представлять только целые числа. Понимание этой разницы является важным для выбора правильного типа данных и выполнения точных вычислений.
Создадим новый Java-файл с именем NumberTypes.java в каталоге ~/project с помощью проводника файлов WebIDE.
Откройте файл NumberTypes.java и добавьте следующий код:
public class NumberTypes {
public static void main(String[] args) {
// An integer variable
int integerValue = 10;
// A double variable representing a whole number
double doubleValueWhole = 20.0;
// A double variable representing a number with a decimal part
double doubleValueDecimal = 30.5;
// Print the values and their types (implicitly)
System.out.println("Integer value: " + integerValue);
System.out.println("Double value (whole): " + doubleValueWhole);
System.out.println("Double value (decimal): " + doubleValueDecimal);
// Check the type using instanceof (for wrapper classes)
Integer integerObject = 100;
Double doubleObject = 200.0;
System.out.println("Is integerObject an instance of Integer? " + (integerObject instanceof Integer));
System.out.println("Is doubleObject an instance of Double? " + (doubleObject instanceof Double));
System.out.println("Is integerObject an instance of Double? " + (integerObject instanceof Double));
System.out.println("Is doubleObject an instance of Integer? " + (doubleObject instanceof Integer));
// Demonstrate potential issues with comparing double and int
System.out.println("Is integerValue equal to doubleValueWhole? " + (integerValue == doubleValueWhole)); // This comparison works due to type promotion
// System.out.println("Is integerValue equal to doubleValueDecimal? " + (integerValue == doubleValueDecimal)); // This would be false
}
}
В этом коде:
- Мы объявляем переменную типа
intс именемintegerValue. - Мы объявляем две переменные типа
double, одну представляющую целое число (doubleValueWhole), а другую - число с десятичной частью (doubleValueDecimal). - Мы выводим эти значения, чтобы увидеть их представление.
- Мы используем оператор
instanceofс оберткамиIntegerиDoubleдля явной проверки типов объектов, аналогично тому, как мы делали на первом этапе. - Мы также показываем сравнение между значением типа
intиdouble. Java выполняет автоматическое преобразование типов (type promotion), преобразуяintвdoubleперед сравнением, поэтому выражениеintegerValue == doubleValueWholeвозвращаетtrue.
Сохраните файл NumberTypes.java.
Теперь скомпилируем и запустим программу. Откройте терминал и убедитесь, что вы находитесь в каталоге ~/project.
Скомпилируйте код:
javac NumberTypes.java
Запустите скомпилированный код:
java NumberTypes
Вы должны увидеть вывод, похожий на следующий:
Integer value: 10
Double value (whole): 20.0
Double value (decimal): 30.5
Is integerObject an instance of Integer? true
Is doubleObject an instance of Double? true
Is integerObject an instance of Double? false
Is doubleObject an instance of Integer? false
Is integerValue equal to doubleValueWhole? true
Этот вывод помогает проиллюстрировать разницу между тем, как хранятся и представляются значения типа int и double, а также как можно использовать оператор instanceof с их обертками для проверки типов. Хотя переменная типа double может хранить целое число, по своей сути это все еще тип с плавающей точкой, отличный от целочисленного типа.
Резюме
В этом практическом занятии (лабораторной работе) мы научились проверять, является ли число типом Double в Java. Мы начали с изучения оберточного класса Double и использования оператора instanceof для определения, является ли объект экземпляром класса Double. Мы заметили, что оператор instanceof работает с объектами класса Double, но не напрямую с примитивными типами double.



