Vecteur des Vecteurs

Fermé
jackiehanane Messages postés 2 Date d'inscription mercredi 6 avril 2016 Statut Membre Dernière intervention 7 avril 2016 - Modifié par KX le 6/04/2016 à 23:34
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 7 avril 2016 à 19:46
Bonjour,
j'etais d'entraine d'executer mon code, et j'ai touvé l'erreur : java.lang.NullPointerException, jai verifié plusiers fois mais je n'est aucune idée ou le problem se touve, mon code est d'ecrire une class matrice, qui cree un tabeau de type Vecteur(d'autre class) et ce tableau pointe sur plusiers tableau, j ai fait le remplissage de matrice et l'affichage mais la somme qui se pose le problem, merci :)

import java.util.Scanner;

public class Matrice {
    public Vecteur mat[];
    public static int m;
    static int i, j;
    Scanner sc;

    Matrice() {
        m = 0;
        mat = null;
    }

    Matrice(int m, int n) {
        Matrice.m = m;
        Vecteur.n = n;
        mat = new Vecteur[100];
        // mat[i]=new Vecteur(100);
    }

    public void remplir() {
        mat = new Vecteur[100];
        sc = new Scanner(System.in);
        System.out.println("donner le nombre de votre ligne a lire");
        Matrice.m = sc.nextInt();
        System.out.println("donner le nombre de votre colonne a lire");
        Vecteur.n = sc.nextInt();
        for (j = 0; j < m; j++) {
            mat[j] = new Vecteur(Vecteur.n);
            mat[j].remplir();
        }
    }

    public void affiche2() {
        System.out.println("L'affichage de votre matrice");
        for (i = 0; i < Vecteur.n; i++) {
            mat[i].affiche();
        }
    }

    public static void main(String args[]) {
        Matrice Mat1 = new Matrice();
        Matrice Mat2 = new Matrice();
        Matrice Mat3 = new Matrice();
        Mat1.remplir();
        Mat1.affiche2();
        Mat2.remplir();
        Mat2.affiche2();
        Mat3 = Matrice.somme(Mat1, Mat2);
        Mat3.affiche2();
    }

    public static Matrice somme(Matrice mat1, Matrice mat2) {
        Matrice mat3 = new Matrice();
        for (j = 0; j < Vecteur.n; j++) {
            for (i = 0; i < Matrice.m; i++) {
                mat3.mat[i].t[j] = (mat1.mat[i].t[j]) + (mat2.mat[i].t[j]);
            }
        }
        return mat3;
    }
}

import java.util.Scanner;

public class Vecteur {
    public static int n;
    static int i;
    static int j, k;
    int t[];
    static Scanner sc = new Scanner(System.in);

    Vecteur(int n) {
        Vecteur.n = n;
        t = new int[100];
    }

    Vecteur() {
        Vecteur.n = 0;
        t = null;
    }

    public void remplir() {
        t = new int[100];
        sc = new Scanner(System.in);
        /*
         * System.out.println("donner le nombre d'element a lire"); n=sc.nextInt();
         */
        for (i = 0; i < n; i++) {
            System.out.println("donner le " + i + "° element a lire");
            t[i] = sc.nextInt();
        }
    }

    public void contenu(Vecteur Tab) {
        i = 0;
        j = 0;
        if (n <= Tab.t.length) {
            while (j < Tab.t.length) {
                if (t[i] != Tab.t[j]) {
                    j++;
                    i = 0;
                } else {
                    i++;
                    j++;
                }
            }
            if (i > n) {
                System.out.println("Le tableau 1 est contenu dans tableau 2");
            } else {
                System.out.println("Le tableau 1 n'est pas contenu dans tableau 2");
            }
        } else {
            while (i < n) {
                if (t[i] != Tab.t[j]) {
                    i++;
                    j = 0;
                } else {
                    i++;
                    j++;
                }
            }
            if (j > n) {
                System.out.println("Le tableau 2 est contenu dans tableau 1");
            } else {
                System.out.println("Le tableau 2 n'est pas contenu dans tableau 1");
            }
        }
    }

