IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

tableau non r�f�renc�


Sujet :

Langage Java

  1. #1
    Membre confirm�

    Homme Profil pro
    Enseignant
    Inscrit en
    F�vrier 2020
    Messages
    178
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dr�me (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : F�vrier 2020
    Messages : 178
    Par d�faut tableau non r�f�renc�
    bonjour � tous,

    j'ai cr�� une classe "Identit�2" qui contient deux membres, le nom et le pr�nom de la personne, initialis�e pour le test � : patrick martin.
    Le code simple est :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package main;
     
    import java.io.Serializable;
     
    // --------  classe Identité2  -------------------
    public class Identité2 implements Serializable{
    	private static final long serialVersionUID = 1L;
     
     
    		// membres
    			public	String nom = " patrick";
    			public	String prenom = "martin" ;
     
    		// constructeur
    				public Identité2() {
    				}
     
    }
    // =======  fin de classe Identité2=============
    Quand je cr�� une identit� par d�faut, comme ici :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    Identité2 qui = new Identité2();
    		System.out.println("mon identité de type Identité2 vaut : " + qui.nom + " et : " + qui.prenom);
    je r�cup�re bien mon identit� par d�faut :
    Nom : patrick martin.png
Affichages : 110
Taille : 4,2 Ko

    Je sais, je n'ai pas grand m�rite.....

    Je cr�� ensuite un tableau, pour stocker mes identit�s. Je l'impl�mente au d�but de ma classe en static :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    		static Identité2[] nomsDesPrésents = new Identité2 [nbParticipants];
    Ensuite, plus loin, je d�sire faire une boucle pour intialiser ce tableau avec les strings "absent" pour le nom et le pr�nom. (Je sais, j'aurai initialiser dans la classe � la cr�ation, le probl�me serait peut-�tre �vit�, mais j'aimerais comprendre ma mauvaise manip...)
    Cela ne fonctionne plus !! M�me si je prends des caract�ristiques du tableau cr��, il semble bien exister, mais le compilateur me dit que la r�f�rence pointe vers rien!!!
    (le tableau listeIn, cr�� en static �galement ne pose aucun probl�me. J'ai affich� ses caract�ristiques pour essayer de voir des diff�rences avec celles affich�es pour nomsDesPr�sents qui semble non accessibles par index...)

    M�me si j'essaie un acc�s avec un index du tableau en dur, ca ne veut pas...
    Le code est :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    		// on initialise les tableaux de stockage
     
    		for (int i = 0 ; i<nomsDesPrésents.length; i++) {
     
    			System.out.println("voila listeIn au point maudit : " + listeIn);
    			System.out.println("voila nomDesPrésents au point maudit : " + nomsDesPrésents + ", de longueur : " + nomsDesPrésents.length);
    			System.out.println("i = " + i + "la valeur initiale est : " + nomsDesPrésents[i].nom);
     
     
    			nomsDesPrésents[i].nom = "absent";
    			nomsDesPrésents[i].prenom = "absent";
    			listeIn[i] = null;
    			listeOut[i] = null;
    		}
    La console indique :
    Nom : r�ponse patrick martin.png
Affichages : 100
Taille : 9,1 Ko

    Voila mon soucis. Je n'ai pas ce genre de probl�me d'habitude. Peut-�tre la fatigue car �a ne parait pas tr�s compliqu�.
    Si mon erreur saute aux yeux de quelqu'un, ce sera un grand MERCI!....
    Bonne soir�e.

  2. #2
    Mod�rateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par d�faut
    Hello,

    ben �a ne se devine pas. D'habitude les d�butants suivent un cours ou un tutoriel, mais si tu pr�f�res essayer des trucs et demander, soit...

    Pour rappel dans le cas qui marche :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Identité2 qui = new Identité2();
    tu as appel� le constructeur avec new Identit�2(), ce qui a cr�� un objet de cette classe.

    Et dans le cas qui marche pas, tu ne l'as pas fait, donc aucun objet de cette classe n'a �t� cr��. Comme ton tableau ne peut pas contenir d'objet qui n'existe pas, il ne contient que du null.

    Si au d�but de ta boucle tu fais ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    nomsDesPrésents[i] = new Identité2();
    l'erreur dispara�tra. Apr�s, forc�ment tous tes objets auront les m�mes noms et pr�noms. Mais �a c'est pas magique, des donn�es, il faut que �a vienne de quelque part, 'faut avoir un plan pour �a.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirm�

    Homme Profil pro
    Enseignant
    Inscrit en
    F�vrier 2020
    Messages
    178
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dr�me (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : F�vrier 2020
    Messages : 178
    Par d�faut classe native ou classe perso
    Bonjour Thelvin,

    un grand MERCI � toi donc, pour m'avoir d�bloqu� dans mon programme.

    En fait, j'ai compar� avec ce qui fonctionnait bien, construit de la m�me mani�re, et dans mon cas, ce sont les deux autres tableaux statiques avec des "ObjectInputStream" et des "ObjectOutputStream", qui eux, ne semblent pas imposer cette intantiation individuelle de chaque objet avant le stockage en tableau.
    J'ai essay� �galement avec des "int" et des "string", et dans ces cas �galement, la simple cr�ation du tableau permet son utilisation sans cr�er pour chaque case un "new Object()".

    En fait, m�me apr�s avoir instanci� un tableau en identifiant forc�ment sa classe, le fait de devoir instancier chaque objet avant de pouvoir l'utiliser est-il li� au fait que c'est une classe personnelle cr�� par le programmeur, et le fait de l'utilisation "directe" est-elle permise si on utilise une classe native de java??

    (Pour info, en fait, je me documente sur des tutos, mais parfois, on a beau insister, comme ici, on passe � travers sans avoir le bon d�clic, et un coup de pouce permet de nous dispenser de nombreuses heures de gal�re...)

    Merci pour tout, car je vois que tu est tr�s pr�sent sur les aides en java, pour d�bloquer beaucoup de personnes et j'imagine que cela prend pas mal de temps...

    A bient�t peut-�tre...

  4. #4
    Mod�rateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par d�faut
    Hello, non �a fonctionne tout pareil.

    C'est faux que tu peux utiliser les autres avant le stockage dans le tableau.

    �a, c'est le stockage dans le tableau :

    Donc quand tu fais nomsDesPrésents[i] = new Identité2(); c'est �a le stockage dans le tableau.

    Et bien s�r il est n�cessaire de stocker quelque chose dans le tableau avant de t'en servir.

    Quand tu fais nomsDesPrésents[i].nom tu cherches � utiliser les valeurs String nom des objets dans le tableau. Bien entendu ce n'est pas possible tant que tu n'as pas mis un objet � cet endroit.

    C'est pareil avec des ObjectInputStream et des String, c'est juste que tu fais des raccourcis dans ta t�te alors qu'il n'y a pas � en faire. Tant que tu n'as pas fait tableau[index] = valeur; tu n'as pas stock�. Point.

    �a peut para�tre diff�rent avec les ints et les autres primitifs, parce que quand on cr�e leurs tableaux, chaque emplacement contient 0 ou '\0' ou false. Ce n'est pas null parce que les primitifs ne peuvent pas �tre null.
    Mais �a reste des valeurs qui ne sont pas celles qu'on veut, puisque pour l'instant on y a pas mis les valeurs qu'on veut. C'est "utilisable" parce que les primitifs ne contiennent pas de variable ni de m�thode, donc on ne peut pas essayer d'�crire 2.nom ou 2.afficher(). 2 c'est juste le nombre 2. "utiliser" un primitif c'est juste l'utiliser lui-m�me, l'afficher ou l'additionner � un autre. Il n'y a pas de notion d'acc�der � son "contenu" qui n'existe pas.

    Citation Envoy� par patdu26 Voir le message
    (Pour info, en fait, je me documente sur des tutos, mais parfois, on a beau insister, comme ici, on passe � travers sans avoir le bon d�clic, et un coup de pouce permet de nous dispenser de nombreuses heures de gal�re...)
    Je ne parlais pas tant de se documenter, que d'apprendre le langage lui-m�me. �a me semble abusivement ambitieux de se lancer dans un projet Java quand on ne comprend pas la notion qu'un tableau est cr�� avec des valeurs par d�faut. N'importe quel apprentissage de Java couvre cela en temps et en heure.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirm�

    Homme Profil pro
    Enseignant
    Inscrit en
    F�vrier 2020
    Messages
    178
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dr�me (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : F�vrier 2020
    Messages : 178
    Par d�faut Merci.. � nouveau!
    Cette fois je pense que j'ai compris les flottements concernant mon approche.
    En fait, je fais inconsciemment des raccourcis, qui fonctionnent uniquement avec des variables natives et utilis�es de mani�res simples.
    Quand je r�alise la m�me d�marche avec des �l�ments plus complexes, comme des objets m�mes simples, le flou de la d�marche entraine une incapacit� � traiter ma demande, car les "raccourcis non clairement exprim�s" ne peuvent d�boucher sur rien pour le compilateur.

    Donc :
    1/ je cr�� mon tableau pour le r�f�rencer et r�server son espace en m�moire.
    2/ Dans chaque emplacement de mon tableau, je cr�� une instance de mon objet, pour cr�er la structure interne de mon emplacement, y stocker une valeur initiale qui de fait, ne sera plus "null" et donc accessible pour y stocker des valeurs de travail ensuite.

    Ok, en effet, � pr�sent tout fonctionne nickel!

    Je vais m'employer � plus de rigueur dans la cr�ation et le stockage de mes objets.

    Encore MERCI!!!

+ R�pondre � la discussion
Cette discussion est r�solue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo