Java Tableau (Array) Objet

Fermé
thapipo Messages postés 12 Date d'inscription mercredi 6 juin 2012 Statut Membre Dernière intervention 21 février 2014 - 15 déc. 2012 à 19:33
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 15 déc. 2012 à 22:30
Bonjour,

si j'ai par exemple :

public static JoueurDeSocer [] joueurTab = new JoueurDeSoccer [ 15 ];

** Je me suis déclaré un tableau qui prend des instances de joueur de Soccer avec certains attributs que j'ai établis, je me créer un tableau de 15 joueur **

Chaque fois que je demande à mon utilisateur d'entrer les données d'un joueur de soccer, je lui demande ( nom, ville, pays) qui serait comme suit :

JoueurDeSoccer j1 = new JoueurDeSoccer (nom, ville,pays);

// J'ai préalablement déjà demander et valider les informations entrées par l'utilisateur.
Donc je me retrouverai avec :

j1 : -nom
-ville
-pays

ma question est à savoir comment je fais pour que ma première case de mon tableau 'joueurTab[0]' puisse pointer vers mon j1, autre que :

joueurTab[0] = j1

si je demande par la suite d'entrer un nouveau joueur, il va écrasé celui que j'ai précédemment demandé. Je tente de trouver le moyen via une boucle for de demander l'info a mon utilisateur, il crée mon 1er joueur, ensuite ma première case de mon tableau pointe vers mon 1er joueur et ainsi de suite.

Merci !

A voir également:

6 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 déc. 2012 à 19:47
Je ne suis pas sûr d'avoir tout compris, mais pourquoi tu passes par j1, tu pourrais directement faire :

for (int i=0; i<joueurTab.length; i++)
{
    nom  = ...
    ville= ...
    pays = ...
    joueurTab[i] = new JoueurDeSoccer(nom, ville,pays);
}
0
thapipo Messages postés 12 Date d'inscription mercredi 6 juin 2012 Statut Membre Dernière intervention 21 février 2014 2
Modifié par thapipo le 15/12/2012 à 20:40
Oui tu as très bien compris !, j'ai oublié de le mentionné par contre que c'est vrai que cette méthode fonctionne bien !jy avait pensé. Le seul problème c'est que cette méthode exige que l'on rentre nos joueur immédiatement d'un coup , mais j'ai besoin que les joueurs soient tous inscrits en même temps dans le sens :


Si par exemple je rentre les données de mon premier joueur et que je termine.. mon programme revient vers un MENU PRINCIPAL, j'ai une fonction 2 qui fait : AFFICHER LES JOUEURS DE L'ÉQUIPE. donc celle-ci va ensuite lire toutes les cases non NULL de mon tableau et me les afficher donc une fois J1 entré, mon fonction 2 m'afficher mon J1 avec tous ses attributs, ensuite jai ma fonction AJOUTER UN JOUEUR. qui m'offre la possibilité d'aller RAJOUTER un joueur dans et ainsi de suite.

C'est là que je suis coincé, il faut que j'ai la possibilité d'ajouter un joueur. Je termine, jai l'option d'afficher avec ma fonction 2, le joueur que j'ai rentré qui serait dans ma CASE 0 de mon tableau.

Ensuite je peux retourner ajouter un autre joueur qui lui ferait une 2e instance de JoueurDeSoccer ( en théorie "J2") qui par la suite, logiquement, la case [1] de mon tableau irait pointer vers cette nouvelle instance de mon nouveau joueur.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 déc. 2012 à 20:43
Je ne vois pas vraiment le problème.

j1 est une variable, mais sa valeur n'est qu'une référence à l'objet, si tu copies cette référence dans la case [0] du tableau, tu peux écraser la référence dans j1 avec une autre valeur (la future case [1]) sans pour autant affecter la référence dans la case [0].

