Java - La Classe Numbers

Ciao, aspiranti programmatori Java! Oggi, immergeremo nel fascinante mondo dei numeri in Java. Non preoccupatevi se siete nuovi alla programmazione; inizieremo dalle basi e lavoreremo fino ad avanzare. Alla fine di questo tutorial, sarai in grado di manipolare i numeri come un professionista!

Java - Number

Introduzione ai Numeri in Java

In Java, i numeri non sono solo valori semplici; sono oggetti con superpoteri! Java fornisce diverse classi per gestire diversi tipi di numeri. Queste classi fanno parte del pacchetto java.lang, che viene importato automaticamente in ogni programma Java.

Hierarchia della Classe Number

Iniziamo con una visione d'insieme dell'hierarchia della classe Number:

Number (astratto)
|
+-------+-------+
|       |       |
Integer  Float  Double
|
Byte

La classe Number è la superclasse di tutte le classi wrapper numeriche. È astratta, il che significa che non puoi creare direttamente un oggetto Number, ma puoi utilizzare le sue sottoclassi.

Classi Wrapper

Java fornisce classi wrapper per ciascun tipo primitivo numerico. Queste classi "incapsulano" i valori primitivi in oggetti, dandogli funzionalità aggiuntive. Ecco una tabella delle classi wrapper numeriche più comunemente utilizzate:

Tipo Primitivo Classe Wrapper
byte Byte
short Short
int Integer
long Long
float Float
double Double

Creazione di Oggetti Number

Creiamo alcuni oggetti numerici e vediamo come funzionano:

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

In questo esempio, stiamo creando oggetti di diversi tipi di numeri. Nota come utilizziamo la parola chiave new seguita dal costruttore della classe wrapper.

Ma aspetta, c'è un modo più semplice! Java fornisce l'autoboxing, che converte automaticamente i primitivi nei loro oggetti wrapper:

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

Non è carino? Java fa l'incapsulamento per noi dietro le quinte!

Metodi Comuni dei Numeri

Ora che abbiamo i nostri oggetti numerici, esploriamo alcuni dei metodi utili che forniscono:

1. valueOf()

Il metodo valueOf() è un modo comodo per creare oggetti numerici:

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

Questo metodo è spesso preferito rispetto all'uso dei costruttori perché può riutilizzare oggetti memorizzati nella cache per una migliore performance.

2. xxxValue()

Questi metodi convertono l'oggetto numero al suo tipo primitivo:

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

Qui, intValue() restituisce il valore int, mentre doubleValue() lo converte in un double.

3. compareTo()

Questo metodo confronta due oggetti numerici:

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

Il metodo compareTo() restituisce:

  • Un valore negativo se il primo numero è minore del secondo
  • Zero se sono uguali
  • Un valore positivo se il primo numero è maggiore del secondo

4. equals()

Questo metodo verifica se due oggetti numerici sono uguali:

Integer num1 = 42;
Integer num2 = 42;
boolean areEqual = num1.equals(num2);
System.out.println(areEqual); // Outputs: true

Ricorda, equals() confronta i valori, non i riferimenti oggetto!

Divertiti con i Numeri: Un Mini-Progetto

Mettiamo la nostra nuova conoscenza in uso con un piccolo progetto. Creeremo un semplice gioco di indovinare il numero:

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("Benvenuto nel Gioco di Indovinare il Numero!");
System.out.println("Sto pensando a un numero tra 1 e 100.");

do {
System.out.print("Inserisci la tua previsione: ");
guess = scanner.nextInt();
attempts++;

if (guess.compareTo(secretNumber) < 0) {
System.out.println("Troppo basso! Prova di nuovo.");
} else if (guess.compareTo(secretNumber) > 0) {
System.out.println("Troppo alto! Prova di nuovo.");
} else {
System.out.println("Congratulations! Hai indovinato il numero in " + attempts + " tentativi!");
}
} while (!guess.equals(secretNumber));

scanner.close();
}
}

Ecco cosa succede in questo codice:

  1. Creiamo un oggetto Random per generare un numero casuale tra 1 e 100.
  2. Utilizziamo uno Scanner per leggere l'input dell'utente.
  3. Utilizziamo un ciclo do-while per continuare a chiedere previsioni fino a che il numero corretto non viene indovinato.
  4. Utilizziamo compareTo() per controllare se la previsione è troppo bassa o troppo alta.
  5. Utilizziamo equals() per controllare se la previsione è corretta.

Questo gioco dimostra come possiamo utilizzare oggetti Number e i loro metodi in un'applicazione reale. Non si tratta solo di memorizzare numeri, ma di manipolare e confrontare in modi significativi.

Conclusione

Abbiamo solo sfiorato la superficie di ciò che possono fare le classi Number di Java. Man mano che continui il tuo viaggio con Java, scoprirai funzionalità e metodi ancora più potenti. Ricorda, la pratica rende perfetto, quindi non esitare a sperimentare questi concetti nei tuoi progetti.

continua a programmare, a imparare, e, più importante, divertiti con i numeri di Java!

Credits: Image by storyset