Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-10-2008, 19:44   #1
Jim Fox
Member
 
Iscritto dal: Aug 2008
Messaggi: 118
[JAVA] Qualcuno sa spiegarmi questo errore in fase di compilazione?

Come alcuni di voi sapranno, da poche settimane mi sono avvicinato alla programmazione ed a JAVA.
Ed ammetto di trovare qualche difficolta a capire tutti gli errori che mi capitano senza nessuno che me li spieghi.

Il libro che sto seguendo, mi ha chiesto come esercizio, di costruire un programma "Letter" che come risultato mostri un testo, come questo:

Ciao destinatario:
riga vuota
prima riga del contenuto della lettera
seconda riga del contenuto della lettera
riga vuota
Saluti,
riga vuota
mittente


E di utilizzare il metodo concat per costruire una stringa più lunga a partire da due stringhe più corte ed utlizzare la stringa speciale \n per andare a capo.

Vi anticipo che alla fine sono riuscito a far funzionare il programma, ma ci ho messo parecchio per capire il seguente errore in fase di compilazione:
Codice:
Exception in thread "main" java.lang.NullPointerException
        at Letter.<init>(Letter.java:19)
        at LetterTester.main(LetterTester.java:13)
Alla fine ho capito che il problema stava nella dichiarazione della variabile:
private String testo;
che invece doveva essere dichiarata:
private String testo = "";

E' forse perchè in quel modo ho assegnato un valore nullo a testo? Qualcuno sa spiegarmi x bene il motivo?

ps: vi inserisco la parte del programma incriminata:

Codice:
public class Letter {
    private String mittente;
    private String destinatario;
    private String testo = "";

    /* costruisco una lettera con nome mittente e destinatario */
    public Letter(String from, String to) {
        mittente = from;
        destinatario = to; 
        testo = testo.concat("Ciao ").concat(destinatario).concat(":").concat("\n").concat("\n");
    }

    /* aggiungo una riga */
    public void addLine(String line) {
        testo = testo.concat(line).concat("\n");
    }

    /* restituisce il testo della lettera */
    public String getText() {
        testo = testo.concat("Saluti, ").concat("\n").concat("\n").concat(mittente);
        return testo;
    }
}
__________________
I sogni sono risposte a domande che non siamo ancora in grado di fare!!!
 MacBook Pro 13,3'' 2.53GHz |  Mac Mini 2.26GHz
 iPhone 3GS 16GB | Nero |  iPod Nano 5G 8GB | Red |  LED Cinema Display 24''
Jim Fox è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 20:31   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Jim Fox Guarda i messaggi
E' forse perchè in quel modo ho assegnato un valore nullo a testo? Qualcuno sa spiegarmi x bene il motivo?
Quando viene istanziato un oggetto, tutte le variabili di istanza vengono innanzitutto subito inizializzate al valore di "default" (0 per valori numerici, false per boolean, null per i reference).
Se poi la variabile di istanza ha una inizializzazione esplicita, allora verrà fatto l'assegnamento appena dopo che il costruttore della super-classe è stato eseguito.

Quote:
Originariamente inviato da Jim Fox Guarda i messaggi
ps: vi inserisco la parte del programma incriminata:
Il codice è corretto, anche se:

a) La variabile di istanza 'destinatario' la usi solo nel costruttore. Quindi potevi anche non definire tale variabile di istanza.

b) Potevi anche non inizializzare testo = "", bastava fare nel costruttore:
testo = "Ciao ".concat(destinatario).concat...........


P.S.: Se ti è stato chiesto di mettere solamente "\n", va bene, non sto a discutere. Sappi comunque che la sequenza di newline dipende dalla piattaforma e quella corretta per la piattaforma la si può ricavare da una property di sistema (getProperty() di System).
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 23:00   #3
Jim Fox
Member
 
Iscritto dal: Aug 2008
Messaggi: 118
Quote:
Originariamente inviato da andbin Guarda i messaggi
a) La variabile di istanza 'destinatario' la usi solo nel costruttore. Quindi potevi anche non definire tale variabile di istanza.
E' vero grazie... Ho appena verificato il corretto funzionamento anche senza tale variabile.

Quote:
Originariamente inviato da andbin Guarda i messaggi
b) Potevi anche non inizializzare testo = "", bastava fare nel costruttore:
testo = "Ciao ".concat(destinatario).concat...........
Grazie mille anche in questo caso. Provato e tutto ok!

Quote:
Originariamente inviato da andbin Guarda i messaggi
P.S.: Se ti è stato chiesto di mettere solamente "\n", va bene, non sto a discutere. Sappi comunque che la sequenza di newline dipende dalla piattaforma e quella corretta per la piattaforma la si può ricavare da una property di sistema (getProperty() di System).
Si si, mi è stato chiesto di mettere soltanto \n, anche perché sto seguendo fedelmente il libro di Cay Horstmann "Concetti di informatica e Fondamenti di Java" e stando ancora ai primi capitoli, i concetti sono molto semplici. Pensa che è la prima volta che incontro \n, ed ora so il suo funzionamento.
__________________
I sogni sono risposte a domande che non siamo ancora in grado di fare!!!
 MacBook Pro 13,3'' 2.53GHz |  Mac Mini 2.26GHz
 iPhone 3GS 16GB | Nero |  iPod Nano 5G 8GB | Red |  LED Cinema Display 24''
Jim Fox è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
L'ESA risponde alle critiche di Jared Is...
La NASA annuncia il nuovo telescopio spa...
HONOR pubblica The Sea Between Us, un co...
L'Olanda punta su NixOS e open source pe...
OPPO Find X10 Pro Max, il flagship con t...
Gli smartphone Samsung potrebbero avere ...
GeForce Now arriverà sui Googlebo...
Opus 5.5 e GPT-6 Sol nello stesso pomeri...
Weekend Amazon, le prime 5 offerte sono ...
Mini Compressore a 21,84€: gonfia le gom...
Gemini si aggiorna, ora può conne...
Da 32 a 65 pollici: ecco le TV più...
Xiaomi Redmi Note 17 a 269€: ecco perch&...
ASUS avverte i clienti: accesso non auto...
Già record di vendite su Amazon p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v