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 :

type tableau 2 dimensions


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut type tableau 2 dimensions
    Bonjour,
    j'ai un tableau à 2 dimensions où je veux stocker les infos suivantes:
    Id user --> String
    Id product --> String
    value --> double

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    double [ ][ ] monTab = new double [200][300];
    //après parsing de données je stocke mes valeurs ici
    monTab  [user][product]= value;
    j'ai une erreur par rapport aux type String.
    comment je dois déclarer le type de mon tableau, alors que mes 2 paramètres sont des String?

  2. #2
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Tu utilises des String comme index dans ton tableau. Un index doit être un int, je pense (pas sur).
    Essaie de déclarer user et product comme des int et non comme des String.

    (double)monTab[int][int] = value

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    Oui, les indexes doivent etre int (ou possiblement quelqu'autre type ordinal). Alors, tu dois numeroter tes users et products. Pour ca, tu pourrait faire une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Product> products;
    ou Product est une classe qui tient la description d'un product, et l'index dans celle liste serait aussi l'index dans tonTab, et similairement avec les users.

    Ou, possiblement mieux, tu pourrait utiliser une Map, ou user ou product serait le clef. Possiblement comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map<User,Map<Product,Double>> tonTab;
    (Tu devrait utiliser Double et non pas double avec ca, parce que double n'est pas un Object.)
    Mais le mieux chemin depend d'application.

  4. #4
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    Merci pour vos réponses,
    c'est vrai que l'utilisation des Map, c'est pratique aussi, mais au niveau du temps d'accès au données, c'est pas aussi rapide que les tableaux.
    là j'ai modifié mes données en entrée, j'ai l'Id User et l'Id product de type int, le seul problème est que les identifiants sont sous forme de:
    userID: 34672
    produitID : 49680

    quand je crée mon tableau et je l'alimente avec les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int Tabl [][] = new int [500][1000]
    .....
    //dans ma methode d'ajout des donnees dans le tableau
    if (userID!=0){
    tabl[userID][produitID]=prix;
     
    }
    j'ai une erreur de type: java.lang.ArrayIndexOutOfBoundsException
    parce que l'userID N°34672 le place dans l'index du tableau portant ce N°

    et quand j'essaie d'augmenter la taille du tableau, j'ai une "java heap space"
    je sais plus comment faire.
    Help please!!

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    Je pense que ce que j'ai decris est une bonne solution: cree une List avec tes produits, et utilise l'index d'un produit comme l'index dans tonTab. Et cree une autre List avec tes usagers, et utilise l'index d'un user comme l'index dans tonTab. Avec ca, les indexes seraient les nombres petits.

  6. #6
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    là j'ai essayé de passer par les hashmap pour éviter les pb des ID:

    j'ai créé 2 hashmap:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    HashMap <Integer,HashMap> UserMap = new HashMap <Integer,HashMap>();
    HashMap <Integer,Double> UserPr = new HashMap <Integer,Double>();
    .....
    userPr.put(product,price);
    UserMap.put(userID,UserPr);
    là ça marche mieux, mais j'ai un petit souci : dans ma hashMap "userPr" j'ai en keySet l'ensemble des productID, mais il en manque 1, sa valeur est remplacée par un 0. c'est le 1er productID de la liste en fait.
    comment je fais pour éviter d'avoir dans ma hashMap une 1ère clé = 0 ?
    Merci.

Discussions similaires

  1. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50
  2. Réponses: 6
    Dernier message: 12/10/2003, 14h57
  3. Réponses: 23
    Dernier message: 21/08/2003, 07h16
  4. Fonction de type tableau
    Par Charles f dans le forum Langage
    Réponses: 5
    Dernier message: 04/08/2002, 14h04

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