[Java] Warning senza spiegazione

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Paakiv

Utente Attivo
Messaggi
580
Reazioni
13
Punteggio
55
Buongiorno.
Ho scritto un codice il java, che non posto per intero perchè estremamente lungo.
Scrivo solo qualche frammeto problematico. Gli errori sono scritti nei commenti.
Ho dei Warning strani e quando eseguo va in errore proprio a quelle righe, esclusa la prima in ordine di post.
Non fate caso ai nomi dei metodi/funzioni, tutti nello stesso foglio, perchè li ho dati abbastanza casualmente pensando di sbrigarmela velocemente e non immaginando questi problemi data la banalità dell'esercizio.
Detto ciò posto anche un breve spiegazione di quello che volevo fare consapevole del fatto che c'erano anche molti altri modi per arrivare alla soluzione, forse più semplici, ma che non avrebbero rispettato (forse) i vincoli richiesti. La posto anche se gli erorri che mi da penso siano più sintattici / logici e entrino poco con il testo dell'esercizio.
Ho un array di Elementi composti da un valore colorato in ordine crescente di valore. Devo crearne uno che sia uguale ma abbia per i numeri colorati B (blu) il valore modificato con se stesso più il numero rosso alla sua sinistra più vicino. Poi devo cercare sul primo array un numero a caso passato in input, se c'è devo verificare se è rosso e nel caso non lo sia vedere se nel secondo array è diventaro pari in seguito alla somma.
Java:
Elemento[] A = new Elemento[6];
A[0] = new Elemento(1, Colore.B);
A[1] = new Elemento(2, Colore.B);
A[2] = new Elemento(4, Colore.R);
A[3] = new Elemento(6, Colore.R);
A[4] = new Elemento(6, Colore.B);
A[5] = new Elemento(7, Colore.R);
Elemento[] C = A //C viene sottolineato di giallo, so che è inutile ma era per capire
Elemento[] B = Modifica(A); //Exception in thread "main" java.lang.NullPointerException

boolean flag = CercaConfronta(x, A, B);
Java:
public class Elemento {
    private int valore;
    private Colore col;

    public Elemento(int valore, Colore col) {
        this.valore = valore;
        this.col = col;
    }

    public int getValore() {
        return valore;
    }

    public void setValore(int valore) {
        this.valore = valore;
    }

    public Colore getCol() {
        return col;
    }

    public void setCol(Colore col) {
        this.col = col;
    }
}
Java:
public static Elemento[] Modifica(Elemento[] X) {
        Elemento[] Y = new Elemento[X.length];
        int u = 0;
        int j = 0;
        for (int i = 0; i < X.length - 1; i++) {
            if (X[i].getCol() == Colore.R)
                j = i;
                u = X[i].getValore();
                break;
        }
     
        for (int i = 0; i < X.length - 1; i++) {
            if (i < j + 1) {
                Y[i] = X[i];
            } else {
                if (X[i].getCol() == Colore.R) {
                    u = X[i].getValore();
                } else {
                    Y[i].setValore(X[i].getValore() + u); //Exception in thread "main" java.lang.NullPointerException
                }
            }
        }
        return Y;
    }
Java:
public static boolean CercaConfronta(int z, Elemento[] X, Elemento[] Y) {
        int i = BinarySearch(X, 0, X.length - 1, z);
        if (i == -1) {
            return false;
        } else {
            if (X[i].getCol() == Colore.R || Y[i].getValore() % 2 == 0) { //The if statement is redundant
                return true;
            }
            return false;
        }
    }
Qualcuno sa perchè e come risolvere? E' da ieri chi ci sto sbattendo la testa senza risultati!
Grazie!
 
Ultima modifica:
ciao puoi spiegarmi la traccia dell'esercizio cosa deve fare e quale è l'errore che hai?
 
ciao puoi spiegarmi la traccia dell'esercizio cosa deve fare e quale è l'errore che hai?
Guarda nel primo spoiler c'è la traccia, diciamo che dato x a CercaConfronta mi deve dire se vero o falso, quindi se il numero c'è, se nel caso è rosso oppure se è pari.
Gli errori sono quelli riportati nei commenti del codice postato. Alcune sottolineature in giallo di netbeans senza spiegazioni e dei null pointer exception, oppure un if ridondante.
 
Sono un pirla, hai ragione. Nel copiare i pezzi di codice ho fatto macello.
Correggo
Qui ti da questo errore
Java:
Y[i].setValore(X[i].getValore() + u); //Exception in thread "main" java.lang.NullPointerException

percjè y non è inizializzato.
Tu hai solo inizializzato la lunghezza di Y, ma devi fare ogni volta

Codice:
Y[i]= new Element(....)
e risolvi il problema
 
Qui ti da questo errore
Java:
Y[i].setValore(X[i].getValore() + u); //Exception in thread "main" java.lang.NullPointerException

percjè y non è inizializzato.
Tu hai solo inizializzato la lunghezza di Y, ma devi fare ogni volta

Codice:
Y[i]= new Element(....)
e risolvi il problema
Ah... grazie.

Ho riscritto StampaArray, ma anche qui da errore. E' giusto per capire, perchè alla fine sarà una cosa stupida e potrei farne anche a meno. Giusto per avere una cosa graficamente bella!
Java:
public static void StampaArray(Elemento[] X) {
        for (int i = 0; i < X.length; i++) {
            if (i < X.length - 1) {
                System.out.print(X[i].getValore() + ", "); //Exception in thread "main" java.lang.NullPointerException
            } else {
                System.out.print(X[i].getValore() + ".");
            }
        }
        for (int i = 0; i < X.length; i++) {
            if (i < X.length - 1) {
                System.out.print(X[i].getColore() + ", ");
            } else {
                System.out.print(X[i].getColore() + ".");
            }
        }
    }
 
Ah... grazie.

Ho riscritto StampaArray, ma anche qui da errore. E' giusto per capire, perchè alla fine sarà una cosa stupida e potrei farne anche a meno. Giusto per avere una cosa graficamente bella!
Java:
public static void StampaArray(Elemento[] X) {
        for (int i = 0; i < X.length; i++) {
            if (i < X.length - 1) {
                System.out.print(X[i].getValore() + ", "); //Exception in thread "main" java.lang.NullPointerException
            } else {
                System.out.print(X[i].getValore() + ".");
            }
        }
        for (int i = 0; i < X.length; i++) {
            if (i < X.length - 1) {
                System.out.print(X[i].getColore() + ", ");
            } else {
                System.out.print(X[i].getColore() + ".");
            }
        }
    }
Evidentemente non hai fatto l'inizializzazione di tutti gli indici comd ho scritto sopra
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top