Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Errore semplice programma

    Salve ho iniziato da poco , ho una classe che dati niome e cognome deve fare delle conversioni , minuscolo e maiuscolo e concatenarle, ecco il codice che ho scritto :

    la classe Concatena2
    codice:
    public class Concatena2 {
    	
    	private String nome;
    	private String cognome;
    	
    	public Concatena2(){
    		
    				nome ="Sconosciuto" ;
    				cognome="Sconosciuto";
    	}
    	public Concatena2(String n, String c){
    		
    				nome =   n ;
    				cognome= c ;
    	}
    	
    	
    	String nmin = nome.toLowerCase()    ;
    	String nmai = nome.toUpperCase()    ;
    	String cmin = cognome.toLowerCase() ;
    	String cmai = cognome.toUpperCase() ;
    	
    	
    	public void maimin(){
    		
    			System.out.println("Nome Maiuscolo Cognome Minuscolo : " + nmai + " " + cmin +".") ; 
    	}
    	
    	public void minmin(){
    		
    			System.out.println("Nome Minuscolo Cognome Minuscolo : " + nmin + " " + cmin +".") ; 
    	}
    	
    	public void minmai(){
    		
    			System.out.println("Nome Minuscolo Cognome Maiuscolo : " + nmin + " " + cmai +".") ; 
    	}
    	
    	public void maimai(){
    		
    			System.out.println("Nome Maiuscolo Cognome Maiuscolo : " + nmai + " " + cmai +".") ; 
    	}
    	
    	
    }
    e la classe ProvaConcatena2
    codice:
    public class ProvaConcatena2{
    	
    	public static void main (String args[]) {
    		
    		
    		Concatena2 MaiuscoleMinuscole = new Concatena2("Mario" , "Rossi") ;
    		
    		MaiuscoleMinuscole.maimin();
    		MaiuscoleMinuscole.minmin();
    		MaiuscoleMinuscole.minmai();
    		MaiuscoleMinuscole.maimai();
    		
    		
    	}
    }


    Questo l'errore :


    codice:
    Exception in thread "main" java.lang.NullPointerException
    	at Concatena2.<init>(Concatena2.java:20)
    	at ProvaConcatena2.main(ProvaConcatena2.java:8)

  2. #2
    Scusami ma queste righe
    codice:
        String nmin = nome.toLowerCase()    ;
        String nmai = nome.toUpperCase()    ;
        String cmin = cognome.toLowerCase() ;
        String cmai = cognome.toUpperCase() ;
    in quale metodo le hai incluse?
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Queste operazioni

    codice:
    	String nmin = nome.toLowerCase()    ;
    	String nmai = nome.toUpperCase()    ;
    	String cmin = cognome.toLowerCase() ;
    	String cmai = cognome.toUpperCase() ;
    sono poste fuori da ogni metodo (quindi, a livello di classe). Di conseguenza, quelle operazioni vengono eseguite prima del costruttore (in quanto sono dichiarazioni di campi di istanza + loro valorizzazione iniziale). Ovviamente, prima che venga eseguito un costruttore, le variabili di istanza di tipo oggetto sono tutte nulle e questo produce l'errore che ottieni, poichè cerchi di inizializzare la variabile "nmin" al valore di "nome" (che è nullo) in minuscolo.

    O volevi porre quelle istruzioni dentro ad un metodo o dovrai rivedere bene i concetti base della OOP.

    PS: l'errore che hai ottenuto è particolarmente chiaro:

    codice:
    Exception in thread "main" java.lang.NullPointerException
    	at Concatena2.<init>(Concatena2.java:20)
    	at ProvaConcatena2.main(ProvaConcatena2.java:8)
    significa che hai una NullPointerException (ovvero stai usando un oggetto nullo), alla riga numero 20 del file Concatena2.java


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Grazie come già scritto sono agli inizi , quindi anche sbagliare mi è utile per capire certe cose, conosco un minimo di php e forse il mio errore è stato pensre alla classe come se eseguisse il tutto sequenzialmente mentre nell oop questo non avviene....

    Ho riscritto così :

    codice:
    public class Concatena2 {
    	
    	private String nome;
    	private String cognome;
    	
    	
    	public Concatena2(String n, String c){
    		
    				nome    =   n ;
    				cognome =   c ;
    					
    	}
    	
    	
    	public void maimin(){
    			String nmin = nome.toLowerCase()    ;
    			String nmai = nome.toUpperCase()    ;
    			String cmin = cognome.toLowerCase() ;		
    			String cmai = cognome.toUpperCase()	;		
    			System.out.println("Nome Maiuscolo Cognome Minuscolo : " + nmai + " " + cmin +".") ; 
    	}
    	
    	public void minmin(){
    			String nmin = nome.toLowerCase()    ;
    			String nmai = nome.toUpperCase()    ;
    			String cmin = cognome.toLowerCase() ;		
    			String cmai = cognome.toUpperCase()	;
    
    			System.out.println("Nome Minuscolo Cognome Minuscolo : " + nmin + " " + cmin +".") ; 
    	}
    	
    	public void minmai(){
    			String nmin = nome.toLowerCase()    ;
    			String nmai = nome.toUpperCase()    ;
    			String cmin = cognome.toLowerCase() ;		
    			String cmai = cognome.toUpperCase()	;	
    		
    			System.out.println("Nome Minuscolo Cognome Maiuscolo : " + nmin + " " + cmai +".") ; 
    	}
    	
    	public void maimai(){
    			String nmin = nome.toLowerCase()    ;
    			String nmai = nome.toUpperCase()    ;
    			String cmin = cognome.toLowerCase() ;		
    			String cmai = cognome.toUpperCase()	;		
    
    		
    			System.out.println("Nome Maiuscolo Cognome Maiuscolo : " + nmai + " " + cmai +".") ; 
    	}
    	
    	
    }
    e funziona ma devo , in ogni metodo dichiarare e inizializzare le varie variabil (in ogni metodo ce ne sono 2 in + , lo sò ) . Come posso far si di scriverle una sola volta e far accedere tutti i metodi a queste variabili?

  5. #5
    basta dichiararle in testa alla classe (come hai già fatto con nome e cognome) e in questo modo riesci a far accedere le variabili a tutti i metodi della stessa classe
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  6. #6
    Sei sicuro funzioni ? tornerei ad avere lo stesso problema iniziale perchè le variabili :

    nmin
    nmai
    cmin
    cmai

    vengono inizializzate dopo che ho passato i parametri al costruttore che dopo ,tramite toLowerCase() e toUpperCase(), li trasforma....

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da pippuccio76
    Sei sicuro funzioni ?
    Direi di sì.

    tornerei ad avere lo stesso problema iniziale perchè le variabili :

    nmin
    nmai
    cmin
    cmai

    vengono inizializzate dopo che ho passato i parametri al costruttore che dopo ,tramite toLowerCase() e toUpperCase(), li trasforma....
    Visto che sei agli inizi, ti dò alcune informazioni basilari:

    1) Dichiarazione ed inizializzazione sono due operazioni diverse che possono (e spesso lo sono) essere divise.

    2) La dichiarazione della variabile consiste nel descriverla: si dice quale visibilità deve avere, di che tipo è e come si chiama. Punto.

    codice:
    // Dichiaro la variabile "pippo", di tipo intero, e accesso privato
    private int pippo;
    3) L'inizializzazione della variabile avviene con la prima assegnazione di un valore, quindi nomeVariabile = valore;

    codice:
    // Inizializzo la variabile pippo dichiarata prima
    pippo = 10;
    Da questo ne si deduce che devi dichiarare le variabili a livello di classe, ma inizializzarle dentro al costruttore.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.