Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Errore in esecuzione

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

    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
    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 ...
    AndreaSenior Java developerSCJP 5 (91%) – SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

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 © 2019 vBulletin Solutions, Inc. All rights reserved.