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

Collection et Stream Java Discussion :

Agrandir un tableau dynamiquement


Sujet :

Collection et Stream Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé de projets
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Agrandir un tableau dynamiquement
    Bonjour à toutes et tous,

    Voila, je débute en java et, dans le cadre d'un projet, je dois créer un QCM. Le truc, c'est que je ne sais pas à l'avance combien de questions il va y avoir ni combien de réponses aux questions.
    La ou ça bloque vraiment, c'est que je n'ai pas le droit d'utiliser les listes, uniquement des tableaux.

    Aussi, j'envisage de créer un tableau à 2 indices ou [i] contiendrait mes questions et [j] mes réponses. Sauf que, comment augmenter [i] et [j] de 1 à chaque fois qu'une nouvelle question/réponse est créées...?

    Je suis assez embeté, alors si vous avez quelques pistes/idées, je vous en serai très reconnaissant.

    Merci d'avance.

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Bon je pense que les maps sont interdites aussi?

    Sinon, tu te fais une méthode insert(String q, String a) et dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void insert(String q, String a) {
        String[] newQ = new String[questions.length+1];
        String[] newA = new String[answers.length+1];
     
        System.arraycopy(questions, 0, newQ, 0, questions.length);
        System.arraycopy(answers, 0, newA, 0, answers.length);
     
        newQ[newQ.length-1] = q;
        newA[newA.length-1] = a;
     
        questions = newQ;
        answers = newA;
    }
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Citation Envoyé par Pill_S Voir le message
    En utilisant des listes (java.util.List), ou même des maps (java.util.Map).
    Sauf qu'il a explicitement écrit :
    je n'ai pas le droit d'utiliser les listes, uniquement des tableaux
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    yep, j'ai vu après coup et j'ai édité mon mess
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    On ne peut pas changer la taille d'un tableau en java. Comme le dit @Pill_S, il faut utiliser des List pour gérer ce genre de chose. Si tu n'as pas le droit d'utiliser de List, tu peux simuler ce que fait une ArrayList (qui gère en interne un tableau), pour agrandir le tableau au besoin : le principe créer un nouveau tableau de la nouvelle taille, copier le premier tableau dans le second (System.arrayCopy()), utiliser le second à la place du premier, ou utiliser Arrays.copyOf() qui fera tout ça pour toi. On pourrait envisager une solution par classe aussi (liste chaînée).

    EDIT : oups, grillé. Je laisse à cause de la mention de Arrays.copyOf()
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Maintenant c'est indémerdable : un tableau a une taille fixe !

    Donc la seule solution bidon c'est, pour un QCM de 100 questions par exemple, de créer un tableau de dimension 1000
    et d'indiquer dans une variable int qu'on appelera lastIndex la valeur du dernier indice utilisé du tableau.

    Bref c'est null ...
    @glmtsr82 : ton prof il a fait l'école du rire ?

    EDIT : ah oui, comme dit joel.drigo, on peut s'amuser à recréer un tableau à chaque fois que ça augmente et recopier les valeurs ...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    @glmtsr82 j'ai quand même un doute, tu pourrais poster ton sujet ou bien la partie de ton sujet qui spécifie que tu n'as pas droit aux List ?
    (pendant qu'il y est, ton prof aurait pu interdire aussi les boucles for ou while ...)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  8. #8
    Candidat au Club
    Homme Profil pro
    Chargé de projets
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    @Népomucène : l'énoncé :

    Enoncé :
    Le but du projet consiste à représenter un questionnaire à choix multiples et à réaliser une ou
    plusieurs fois l’épreuve. Dans un premier temps, l’utilisateur joue le rôle du professeur qui crée le
    questionnaire, puis il joue le rôle d’un élève ou plusieurs élèves qui répondent aux questions.
    Un questionnaire est composé de plusieurs questions qui ont chacune plusieurs réponses (au moins
    deux). A chaque fois, il n’y a qu’une seule bonne réponse. Chaque bonne réponse donne un point. Le
    test est réussi si la note est supérieure ou égale à la moitié du nombre de questions
    Dans un premier temps, le programme doit saisir au clavier les questions, avec pour chaque ques-
    tion, les réponses et un moyen de savoir laquelle est la bonne. Cela peut être le statut vrai ou faux de
    chaque réponse ou le numéro de la bonne réponse.
    Dans un second temps, chaque question est affichée avec les réponses proposées qui sont numé-
    rotées de 1 à n. L’utilisateur choisit une réponse. A la fin du questionnaire, la note est affichée ainsi
    que le statut réussi ou raté. Puis le programme propose de recommencer la passation.

    Contraintes:
    Vos structures de données ne devront comporter que des tableaux déclarés dans la méthode main.
    Votre programme devra comporter des méthodes recevant les tableaux en paramètres. Les
    ArrayList sont interdits.


    @Pill_S : on a pas encore vu les maps, j'imagine donc qu'on n'est pas sensé les utiliser. En tout cas, merci pour vos réponses. Je vais m'essayer au Arraycopy et voir comment j'intègre ça.

    Je reviens vous voir dès que j'ai avancé.

    Merci à tous

  9. #9
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    On pourrait jouer sur les mots là par exemple... :

    "Les ArrayList sont interdits" bin pas de soucis, on peut utiliser une LinkedList alors nan?

    Passer des arrays en paramètres... ok... et dans le corps, on peut convertir nan?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public Object[] insert(Object[] array, String question, String answer) {
        List l = Arrays.asList(array);
        l.add(new Xxx(question, answer));
        return l.toArray();
    }
    mais bon, pas sûr que le prof apprécie...
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Dans le sujet, la méthode de saisie du questionnaire n'est pas précisée : le plus simple, à mon avis, est donc de demander au préalable le nombre de questions, puis de dimensionner le tableau en fonction. Pour les réponses, c'est moins évident : soit on part du principe qu'on a un nombre identique de réponses par question, et, donc, on pose la question au début, ce qui permet de dimensionner un tableau à 2 dimensions (plus un tableau à une dimension pour le numéro de la bonne réponse). L'autre solution est de faire un tableau de Question, une classe qui contient un tableau dont la dimension est différente pour chaque instance de question, si tu as déjà vu la notion de classes.
    La mention "tableaux déclarés dans la méthode main" n'empêche pas de le faire (même si ce n'est pas terrible, je trouve, au niveau modèle final).

    En gros tu as une classe Question du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Question {
     
     
       public Question(String intitulle, String[] reponses, int bonneResponse) {
            ...        
       }
     
    }
    Ainsi, dans le main, à chaque fois qu'on créé une question, on demande le nombre de réponses, ce qui permet de dimensionner le tableau de réponses à passer en argument du constructeur.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Oubliez pas qu'il est clairement dit qu'il faut créer les tableaux au niveau du main => exit le redimensionnement ou la création apres avoir demandé la taille.
    Je ne vois que la déclaration d'un gros tableau et limiter le nombre de question à la taille prédéfinie...
    Pareil pour les réponses (en passant par une classe, si possible, pour ne pas avoir un tableau de réponse trop moche).

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Oubliez pas qu'il est clairement dit qu'il faut créer les tableaux au niveau du main => exit le redimensionnement ou la création apres avoir demandé la taille.
    Bah, pour moi ça n'empêche rien (enfin, je veux dire que ce n'est pas impossible de le faire) :
    Code pseudocode du main : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    créer tableau de taille 0
    faire {
       saisir question (ou Entrée pour plus aucune question)
       si question n'est pas vide {
            agrandir tableau de 1
            mettre question dans dernière case
            // traitement des réponses
       }
    } tant que question n'est pas vide
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Bah, pour moi ça n'empêche rien (enfin, je veux dire que ce n'est pas impossible de le faire)
    Bah dans l'énoncé, le programme doit boucler (redemander la liste de questions/réponses). Donc si on redimentionne, vu qu'on n'a le droit de créer les tableaux que dans le main, ca veut dire qu'on y fait tout
    M'enfin bon, peu importe. C'est un exercice qui doit etre résolu comme souvent dans ce genre de cas: en essayant de comprendre ce que le prof attend via des contraintes tordues et lui donner. A mon humble avis, il attend un tableau de taille fixe pré-initialisé. Mais je ne suis pas dans sa tete donc je peux me tromper
    D'ailleurs, vu qu'il semble vouloir que les eleves jouent du tableau, il n'est meme pas sur qu'il accepte l'utilisation d'une classe pour factoriser les données relative à une question et ses réponses...

  14. #14
    Candidat au Club
    Homme Profil pro
    Chargé de projets
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci à tous pour vos réponses!

    Effectivement @hwoarang, la contrainte de déclarer le tableau dans le main est absolue, pas le choix de faire autrement (j'ai eu la confirmation). Ca élimine du coup pas mal d'options...
    C'est pas super optimisé (vis à vis de la mémoire allouée et pas forcément utilisée) mais c'est une méthode que je trouve plus simple à appréhender au final.

    Par contre, je me suis heurté à un autre problème (je n'ai pas mon projet sous le coude, je ne peux donc pas mettre mon code...) :
    - quand je fais un System.out.println(monTableau[i][j]), ça m'affiche un message abscond (pour moi) du type [Ljava.lang.String;@186d4c1 et pas le contenu de mon tableau à l'indice[i][j]...
    Qu'est ce que ce message? Est ce que je peux le transformer en texte? Pourquoi ça me sort ce résultat? Quel est l'age du capitaine? Pourquoi le soleil se lève à l'est? Enfin toussa quoi

    Merci encore à tous

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par glmtsr82 Voir le message
    Par contre, je me suis heurté à un autre problème (je n'ai pas mon projet sous le coude, je ne peux donc pas mettre mon code...) :
    - quand je fais un System.out.println(monTableau[i][j]), ça m'affiche un message abscond (pour moi) du type [Ljava.lang.String;@186d4c1 et pas le contenu de mon tableau à l'indice[i][j]...
    Qu'est ce que ce message? Est ce que je peux le transformer en texte? Pourquoi ça me sort ce résultat? Quel est l'age du capitaine? Pourquoi le soleil se lève à l'est? Enfin toussa quoi
    la méthode toString() d'un tableau affiche plus ou moins la même chose que la méthode toString() de Object : un type (ici précédé du [L pour dire que c'est un tableau de, suvi de @ suivi d'une référence interne Java à l'instance de tableau.

    Pour afficher un tableau, tu peux :

    • faire appel aux méthode Arrays.toString(array) pour un tableau à une dimension, ou Arrays.deepToString(array) pour un tableau à plus d'une dimension
    • faire toi-même l'affichage en parcourant le tableau, et en affichant chaque élément, ce qui te permettra de contrôler la façon dont c'est affiché
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par glmtsr82 Voir le message
    Effectivement @hwoarang, la contrainte de déclarer le tableau dans le main est absolue, pas le choix de faire autrement (j'ai eu la confirmation). Ca élimine du coup pas mal d'options...
    Bah, pas tant que ça (sans vouloir m'obstiner La classe Question, ok, c'est possible que tu ne doives pas utiliser de classe) :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public static void main(String[] args) {
     
    do {
     
       int nombreQuestions = demanderNombreQuestions();
     
       Question[] questions = new Question[nombreDeQuestions]; // instanciation dans la méthode main
     
       for(int i=0; i<nombreQuestions; i++) {
     
           System.out.println( "Question " + i );
     
           String question = demanderTexteQuestion();
     
            int nombreDeReponses = demanderNombreDeReponses();
     
            String[] reponses = new String[nombreDeReponses]; // instanciation dans la méthode main
     
            for( int j=0; j<nombreDeReponses; j++ ) {
     
               reponses[j] = demanderTexteReponse();
     
            }
     
            int numeroBonneReponse = demanderNumeroBonneReponse();
     
            questions[i] = new Question( question, reponses, numeroBonneReponse );
     
       }
     
       System.out.println("Début du test");
     
       int[] reponseUtilisateur = new int[nombreDeQuestions]; // dans la méthode main...
       int nombreDeBonnesReponses = 0;
     
       for(int i=0; i<nombreQuestions; i++) {
     
           ...
     
       }
     
     
    } while ( demanderSiRecommencer()) ;
     
    }
    On pourrait même écrire ça (même si je n'aime pas vraiment et que ton prof pourrait ne pas aimer non plus...) :

    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
    20
    21
    22
    23
    public static void main(String[] args) {
     
    		int nbQuestions = 10;
     
    		String[][] questions = new String[nbQuestions][0];
    		int[] bonneReponse = new int[nbQuestions];
     
    		for(int i=0; i<nbQuestions; i++) {
     
    			int nbReponses = 2 + (int)(Math.random()*2); // pour simuler un nombre de réponses différentes au moins égales à 2
     
    			questions[i] = new String[1 + nbReponses]; // le premier élément est la question
     
    			questions[i][0] = "Question " + i;
    			for(int j=0; j<nbReponses; j++) {
    				questions[i][j+1] = "Reponse " + j + " de la question " + i;
    			}
     
    		}
     
    		System.out.println(Arrays.deepToString(questions));
     
    	}
    Qui affiche par exemple (j'ai fait un passage à la ligne pour que ça soit plus flagrant ) :

    [[Question 0, Reponse 0 de la question 0, Reponse 1 de la question 0], 
    [Question 1, Reponse 0 de la question 1, Reponse 1 de la question 1, Reponse 2 de la question 1], 
    [Question 2, Reponse 0 de la question 2, Reponse 1 de la question 2, Reponse 2 de la question 2], 
    [Question 3, Reponse 0 de la question 3, Reponse 1 de la question 3], 
    [Question 4, Reponse 0 de la question 4, Reponse 1 de la question 4, Reponse 2 de la question 4], 
    [Question 5, Reponse 0 de la question 5, Reponse 1 de la question 5, Reponse 2 de la question 5], 
    [Question 6, Reponse 0 de la question 6, Reponse 1 de la question 6, Reponse 2 de la question 6], 
    [Question 7, Reponse 0 de la question 7, Reponse 1 de la question 7], 
    [Question 8, Reponse 0 de la question 8, Reponse 1 de la question 8, Reponse 2 de la question 8], 
    [Question 9, Reponse 0 de la question 9, Reponse 1 de la question 9, Reponse 2 de la question 9]]
    
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    faire toi-même l'affichage en parcourant le tableau, et en affichant chaque élément
    Ben oui mais c'est apparemment ce qu'il a fait avec System.out.println(monTableau[i][j])
    et puis je ne suis pas sûr qu'il ai le droit d'utiliser Arrays.deepToString

    @glmtsr82 Est-ce que monTableau a bien été déclaré comme String[][] ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  18. #18
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Ben oui mais c'est apparemment ce qu'il a fait avec System.out.println(monTableau[i][j])
    et puis je ne suis pas sûr qu'il ai le droit d'utiliser Arrays.deepToString

    @glmtsr82 Est-ce que monTableau a bien été déclaré comme String[][] ?
    Ah, oui je n'avais pas regardé le code utilisé, j'ai déduit de l'affichage qu'il affichait directement un tableau (ce qu'il fait vraisemblablement : est-ce le code qu'il nous donne qui n'est pas celui qu'il utilise, ou a-t-il déclarer un tableau de String[]...)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #19
    Candidat au Club
    Homme Profil pro
    Chargé de projets
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour à tous,

    Encore une fois, merci pour votre aide.

    J'ai bien déclaré mon tableau comme String[][].

    Grace à vous et à ce que j'ai glané à droite à gauche, j'ai réussi à écrire un programme qui fonctionne à peu pret, pour l'instant.
    J'imagine bien qu'on est très loin d'un code parfait et optimisé, mais mon niveau d'exigence est à l'image de mon niveau en java : si ça marche, ça me va

    Ci-dessous, mon code :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class QCM {
     
        public static void main(String[] args) {
            String[][] tab = new String[100][10];    //Tableau contenant les questions et les réponses
            int qIndex=0;    //Variable représentant le n° d'indice de la question
            int rIndex=0;    //Variable représentant le n° d'indice de la réponse
            String quest;    //Variable permettant de tester si une question est vide
            String rep;    //Variable permettant de tester si une réponse est vide
     
            do {System.out.println("Ecrire une question :");
            tab[qIndex][rIndex] = quest = Terminal.lireString();
                //Tester si la question est vide
                if ("".equals(quest)){
                    quest="vide";
                }
                    do {System.out.println("Ecrire une réponse :");
                    rIndex = rIndex + 1;
                    tab[qIndex][rIndex] = rep = Terminal.lireString();
                        //Tester si la réponse est vide
                        if ("".equals(rep)){
                            rep="vide";
                        }
                    } while(rep != "vide");
     
                qIndex = qIndex + 1;   
            } while(quest != "vide");
     
            for(int i=0;i<tab[qIndex].length;i++){
                for(int j=0;j<tab[rIndex].length;j++){
                        System.out.println(tab[i][j]);
                }
            }
        }
     
    }
    Pour info, la classe Terminal est une classe spécifique qui permet de lire les entrées au clavier.

    Après avoir écris ça, je me suis heurté à un nouveau problème : ma boucle pour afficher le contenu de mon tableau, affiche également le contenu "vide" (les null). Comment faire pour que mon println n'affiche que le contenu "non null"?

  20. #20
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Question: pourquoi tu teste parfois tes string avec ==, et parfois avec equals?

    FYI, ça, ça marche pas: while(rep != "vide") (ou plutôt si, ça marche, mais seulement à partir de Java 5, c'est en tout cas pas la bonne manière de faire...)

    Ensuite, pour ton problème, je ne pense pas qu'il faille ajouter une question vide à ta liste de question... ça n'a pas de sens...

    PS: si t'es sous Eclipse (et tu devrais ), fais un ptit Ctrl+Shift+F avant de poster le code (pour notre confort hein...)
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. Agrandir un tableau dynamique
    Par insomniak dans le forum C++
    Réponses: 6
    Dernier message: 22/04/2006, 14h33
  3. AFFICHER UN TABLEAU DYNAMIQUE
    Par ghassenus dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2002, 14h19
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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