lab. 1 .

lab. 1 .

CHIARIMENTI

  • ho frainteso l'uso di nextLine(), ogni volta che la menziono, passo a prescindere ad una nuova riga, il metodo agisce, non è una variabile quindi se voglio fissare una riga in particolare, devo assegnarla ad una stringa
  • non puoi assegnare un valore ad un oggetto di tipo scanner, all’infuori si uno scanner (ovviamente)
  • La dichiarazione e la concatenazione devono essere fatte in due passaggi distinti.
    • String seqString += s.nextInt() + " ";
  • Costrutto for each molto interessante
  • quando utilizzi il metodo .next() della classe Scanner e non ci sono più elementi da leggere (come parole, numeri, ecc.) nel flusso di input, si verifica un'eccezione di tipo NoSuchElementException. Questo accade perché il metodo next() si aspetta di trovare un token successivo, e se non ce n'è, non può restituire nulla.

SCANNER

notion image

Differenze

  • Tipo di Lettura:
    • Primo Esempio: legge un'intera riga e poi un intero, richiedendo che l'input sia fornito in modo specifico.
    • Secondo Esempio: legge e stampa parole in modo continuo, senza restrizioni sul formato dell'input (fino a quando ci sono parole).
  • Struttura:
    • Primo Esempio: non è in un ciclo; si interrompe dopo la lettura di nome e anni.
    • Secondo Esempio: utilizza un ciclo per elaborare l'input fino a quando non ci sono più parole disponibili.

ACCESSO

  • String nome = myObj . nextLine () ;
    • il metodo nextLine() legge tutta la riga dallo Scanner, fino al carattere di fine riga (\n).
      • Differenze tra next() e nextLine():

      • next(): legge una parola (ossia una sequenza di caratteri che termina con uno spazio, tab o fine riga).
      • nextLine(): legge l'intera riga di input, inclusi spazi o caratteri speciali, fino al carattere di fine riga.
  • int anni = myObj . nextInt () ;
    • Comportamento di nextInt():

    • Attesa di input: Quando nextInt() viene chiamato, il programma attende che l'utente inserisca un numero intero. L'input deve essere un valore numerico, e non deve contenere caratteri non numerici (eccetto per il segno meno per i numeri negativi).
    • Fine della lettura: nextInt() legge solo il valore numerico fino a quando incontra uno spazio, un carattere di fine riga (\n) o un carattere che non fa parte di un numero. Quindi, se l'utente inserisce "25" seguito da un invio, nextInt() catturerà il numero 25.
      • in tal caso si chiama token pk è parte di una stringa unica ma è sintatticamente separato da spazi (una parola)
    • Tipo di dato: Il valore letto viene convertito automaticamente dal formato di stringa dell'input all'intero (int), e poi assegnato alla variabile anni.

ITERATORE

In Java, ci sono due coppie di metodi che vengono spesso utilizzate insieme nella classe Scanner:
  1. hasNext() e next()
  1. hasNextLine() e nextLine()

Differenze principali:

  1. hasNext() e next()
      • hasNext(): Verifica se c'è un altro "token" disponibile nell'input. Un token può essere una parola, un numero o qualsiasi altro frammento di testo separato da spazi bianchi (spazi, tab, newline).
      • next(): Legge il prossimo token (frammento di testo) dall'input.
  1. hasNextLine() e nextLine()
      • hasNextLine(): Verifica se c'è un'altra intera linea di input disponibile.
      • nextLine(): Legge l'intera riga successiva di input, inclusi spazi bianchi e caratteri speciali fino al carattere di fine linea (\n).

CAST IMPLICITO ED ESPLICITO

In Java, il cast esplicito è utilizzato quando è necessario convertire un tipo di dati in un altro tipo in modo che non possa essere fatto automaticamente (cioè, senza l'intervento del programmatore). Ci sono casi in cui il cast esplicito è obbligatorio, e altri in cui il cast implicito può avvenire senza bisogno di scrivere il cast. Ecco come funziona in dettaglio:

Cast Esplicito vs Implicito

  1. Cast Esplicito:
      • Deve essere utilizzato quando si sta convertendo un tipo di dati che può comportare una perdita di informazioni, come ad esempio da double a int. In questi casi, il compilatore non eseguirà automaticamente la conversione, poiché potrebbe portare a risultati inattesi.
      • Esempio:
        • double d = 9.78; int num = (int) d; // Cast esplicito, poiché si sta convertendo un double in un int
      • CAST da int a char è esplicito pk se l’intero nn rientra nella tabella ASCII perdo dati
  1. Cast Implicito:
      • Può avvenire automaticamente quando si passa da un tipo di dati "più piccolo" a un tipo di dati "più grande". Ad esempio, il passaggio da int a double è un'operazione sicura, poiché un double può rappresentare tutti i valori di un int.
      • Esempio:
        • int num = 5; double d = num; // Cast implicito, l'int viene automaticamente convertito in double

Esempi di Cast Esplicito e Implicito

Esempio di Cast Esplicito

Quando converti un tipo che potrebbe perdere dati, devi usare il cast esplicito:
double pi = 3.14; int intPi = (int) pi; // Esplicito, poiché si perde la parte decimale

Esempio di Cast Implicito

Quando la conversione non comporta perdita di dati, puoi usare il cast implicito:
int num = 10; double d = num; // Implicito, sicuro perché double può contenere int senza perdita

Cast tra Oggetti

Nel caso del casting tra oggetti, la situazione è simile:
  • Cast Esplicito: Devi usarlo quando converti tra classi nella gerarchia di ereditarietà.
    • class Animal {} class Dog extends Animal {} Animal animal = new Dog(); Dog dog = (Dog) animal; // Cast esplicito
  • Cast Implicito: Puoi passare da una sottoclasse a una superclasse senza il cast esplicito.
    • Dog dog = new Dog(); Animal animal = dog; // Cast implicito

Conclusione

In sintesi, il cast esplicito è necessario in situazioni dove il compilatore non può determinare se la conversione è sicura e può comportare perdita di dati. Il cast implicito, d'altra parte, avviene automaticamente quando si passa da un tipo di dati più piccolo a uno più grande o quando si passa da una sottoclasse a una superclasse. È importante sapere quando utilizzare ciascun tipo di cast per evitare errori nel codice.
 
 
 
 
 
 
 
 
 

Dichiarazione e Inizializzazione di un Array

  • Dichiarazione: specifichi il tipo di dati seguito da [].
    • java Copia codice int[] array; // Dichiarazione di un array di interi
  • Inizializzazione: puoi creare l'array usando new specificando la dimensione.Oppure puoi inizializzarlo direttamente con i valori:
    • java Copia codice array = new int[5]; // Inizializzazione di un array di 5 interi
      java Copia codice int[] array = {1, 2, 3, 4, 5}; // Array con 5 elementi