Java - Numbersクラス

こんにちは、Javaプログラマー志願者の皆さん!今日は、Javaの数の魔法の世界に飛び込んでいきます。プログラミングが初めての方でも心配しないでください。基本的な部分から始めて、少しずつ進んでいきます。このチュートリアルの最後まで来ると、プロのように数を使いこなすことができるようになる予定です!

Java - Number

Java Numbersの紹介

Javaでは、数は単なる値ではありません。それらは、スーパーパワーを持つオブジェクトです!Javaは、異なるタイプの数を処理するためのいくつかのクラスを提供しています。これらのクラスは、すべてのJavaプログラムに自動的にインポートされるjava.langパッケージの一部です。

Numberクラスの階層

まず、Numberクラスの階層を鳥瞰図で見てみましょう:

Number (抽象クラス)
|
+-------+-------+
|       |       |
Integer  Float  Double
|
Byte

Numberクラスは、すべての数値ラッパークラスのスーパークラスです。これは抽象クラスであり、Numberオブジェクトを直接作成することはできませんが、サブクラスを使用することができます。

ラッパークラス

Javaは、各プリミティブ数値型に対するラッパークラスを提供します。これらのクラスは、プリミティブ値をオブジェクトに「ラップ」して、追加の機能を提供します。以下は、最も一般的に使用される数値ラッパークラスの表です:

プリミティブ型 ラッパークラス
byte Byte
short Short
int Integer
long Long
float Float
double Double

数値オブジェクトの作成

いくつかの数値オブジェクトを作成して、どのように動作するかを見てみましょう:

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

この例では、異なる数値型のオブジェクトを作成しています。newキーワードに続けてラッパークラスのコンストラクタを使用することに注意してください。

しかし、まだ簡単な方法があります!Javaは、自動boxingを提供しており、プリミティブ型を自動的にラッパーオブジェクトに変換します:

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

それは素晴らしいですね?Javaは背景でラッピングを行ってくれます!

一般的な数値メソッド

数値オブジェクトをお持ちできたので、提供されている便利なメソッドをいくつか探ってみましょう:

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()

このメソッドは、2つの数値オブジェクトを比較します:

Integer num1 = 42;
Integer num2 = 100;
int result = num1.compareTo(num2);
System.out.println(result); // 出力: -1

compareTo()メソッドは以下のように返します:

  • 最初の数が2つ目の数よりも小さい場合は負の値
  • 等しい場合は0
  • 最初の数が2つ目の数よりも大きい場合は正の値

4. equals()

このメソッドは、2つの数値オブジェクトが等しいかどうかを確認します:

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("Welcome to the Number Guessing Game!");
System.out.println("I'm thinking of a number between 1 and 100.");

do {
System.out.print("Enter your guess: ");
guess = scanner.nextInt();
attempts++;

if (guess.compareTo(secretNumber) < 0) {
System.out.println("Too low! Try again.");
} else if (guess.compareTo(secretNumber) > 0) {
System.out.println("Too high! Try again.");
} else {
System.out.println("Congratulations! You guessed the number in " + attempts + " attempts!");
}
} while (!guess.equals(secretNumber));

scanner.close();
}
}

このコードで何が起こっているのかを分解してみましょう:

  1. Randomオブジェクトを作成して、1から100までのランダムな数を生成します。
  2. Scannerを使用してユーザーの入力を読み取ります。
  3. 正解の数が当てられるまで繰り返し質問するためにdo-whileループを使用します。
  4. compareTo()を使用して、推測が低すぎるか高すぎるかを確認します。
  5. equals()を使用して、推測が正しいかどうかを確認します。

このゲームは、数値オブジェクトとそのメソッドを実際のアプリケーションでどのように使用できるかを示しています。それは単に数を保存するだけでなく、意味深い方法でそれらを操作および比較することができます。

結論

JavaのNumberクラスができることについては、まだ表面をたたいているだけです。Javaの旅を続ける中で、さらに強力な機能とメソッドを発見することになります。練習が実践を完成させることを忘れず、これらの概念を自分のプロジェクトで実験してみてください。

コーディングを続け、学び続け、最も重要なのは、Javaの数を楽しんでください!

Credits: Image by storyset