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 :

Souci pour remplir un tableau de type nombre différent avec des valeurs de type int


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Points : 52
    Points
    52
    Par défaut Souci pour remplir un tableau de type nombre différent avec des valeurs de type int
    Bonjour;

    Je cherche à remplir un tableau de type nombre de façon aléatoire.
    Mais le problème est que le sous programme(fonction) qui génère les nombres pour remplir le tableau est de type int,ainsi que le sous programme contenant les instructions de la fonction random().
    Le sous programme contenant la fonction random m'a été fournis ainsi que le fichier nombre du coups je ne vois pas comment faire pour le remplir ce tableau.
    car mon IDE m'affiche erreur car il ne peut pas convertir int en nombre, j'ai besoin de votre aide pour savoir quel technique je pourrais utiliser pour remplir le tableau ou faire la conversion, voici les codes des 3 fichiers

    Programme principale:

    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
    public class Prog{
        
        public static void main(String Args[]){
            
            //Declaration des variables
            int taille = 6;
            Nombre tab[] = new Nombre[taille];
            char tabChar[];
            
           
           
        //Message de du description du programme
        System.out.println("****Binevenue à mon programme le compte est bon****");    
        }
        
        //Sous programme qui remplie le tableau avec des valeurs généré aléatoirement
       //par la fonction math
    
        public static int genererNombre(Nombre[] tab){
            FonctionMath F = new FonctionMath();
            Nombre nombre;
            
            //Pour remplire le tableau
            for(int i = 0; i < tab.length-1; i++ ){
                tab[i] = FonctionMath.alea(1,100); /// Je suis bloqué sur cette partie
                
            }
            
            
            return tab;
        }
    ////***Le module contenant la fonction charger de générer les chiffres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class FonctionMath{
     
    	public static int alea(int min,int max)
    	{
    		//Stratégie, on utilise le générateur de Java qui retourne une valeur réelle
    		//entre 0 et 1[  ensuite, on le ramène dans l'intervalle min..max et on 
    		//le transforme en entier
    		return (int) (Math.random() * (max - min + 1) + min);
    	}
    }
    ***///Le ficher Nombre***///

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Nombre {
     
    	//Attributs
    	int nombre;
    	boolean choisi;
    }
    Merci d'avance

  2. #2
    Membre actif Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Points : 293
    Points
    293
    Par défaut
    salut,
    il y a beaucoup d'anomalies dans ton code! et c'est normal que tu n'arrive pas à remplir ton tableau puisque il est destiné à contenir des objets de type Nombre et non pas des int ce qui n'est pas pareil!
    si pour toi un nombre est la même chose qu'un entier, le programme ne voit pas les choses de cette façon, car
    un int est une variable de type entier, mais nombre dans:
    public static int genererNombre(Nombre[] tab){
    FonctionMath F = new FonctionMath();
    Nombre nombre;

    //Pour remplire le tableau
    for(int i = 0; i < tab.length-1; i++ ){
    tab[i] = FonctionMath.alea(1,100); /// Je suis bloqué sur cette partie

    }


    return tab;
    }
    n'est pas un nombre ni un entier,encore moins un int; c'est juste un objet de type Nombre que tu aurais pu appeler Voiture ou Chien ça ne changerait rien!
    maintenant pour remplir ton tableau destiné à contenir des Nombre avec des int, tu n'a qu'à agir sur la classe Nombre, par exemple avec un constructeur auquel tu feras passer un int en paramètre(le int que génère random()) comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Nombre {
          public Nombre(int i){
             nombre=i; 
          }
    	//Attributs
    	int nombre;
    	boolean choisi;
    }
    ensuite pour remplir le tableau tu peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tab[i] =new Nombre (F.alea(1,100));
    mais il y a des erreurs dans ton code; par ex la fonction genererNombre :
    public static int genererNombre(Nombre[] tab){
    ......

    return tab;
    }
    doit renvoyer un int mais toi c'est tab un tableau de Nombre que tu retourne non pas un int!
    et ta fonction, il vaut mieux la mettre ailleurs que dans main!

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Et tu fais comment d'habitude poour créer un objet Nombre?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    OK merci pour les explications; en fait je sais que mon code renferme beaucoup d'anomalie comme je suis débutant en programmation actuellement il y a beaucoup des choses qui m’échappe surtout les conversions ou bien le manipulations des objets.

    Concernant le code je l'ai ajusté un peu maintenant il marche mais lorsque je l'exécute il me renvoi l'adresse memoir du tabNombre, j'aimerais savoir
    comment faire pour qu'il me renvoi les valeurs du tableau, merci d'avance.
    Le code est ci-dessous

    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
    /*
     * Programme qui démande à l'utilisaeur de jouer
     * avec des valeur definie aléatoirement
     */
    package TP_Java;
     
    /**
     *
     * Debutant en Java
     */
    import java.util.Random;
    import java.util.Scanner;
     
    public class LeCompteEtBon {
     
        public static void main(String Args[]){
     
            //Declaration des variables
            int taille = 6;
            int i = 0;
            Nombre tabNombre[] = new Nombre[taille];
            char tabChar[];
     
        //Message de description du programme
        System.out.println("****Binevenue à mon programme le compte est bon****");
        //Affichage de la liste des valeurs 
        System.out.println("Choissez vos valeurs dans cette liste "+genererNombre(tabNombre));
        }
     
        //Sous programme qui traite le jeux
        public static Nombre[] genererNombre(Nombre[] tabNombre){
            FonctionMathUtilitaire F = new FonctionMathUtilitaire();
            Nombre nombre;
     
            //Pour remplire le tableau
            for(int i = 0; i < tabNombre.length-1; i++ ){
                tabNombre[i] = new Nombre(F.alea(1,100));
     
            }
            return tabNombre;
        }
    }

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Pour convertir le contenu d'un Tableau en String, il faut utiliser Arrays.deepToString(tonTableau). Pour convertir ton Nombre en String, il faut que nombre redéfinisse la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String toString()
    . Quand tu aura fais les deux tu pourra afficher quelque chose d'utile à partir de ton tableau.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Pour convertir le contenu d'un Tableau en String, il faut utiliser Arrays.deepToString(tonTableau). Pour convertir ton Nombre en String, il faut que nombre redéfinisse la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String toString()
    . Quand tu aura fais les deux tu pourra afficher quelque chose d'utile à partir de ton tableau.
    Bonjour;

    Merci pour ton intervention, mais je n'ai pas bien compris tes explications, j'ai essayé quand même de créer une methode public String toString() mais je but sur le même message impossible de convertir Nombre en String. Tout de même en utilisant dans la methode main Array.deepToString(tabNombre) j'ai une liste de 6 mots, la taille de mon tableau; l'adresse mémoire des valeurs de mon tableau quelque choses qui ressemble à ça "TP_Java.Nombre@40545646".

    Merci d'avance

  7. #7
    Membre actif Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Points : 293
    Points
    293
    Par défaut
    Bonjour,
    ce que tchize_ veut dire c'est que tu ne peux pas afficher tes Nombres tels quels,il faut auparavant transformer tes objets en String en redéfinissant notamment toString() dans ta classe Nombre;

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Points : 52
    Points
    52
    Par défaut
    Merci à vous tous pour votre aide, finalement ça marche.

    Il fallait juste mettre ce code dans la module Nombre

    public String toString() {
    return String.valueOf(nombre);
    }

    ensuite ce code dans la fonction main

    Arrays.toString(genererNombre(tabNombre));

    Pour avoir les valeurs du tableau.

    Une autre question svp, après avoir pu récupérer les valeurs du tableau; y a t'il un moyen de changer le type du tableau au lieu de Nombre le convertir en double ou int plus facile à manipuler car je cherche à créer un autre sous programme qui permet de faire 4 opération(+, - , * , /) des nombre récupérer depuis le tableau.

    **********************************
    Le code principale
    ***********************************
    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
     
     
    import java.util.Arrays;
    import java.util.Random;
    import java.util.Scanner;
     
    public class LeCompteEtBon {
     
        public static void main(String Args[]){
     
            //Declaration des variables
            int taille = 7;
     
            Nombre tabNombre[] = new Nombre[taille];
            char tabChar[];
     
        //Message de description du programme
        System.out.println("****Binevenue à mon programme le compte est bon****");
        //Affichage de la liste des valeurs     
        System.out.println(
                "********La liste des nombre est :*******\n"
                +Arrays.toString(genererNombre(tabNombre)));
        System.out.println("*************************************");
        System.out.println("******Nombre d'operation obligatoire 4*****");
        System.out.println("La cible est : 41 ");
        System.out.println("**********************");
     
     
        }
     
     
        public static Nombre[] genererNombre(Nombre[] tabNombre){
     
            FonctionMathUtilitaire F = new FonctionMathUtilitaire();
            Nombre nombre;
     
            //Pour remplire le tableau
            for(int i = 0; i <= tabNombre.length-1; i++ ){
                tabNombre[i] = new Nombre(F.alea(1,100));
     
            }
            return tabNombre;
        }
     
    }
    ***********************************
    Le module qui permet remplir le tableau aleatoirement
    ************************************
    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 class FonctionMathUtilitaire {
     
     
    	 */
    	public static int alea(int min,int max)
    	{
    		return (int) (Math.random() * (max - min + 1) + min);
    	}
     
     
    }
    **********************
    Le module Nombre
    **********************
    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
     
    public class Nombre {
       //Attributs
     
          public Nombre(int i){
             nombre=i; 
          }
    	//Attributs
    	int nombre;
    	boolean choisi;
     
            public String toString() {
            return String.valueOf(nombre);
                }
    }
    Merci d'avance.

  9. #9
    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,
    Citation Envoyé par Khalfe Voir le message
    y a t'il un moyen de changer le type du tableau au lieu de Nombre le convertir en double ou int plus facile à manipuler
    Oui. Mais il faudrait déjà pourvoir accèder à la valeur de nombre du Nombre à l'extérieur de cette classe. La portée de l'attribut nombre est une portée "package" (la portée par défaut), ce qui te permet d'y accèder directement depuis toutes les classes du package, donc dans le cadre de ton exercice, on peut y accèder directement. Habituellement, on préfère limiter l'accès aux attributs pour éviter qu'on les modifie n'importe comment, ce qui se fait par une portée private, et on ouvre l'accès externe par un accesseur (ou getter) :
    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
     
    public class Nombre {
       //Attributs
     
          public Nombre(int i){
             nombre=i; 
          }
    	//Attributs
    	private int nombre;
    	private boolean choisi;
     
           public int getValeur() {
                return nombre;
           }
     
            public String toString() {
            return String.valueOf(nombre);
                }
    }
    Au passage,
    1. La convention est de mettre les variables de classes au début de la classe.
    2. Une indentation propre améliore la lisibilité

    Soit :
    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
     
    public class Nombre {
     
        //Attributs
        private int nombre;
        private boolean choisi;
     
        public Nombre(int i){
            nombre=i; 
        }
     
        public int getValeur() {
            return nombre;
        }
     
        public String toString() {
            return String.valueOf(nombre);
        }
     
    }
    Ensuite, pour obtenir un tableau de int à partir d'un tableau de Nombre, on procède simplement par copie case par case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Nombre[] tableauDeNombre = ...
    int[] tableauDeInt = new int[tableauDeNombre.length];
    for(int i=0; i<tableauDeNombre.length; i++) {
       tableauDeInt[i]=tableauDeNombre[i].getValeur();
    }
    On pourra faire en Java 8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nombre[] tableauDeNombre = ...
    int[] tableauDeInt = Arrays.stream(tableauDeNombre).mapToInt(Nombre::getValeur).toArray();
    Mais lorsqu'on fait une classe, comme Nombre, c'est dans le but de manipuler cette classe, pas de convertir ça en autre chose pour se simplifier la vie, sinon la classe d'origine ne sert pas à grand chose (juste à stocker un nombre et un booléen, donc on ne se sert pas).

    Par exemple, pour l'addition, on pourra créer des méthodes comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Nombre {
     
        /*... je ne recopie pas tout ... */
     
        public Nombre ajouter(Nombre ajout) {
              return ajouter(this, ajout);
        }
     
        public static Nombre ajouter(Nombre nombre1, Nombre nombre2) {
              return new Nombre(nombre1.getValeur() + nombre2.getValeur());
        }
     
    }
    Si tu ne veux pas créer un nouveau Nombre, tu peux faire par exemple :
    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
    public class Nombre {
     
        /*... je ne recopie pas tout ... */
     
        public Nombre ajouter(Nombre nombre) {          
              return ajouter(nombre.getNombre());
        }
     
        public Nombre ajouter(int valeur) {
     
              nombre += valeur;
              return this;
     
        }
     
    }
    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.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2015, 01h50
  2. Réponses: 6
    Dernier message: 24/06/2014, 15h25
  3. Lier des tables avec des valeurs de type texte ?
    Par baptistehgc dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2012, 12h10
  4. Soucis pour remplir un PageControl
    Par olkainry dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/01/2006, 07h22

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