Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Errore in esecuzione

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2019
    Messaggi
    26

    Errore in esecuzione

    Salve, ho finito un archivio con l'incapsulamento e gli array, cose che non avevo ancora fatto fino a ora; sembrerebbe essere andato tutto bene, tranne quando vado ad eseguirlo, poiché mi dà un errore che non riesco a capire, non l'ho avevo mai incontrato.
    Vi lascio il codice delle tre classi, sperando che l'indentazione sia corretta.
    codice:
    package EserciziJava.esercizio2;
    
    
    public class Artista {
    private String nome;
    private String cognome;
    private int dataDiNascita;
    private String biografia;
    public String getNome() {
    	return nome;
    }
    public void setNome(String nome) {
    	this.nome = nome;
    }
    public String getCognome() {
    	return cognome;
    }
    public void setCognome(String cognome) {
    	this.cognome = cognome;
    }
    public int getDataDiNascita() {
    	return dataDiNascita;
    }
    public void setDataDiNascita(int dataDiNascita) {
    	this.dataDiNascita = dataDiNascita;
    }
    public String getBiografia() {
    	return biografia;
    }
    public void setBiografia(String biografia) {
    	this.biografia = biografia;
    }
    }
    Seconda classe:

    codice:
    package EserciziJava.esercizio2;
    public class DatiArtista {
    public Artista[] creaArtisti() {
    Artista[] artisti = new Artista[100];
    artisti[0] = new Artista();
    artisti[1] = new Artista();
    artisti[2] = new Artista();
    artisti[3] = new Artista();
    artisti[0].setNome("Antonello");
    artisti[0].setCognome("Venditti");
    artisti[0].setDataDiNascita(1949);
    artisti[0].setBiografia("Cantautore Italiano, considerato fra i piu popolari e tra i piu prolifici della cosiddetta scuola Romana,dal 1972, anno del suo debutto discografico.");
    artisti[1].setNome("Laura");
    artisti[1].setCognome ("Pausini");
    artisti[1].setDataDiNascita(1974);
    artisti[1].setBiografia("Laura Pausini cantautrice italiana, nasce a Faenza e vincera nel 1993 il Festival di Sanremo con la canzone la solitudine; tornerà poi nel 1994 con la canzone Strani amori, con cui si classificherà al terzo posto.");
    artisti[2].setNome("Domenico");
    artisti[2].setCognome("Modugno");
    artisti[2].setDataDiNascita(1928);
    artisti[2].setBiografia("Domenico Modugno nasce a poligniano a mare, e stato cantautore, chitarrista, attore, regista e politico Italiano ha pubblicato 30 album e una delle sue canzoni più conosciute e nel blu dipinto di blu, nota anche come volare");
    artisti[3].setNome("Eros");
    artisti[3].setCognome("Ramazzotti");
    artisti[3].setDataDiNascita(1963);
    artisti[3].setBiografia("Eros Ramazzotti all'anagrafe Eros Luciano Valter Ramazzotti, cantautore Italiano, nato  a Roma, partecipa al suo primo Sanremo nel 1984 con la canzone Terra promessa");
    return artisti;
    }
    }
    Terza e ultima classe:
    codice:
    package EserciziJava.esercizio2;
    import java.util.Arrays;
    import java.util.Scanner;
    public class ApplicazioneArchivio {
    	public static void main(String args []) {
    DatiArtista datiartista = new DatiArtista();
    Artista[] artisti= datiartista.creaArtisti();
    Arrays.sort(artisti, (a,b)->a.getCognome().compareTo(b.getCognome()));
    Scanner scanner = new Scanner( System.in);
    System.out.println("Benvenuto nell'archivio dove troverai tutto ciò che vuoi sapere del tuo artista preferito.");
    String stringa ="";
    System.out.println("Digita \"r\"per visualizzare gli artisti in ordine alfabetico e premi invio, "+" oppure digita il nome del tuo artista preferito per vedere tutte le informazioni, oppure scrivi \"x\" per uscire dall'archivio");
    while(!(stringa =scanner.next()).equals("x")) {
    	System.out.println("Hai digitato" + stringa.toUpperCase() +"!");	
    	if (stringa.equals("r")) {
    		for (Artista artista : artisti) {
    			if (artista != null) {
    				System.out.println(artista.getNome());
    				System.out.println(artista.getCognome());
    				System.out.println(artista.getDataDiNascita());
    				System.out.println(artista.getBiografia());
    			}
    		}
    	}
    			else {
    				boolean artistaTrovato= false;
    			for (Artista artista : artisti) {
    				if (artista.getCognome().equalsIgnoreCase(stringa)) {
    					System.out.println(artista.getNome());
    				System.out.println(artista.getCognome());
    				System.out.println(artista.getDataDiNascita());
    				System.out.println(artista.getBiografia());
    				artistaTrovato = true;
    				}
    				}
    			if (artistaTrovato == false) {
    				System.out.println("Nessun risultato trovato per" + stringa);
    			}
    			}
    			}
    		System.out.println("Ciao e alla prossima!");
    	}
    }
    L'errore è questo
    Exception in thread "main" java.lang.NullPointerException
    at EserciziJava.esercizio2.ApplicazioneArchivio.lambd a$0(ApplicazioneArchivio.java:8)
    Preciso che Eclipse non lo vede come errore, ma me lo dà solo in esecuzione.
    Grazie a chi vorrà aiutarmi!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    sperando che l'indentazione sia corretta.
    No, per quanto si vede, indentazione e spaziature non sono "buone".

    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    L'errore è questo
    Exception in thread "main" java.lang.NullPointerException
    at EserciziJava.esercizio2.ApplicazioneArchivio.lambd a$0(ApplicazioneArchivio.java:8)
    Beh, è abbastanza semplice: in DatiArtista hai creato un array new Artista[100] ma poi hai creato solo 4 oggetti Artista. Quindi gli altri 96 elementi dell'array restano al loro valore di default che è null .
    Il problema poi capita qui quando cerchi di ordinare l'array:

    Arrays.sort(artisti, (a,b)->a.getCognome().compareTo(b.getCognome()));

    Qui a e/o b POSSONO quindi essere null. E non puoi ovviamente invocarci un getCognome() su un null. Pertanto la questione diventa: come vuoi trattare i null nell'ordinamento? Devono venire prima o dopo valori non-null? Di per sé sarebbe sufficiente migliorare/espandere il criterio di comparazione per gestire anche i null.

    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    Preciso che Eclipse non lo vede come errore, ma me lo dà solo in esecuzione.
    Le eccezioni avvengono a runtime ... il compilatore non può sapere nulla di cosa accade in fase di esecuzione ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.