[Java] Warning senza spiegazione

Stato
Discussione chiusa ad ulteriori risposte.

Paakiv

Utente Attivo
570
12
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

Head of Development
Staff Forum
Utente Èlite
35,281
11,431
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
ciao puoi spiegarmi la traccia dell'esercizio cosa deve fare e quale è l'errore che hai?
 

Paakiv

Utente Attivo
570
12
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,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Hai invertito CercaConfronta con Modifica o sbaglio?
 
  • Mi piace
Reazioni: Andretti60

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,465
12,881
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
Che ide usi?
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
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
Reazioni: Paakiv

Paakiv

Utente Attivo
570
12
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
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
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.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili