Java - Класс Numbers

Привет, мечтающие программисты на Java! Сегодня мы погружаемся в увлекательный мир чисел в Java. Не волнуйтесь, если вы новичок в программировании; мы начнем с основ и постепенно будем углубляться. К концу этого урока вы сможете манипулировать числами как профи!

Java - Number

Введение в Java Numbers

В Java числа не просто значения; это объекты с суперсилами! Java предоставляет несколько классов для обработки различных типов чисел. Эти классы являются частью пакета java.lang, который автоматически импортируется в каждую программу на Java.

Иерархия класса Number

Давайте начнем с общего взгляда на иерархию класса Number:

Number (абстрактный)
|
+-------+-------+
|       |       |
Integer  Float  Double
|
Byte

Класс Number является суперклассом всех классов-оберток для числовых типов. Он является абстрактным, что означает, что вы не можете создать объект Number напрямую, но вы можете использовать его подклассы.

Классы-обертки

Java предоставляет классы-обертки для каждого примитивного числового типа. Эти классы "оборачивают" примитивные значения в объекты, добавляя им дополнительную функциональность. Вот таблица наиболее часто используемых числовых классов-оберток:

Примитивный тип Класс-обертка
byte Byte
short Short
int Integer
long Long
float Float
double Double

Создание объектов Number

Давайте создадим несколько объектов чисел и посмотрим, как они работают:

Integer intObj = new Integer(42);
Double doubleObj = new Double(3.14159);
Float floatObj = new Float(2.5f);

В этом примере мы создаем объекты различных типов чисел. Обратите внимание, как мы используем ключевое слово new, следуемое конструктором класса-обертки.

Но подождите, есть проще! Java предоставляет автобоксинг, который автоматически преобразует примитивы в их объекты-обертки:

Integer intObj = 42;
Double doubleObj = 3.14159;
Float floatObj = 2.5f;

Не замечательно? Java делает обертку для нас за кулисами!

Общие методы Number

Теперь, когда у нас есть наши объекты чисел, давайте рассмотрим некоторые полезные методы, которые они предоставляют:

1. valueOf()

Метод valueOf() является удобным способом создания объектов чисел:

Integer intObj = Integer.valueOf(42);
Double doubleObj = Double.valueOf("3.14159");

Этот метод часто предпочитается использованию конструкторов, потому что может повторно использовать кэшированные объекты для лучшей производительности.

2. xxxValue()

Эти методы преобразуют объект числа в его примитивный тип:

Integer intObj = 42;
int intValue = intObj.intValue();
double doubleValue = intObj.doubleValue();

Здесь intValue() возвращает значение int, а doubleValue() преобразует его в double.

3. compareTo()

Этот метод сравнивает два объекта чисел:

Integer num1 = 42;
Integer num2 = 100;
int result = num1.compareTo(num2);
System.out.println(result); // Выводит: -1

Метод compareTo() возвращает:

  • Отрицательное значение, если первое число меньше второго
  • Ноль, если они равны
  • Положительное значение, если первое число больше второго

4. equals()

Этот метод проверяет, равны ли два объекта чисел:

Integer num1 = 42;
Integer num2 = 42;
boolean areEqual = num1.equals(num2);
System.out.println(areEqual); // Выводит: true

Помните, equals() сравнивает значения, а не ссылки на объекты!

Забава с числами: мини-проект

Поместим наши новые знания в использование с мини-проектом. Создадим простую игру в угадывание числа:

import java.util.Random;
import java.util.Scanner;

public class NumberGuessingGame {
public static void main(String[] args) {
Random random = new Random();
Integer secretNumber = random.nextInt(100) + 1;
Scanner scanner = new Scanner(System.in);
Integer guess;
int attempts = 0;

System.out.println("Добро пожаловать в игру 'Угадай число'!");
System.out.println("Я думаю о числе от 1 до 100.");

do {
System.out.print("Введите ваше предположение: ");
guess = scanner.nextInt();
attempts++;

if (guess.compareTo(secretNumber) < 0) {
System.out.println("Слишком мало! Попробуйте еще раз.");
} else if (guess.compareTo(secretNumber) > 0) {
System.out.println("Слишком много! Попробуйте еще раз.");
} else {
System.out.println("Поздравляем! Вы угадали число за " + attempts + " попыток!");
}
} while (!guess.equals(secretNumber));

scanner.close();
}
}

Разберем, что происходит в этом коде:

  1. Мы создаем объект Random, чтобы сгенерировать случайное число от 1 до 100.
  2. Мы используем Scanner, чтобы читать пользовательский ввод.
  3. Мы используем цикл do-while, чтобы продолжать спрашивать предположения до тех пор, пока не будет угадано правильное число.
  4. Мы используем compareTo(), чтобы проверить, слишком мало или слишком много введено число.
  5. Мы используем equals(), чтобы проверить, правильно ли угадано число.

Эта игра демонстрирует, как мы можем использовать объекты Number и их методы в реальном приложении. Это не просто хранение чисел; это их манипуляция и сравнение в значимых контекстах.

Заключение

Мы лишь коснулись поверхности того, что классы Number в Java могут делать. Когда вы продолжите свое погружение в мир Java, вы обнаружите еще более мощные функции и методы. Помните, практика совершенствует мастера, поэтому не стесняйтесь экспериментировать с этими концепциями в своих проектах.

Продолжайте программировать, учиться и, что самое важное, наслаждайтесь числами в Java!

Credits: Image by storyset