Peut-être que tu devrais mettre un exemple pour voir ce qui coince, là je ne vois pas...
0
thapipo Messages postés 12 Date d'inscription mercredi 6 juin 2012 Statut Membre Dernière intervention 21 février 2014 2
Modifié par thapipo le 15/12/2012 à 22:23
public static void menuPrincipal () {
// pour laffichage du menu

System.out.println("\n\nMenu principal");
System.out.println("==============");
System.out.println("1 - AJOUTER UN JOUEUR");
System.out.println("2 - MODIFIER UN JOUEUR");
System.out.println("3 - AFFICHER TOUS LES JOUEURS DE LA TABLE");

}

public static void ajouterUnJoueur () {
String nom;
String ville;
String pays;

System.out.println (" AJOUTER UN JOUEUR");
System.out.println (" ----------------");
System.out.print (" Entrez le nom : : ");
nom = Clavier.lireString();
System.out.print (" Entrez une ville : ");
ville = Clavier.lireString();
System.out.print (" Entrez le pays) : ");
pays = Clavier.lireString();

JoueurDeSoccer j1 = new JoueurDeSoccer (nom, ville, pays);
joueurTab [0] = j1


System.out.println (" JOUEUR AJOUTÉ!");



public static JoueurDeSocer [] joueurTab = new JoueurDeSoccer [ 15 ];
// déclaration de mon TABLEAU;
public static void main (String[] params) {

ici il y a l'affichage de mon menu principal
menuPrincipal ()

si je choisi 2 :
jexécute :
ajouterUnJoueur ()

pour revenir au menu ;
menuPrincipal ()


ensuite si je fais ma fonction afficher joueurs actifs.
afficherJoueur(); ** qui est décris ci-dessous.

public static void afficherJoueur(JoueurDeSoccer){

System.out.println ("\n LISTER LES JOUEUR");
System.out.println (" -----------------");

Nom Pays Ville
---------------- ------------------ -----------------
(ICI il y aurait J1) nom , pays, ville

String nomJoueur = joueurTab[0].getNomJoueur();
String villeJoueur = joueurTab[0].getNom();
String paysJoueur = joueurTab[0].getNas();

System.out.println(nomJoueur + " " + paysJoueur + " " + villeJoueur + " ");

menuPrincipal ()


je sais pas si ca peut aider ou si c'est clair ! mais comme je disais, en ce moment, tout marche correctement si on ajoute le 1er joueur,

aussitôt qu'on ajoute le 2e c,est la que cela devient problématique !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 déc. 2012 à 22:15
C'est une impression ou tu utilises toujours joueurTab[0], quand tu ajoutes un joueur il faudrait augmenter cet indice pour avoir joueurTab[1], [2], etc.

Le problème c'est que nul part dans ton code je ne vois où est déclaré joueurTab, en particulier on ne connait pas sa taille.

Tu parlais de "lire toutes les cases non NULL de mon tableau", il faudrait que fasses ça dans ton code, en particulier pour l'ajout d'un joueur sur la première case non nulle disponible...
0
thapipo Messages postés 12 Date d'inscription mercredi 6 juin 2012 Statut Membre Dernière intervention 21 février 2014 2
15 déc. 2012 à 22:23
Ma déclaration de tableau est juste au dessus du MAIN.

pour l'ajout des joueurs, ma logique est que lorsque le tableau est créer,

l'utilisateur rentre les données, une fois les données saisies ( qui ne sont pas encore lues par le tableau), je dois aller dire à mon tableau "la première case NULL que tu as, tu pointes ce que je viens d'entrer") et ainsi de suite.

J'essaie juste de trouver le moyen de lui dire !
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 déc. 2012 à 22:30
Il te faut une boucle for pour parcourir ton tableau :

for (int n=0; n<joueurTab; n++)
{
    if (joueurTab[n]==null)
    {
        joueurTab[n] = new JoueurDeSoccer(nom,ville,pays);
        break;
    }
}
0