    boolean appartient(int x) {
        i = 0;
        boolean trouve = false;
        while ((i < n) && (t[i] != x)) {
            i++;
        }
        if (i >= n)
            System.out.println("le x n'appartient pas a votre Tableau");
        else {
            System.out.println("le x appartient a votre tableau");
            trouve = true;
        }
        return trouve;
    }

    public void affiche() {
        for (i = 0; i < n; i++) {
            System.out.println(t[i]);
        }
    }

    public void trier() {
        int j, tmp;
        for (i = 0; i < n; i++) {
            for (j = i + 1; j < n; j++) {
                if (t[i] > t[j]) {
                    tmp = t[i];
                    t[i] = t[j];
                    t[j] = tmp;
                }
            }
        }
        for (int i = 0; i < n; i++) {
            System.out.println("Les élements de tableau aprés le trie sont  " + t[i]);
        }
    }

    void insere(int x) {
        if (appartient(x) == true) {
            System.out.println("L'insersion est impossible, La valeur existe deja!");
        } else {
            for (i = n; (i > 0) && (t[i - 1] > x); i--)
                t[i] = t[i - 1];
            /* VAL est copié à la position du dernier */
            /* élément déplacé. */
            t[i] = x;
            n++;
            for (i = 0; i < n; i++)
                System.out.println(t[i]);
        }
    }

    public static void fusionner(Vecteur tab1, Vecteur tab2) {
        Vecteur FUS = new Vecteur(tab1.t.length + tab2.t.length);
        i = 0;
        j = 0;
        k = 0;
        while ((i < tab1.t.length) && (j < tab2.t.length))
            if (tab1.t[i] < tab2.t[j]) {
                FUS.t[k] = tab1.t[i];
                k++;
                i++;
            } else {
                FUS.t[k] = tab2.t[j];
                k++;
                j++;
            }
        /* Si IA ou IB sont arrivés à la fin de leur tableau, */
        /* alors copier le reste de l'autre tableau. */
        while (i < n) {
            FUS.t[k] = tab1.t[i];
            k++;
            i++;
        }
        while (j < n) {
            FUS.t[k] = tab2.t[j];
            k++;
            j++;
        }
        /* Edition du résultat */
        System.out.println("Le tableau aprés le fusion est ");
        for (k = 0; k < tab1.t.length + tab2.t.length; k++)
            System.out.println(FUS.t[k]);
    }

    public static void main(String args[]) {
        Vecteur tab1 = new Vecteur();
        System.out.println("donner le nombre d'element a lire");
        n = sc.nextInt();
        tab1.remplir();
        tab1.affiche();
        tab1.trier();
        Vecteur tab2 = new Vecteur();
        tab2.remplir();
        tab2.affiche();
        tab2.trier();
        fusionner(tab1, tab2);
        tab1.contenu(tab2);
        tab2.appartient(5);
        tab1.insere(6);
    }
}

1 réponse

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
6 avril 2016 à 23:32
Bonjour,

Merci d'utiliser les balises de code pour mettre en forme ton message, je l'ai réédité pour que ça ressemble à quelque chose...

Quant à ton NullPointerException il vient de ta mauvaise utilisation du constructeur, faire
mat = null;
est une très mauvaise pratique !
Utilises uniquement ton constructeur (int m, int n) et rien d'autre...

Il y a également plein d'autres monstruosité dans ton code, mais je ne vais pas les lister ce soir... trop long ! Mais par exemple mettre des variables de boucles i, j, etc. en static c'est catastrophique !
1
jackiehanane Messages postés 2 Date d'inscription mercredi 6 avril 2016 Statut Membre Dernière intervention 7 avril 2016
7 avril 2016 à 00:13
Merci beaucoup monsieur, j'ai suivi votre conseille et j'ai fait quelque mdifications, et cette fois l'erreur est dans la ligne 57, NullPointeurs, je peux savoir pourquoi? merci beaucoup pour votre aide.
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
7 avril 2016 à 19:46
Ton code est décalé par rapport à celui écrit dans le forum, à quelle ligne de code correspond la ligne 57 chez toi ?
0