PROBLEMA [Java] Warning senza spiegazione

ViPaaK

Utente Attivo
415
9
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:

Skills07

Moderatore
Staff Forum
15,373
4,432
CPU
Ryzen 7 2700x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
Hard Disk
Samsung Evo 850 250gb,2tb toshiba, 500gb western digital, 256 Ssd silicon power
RAM
16 gb G.Skill Tridentz 3200 mhz RGB
Scheda Video
KFA2 Rtx 2070 super
Monitor
Acer Predator 144hz 2k IPS 27", Hp ES 24" 60 Hz FHD
Alimentatore
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Razer Electra V2
Internet
Fibra Tim 100mb
Sistema Operativo
Windows 10 Pro 64 bit
ciao puoi spiegarmi la traccia dell'esercizio cosa deve fare e quale è l'errore che hai?
 

ViPaaK

Utente Attivo
415
9
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.
 

_Achille

Utente Èlite
3,029
700
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
Hai invertito CercaConfronta con Modifica o sbaglio?
 
  • Mi piace
Reactions: Andretti60

Ibernato

Utente Èlite
3,958
1,778
Sistema Operativo
Windows 10 Pro
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
 
  • Mi piace
Reactions: ViPaaK

ViPaaK

Utente Attivo
415
9
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() + ".");
            }
        }
    }
 

Ibernato

Utente Èlite
3,958
1,778
Sistema Operativo
Windows 10 Pro
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
 

Entra

oppure Accedi utilizzando