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

avec Java Discussion :

les tableaux exercice


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut les tableaux exercice
    salut,

    sur un article sur les "collections d'objets ,prise en mains"(frederic mora) sur ce site
    il y a des exercices pour pratiquer dont celui ci :

    Créer une classe Tableau qui a comme attribut un tableau d'entiers. Le constructeur par défaut initialise ce tableau à 10 éléments. Elle possède également une fonction qui remplit le tableau de valeurs au choix, et une fonction qui affiche les valeurs contenues dans le tableau. Créer une fonction sort() qui trie le tableau. Vous pouvez utiliser une fonction de tri déjà définie dans le JDK.
    Créer une classe AppliTableau qui crée un objet Tableau, qui le remplit, l'affiche, le trie et le réaffiche.

    et je ne trouve pas la correction promise et l'auteur de l'article est injoignable...


    du fait si qqn peut m'aider je crois avoir compris la premiere partie mais j'ai un bug pour la seconde..
    ps:je debute en java

    du coup j'ai cree une classe Tableaux comme ca
    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
    import java.util.Arrays;
     
    public class Tableaux {
     
    	//intialisation des variables 
    	//et du tableaux
    	static int vt;//valeur triées
    	static int vi;//valeur initiale
    	static int m=100;//variable pour 0 a 100
    	static int tab[];//initialisation d'un tableau vide
     
    	public Tableaux()
    	{	 
    	  tab=new int [10];
    	}
    		public static void aleatoire(int vi){
     
    			for(int i=0;i<10;i++)
    		{
    			vi=(int)(m*Math.random());//calcul du nombre aléatoire
     
     
    			tab[i]=vi;
     
     
    			System.out.println("a l'index = " +i + " j'ai = " +vi);
    		}
    		}
     
    		public static void tri(int vt){
     
    			Arrays.sort(tab);
     
    			for(int i=0;i<tab.length;i++)
    			{
     
    				tab[i]=vt;
     
     
    		System.out.println("a l'index = " +i + " j'ai = " +vt);
    			}
    			}
    1/deja est ce que ca semble correcte
    2/je comprends pas la suite pour la creation de la classe AppliTableau...
    j'ai commence par faire ca :

    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 TBx {
     
     
    	   public static void main(String[] args) {
     
    		  Tableaux t=new Tableaux();
     
     
     
     
     
     
     
    	   }
     
    }
    j'ai crée un objet tableau (je crois...) et après moi perso je compile plus

    Si vous pouvez m'aider???

  2. #2
    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,

    1. Le plus gros problème de ta classe Tableaux est que les attributs sont statiques, donc partagés entre toutes les instances. Ce qui veut dire que si tu crées 2 instances de cette classe, elles vont se partager le tableau tab, ce qui n'est pas le but. Le but est de pouvoir créer autant d'instances différentes et qu'elles aient chacune leurs propres valeurs.

      On peut utiliser parfois des stockages statiques (c'est en général une mauvaise pratique parce que ça ne permet pas de faire des programmes très évolutifs, mais ça peut simplifier certaines choses pour de petits programmes limités). Mais dans ce cas, il est abérant d'initialiser les variables statiques dans un constructeur : un constructeur est fait pour construire une instance. Il y a donc opposition entre la notion de variables statiques et d'initialisation de ces variables dans un constructeur.

      De la même façon, les méthodes qui manipulent les attributs (non static donc) doivent ne pas être static.

      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
      public class Tableau {
       
      	final int tab[];//initialisation d'un tableau vide
       
          public Tableaux() {	 
             tab=new int [10];
          }
       
          public void remplir(){
               /**....**/
          }
       
          public void trier(){
               /**....**/
          }
       
          public String toString(){
               /**....**/
          }
       
      }
    2. Pour ce qui est de ta méthode de remplissage :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      public static void aleatoire(int vi){
       
      			for(int i=0;i<10;i++)
      		{
      			vi=(int)(m*Math.random());//calcul du nombre aléatoire
       
       
      			tab[i]=vi;
       
       
      			System.out.println("a l'index = " +i + " j'ai = " +vi);
      		}
      		}
      déjà, je trouve le sujet pas très clair, et il semble que le corrigé promis n'existe pas. Le sujet parle de remplir le tableau de valeurs au choix. Je dirais que ça signifie qu'on veut pouvoir choisir les valeurs, donc ne pas utiliser de remplissage aléatoire. Ce qui n'est pas précisé si c'est on veut mettre les valeurs une par une, ou toute d'un coup. A priori, "remplir" veut dire "toutes d'un coup".
      Dans le doute, parlons de toutes les solutions :
      1. Le remplissage aléatoire : ta méthode
        Déjà, supprimons le static.
        La première erreur que tu fais est de déclarer un argument à la méthode. Cette argument étant utiliser uniquement pour générer une valeur aléatoire et la stocker dans le tableau. Elle n'a donc aucune raison d'être un argument. Et en plus, c'est plutôt gênant qu'elle soit en argument. Parce que ça veut dire qu'on devrait l'appeler de cette façon :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        Tableaux tableau = new Tableaux();
        tableau.aleatoire( unevaleur );
        Mais quelle valeur ? N'importe quoi, de toute manière, la valeur n'étant utilisée nulle part, donc par exemple :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        Tableau tableau = new Tableau();
        tableau.aleatoire( 42 );
        Mais à quoi ça sert d'avoir à passer un paramètre s'il ne sert à rien ?

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        public void aleatoire(){
         
             for(int i=0;i<10;i++) {
        			int vi=(int)(m*Math.random());//calcul du nombre aléatoire
         			tab[i]=vi;
             }
         
        }
        A la limite vi ne sert à rien non plus, donc autant écrire :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        public void aleatoire(){
         
             for(int i=0;i<10;i++) {
         	   tab[i]=(int)(m*Math.random());//calcul du nombre aléatoire;
             }
         
        }
        Pourquoi pas utiliser une variable m pour définir les bornes de la génération aléatoire ? Mais pourquoi le faire ? L'exercice n'en parle pas. Autant ne pas le faire.
        Pour simplifier la génération aléatoire de valeur de type int, on pourra utiliser la classe Random :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        public void aleatoire(){
         
             Random random = new Random(); 
             for(int i=0;i<10;i++) {
         	   tab[i]=random.nextInt();//calcul du nombre aléatoire;
             }
         
        }
        Si tu tiens à utiliser ta variable m, tu pourras écrire :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        public void aleatoire(){
         
             Random random = new Random(); 
             for(int i=0;i<10;i++) {
         	   tab[i]=random.nextInt(m);//calcul du nombre aléatoire;
             }
         
        }
      2. Si on veut faire une méthode qui permet de remplir le tableau de valeurs aux choix, on pourra écrire une méthode comme ça :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        public void setValeur(int index, int valeur) {
               tab[index]=valeur;
        }
        Ce qui permet de remplir le tableau comme ça :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        Tableau tableau = new Tableau();
        for(int i=0; i<10; i++) {
        tableau.setValeur(i, i*7); // par exemple, avec les valeurs de table de multiplication par sept
        }
      3. Si on veut faire une méthode qui permet de remplir le tableau de plusieurs valeurs au choix, on pourra écrire :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        public void setValeurs(int[] valeurs) {
            for(int i=0; i<valeurs.length && i<tab.length; i++) { // avec ce bornage on évite toute exception (si valeurs à plus de 10 valeurs, ça ne prendra que les 10 premières, s'il en a moins de 10, ça n'affectera que celles fournies
               tab[i]=valeurs[i];
            }
        }
        On appelle la méthode comme ça :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        Tableau tableau = new Tableau();
        tableau.setValeurs(new int[]{8, 55, 1, 21, 3, 2, 34, 5, 13, 1});
        Pour faciliter l'appel de la méthode, on pourra écrire :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        public void setValeurs(int...valeurs) {
            for(int i=0; i<valeurs.length && i<tab.length; i++) { // avec ce bornage on évite toute exception (si valeurs à plus de 10 valeurs, ça ne prendra que les 10 premières, s'il en a moins de 10, ça n'affectera que celles fournies
               tab[i]=valeurs[i];
            }
        }
        Ce qui permet d'appeler la méthode comme ça :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        Tableau tableau = new Tableau();
        tableau.setValeurs(8, 55, 1, 21, 3, 2, 34, 5, 13, 1);

    3. Voyons maintenant ta méthode tri
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      public static void tri(int vt){
       
      			Arrays.sort(tab);
       
      			for(int i=0;i<tab.length;i++)
      			{
       
      				tab[i]=vt;
       
       
      		System.out.println("a l'index = " +i + " j'ai = " +vt);
      			}
      			}
      Donc, pareil, on vire le static. Pareil que pour le remplissage aléatoire, on vire le paramètre qui est superflu et gênant.
      Maintenant, Arrays.sort(tab) tri le tableau. A quoi sert donc la boucle après ? Tu dois bien te rendre compte qu'elle remplace toutes les valeurs du tableau par la valeur de vt, non ? Donc quand tu vas trier ton tableau, tu perdras toutes les valeurs qu'il contient et il sera remplit de la valeur de vt (qui vaut 0).
      Voilà la méthode :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      public void trier(){
       
      			Arrays.sort(tab);
      }
      Il n'y a rien d'autre à faire.
    4. Afficher le tableau. On demande de faire ça dans l'exercice. A priori il s'agit de faire une méthode afficher() qui affiche le tableau dans la console.

      par exemple :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      public void afficher() {
         for(int i=0; i<10; i++) {
               System.out.println(i+": "+tab[i]); 
         }
      }
      Ou en utilisant la méthode du JDK :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      public void afficher() {
               System.out.println(Arrays.toString(tab)); 
      }
      Bon, en pratique, on ne fait jamais de telles méthodes : c'est hyper restrictif. Si on veut imprimer le tableau, cette méthode ne sert à rien. Si on veut le sauvegarder dans un fichier, ou l'afficher dans une image, idem.
      Déjà, on préfère coder la méthode toString() pour avoir une version affichable rapidement en console. On pourra par exemple faire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      public String toString() {
              return Arrays.toString(tab); 
      }
      Ce qui permettra d'afficher le tableau comme ça :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      Tableau tableau = new Tableau();
      tableau1.setValeurs(8, 55, 1, 21, 3, 2, 34, 5, 13, 1);
      System.out.println(tableau);



    Maintenant, le dernier point de l'exercice de faire un programme qui teste l'ensemble : le remplissage, le tri, et l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class AppliTableau {
       public void static main(String[] args) {
           Tableau tableau = new Tableau();
           tableau.setValeurs(8, 55, 1, 21, 3, 2, 34, 5, 13, 1);
           System.out.println("Avant le tri : " + tableau);
           tableau.trier();
           System.out.println("Après le tri : " + tableau);
       }
    }
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut merci
    salut

    merci pour ta reponse effectivement y'avait pas mal d'erreur c'est pour ca que je fais des exos je te cache pas que je galere un peu car je debute en prog
    apres il est vrai que l’énoncé au niveau du remplissage du tableau etait pas tres clair j'ai eu du mal a savoir quoi faire dans un premier temps mais grace au divers cas que tu as expose je m'y retrouve un peu mieux
    vraiment merci ..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exercice sur les tableaux
    Par sayari7 dans le forum Pascal
    Réponses: 2
    Dernier message: 06/12/2008, 15h23
  2. aide pour un exercice sur les tableaux
    Par mimiif dans le forum Caml
    Réponses: 9
    Dernier message: 30/05/2008, 15h49
  3. Réponses: 11
    Dernier message: 04/02/2008, 20h37
  4. Exercice sur les tableaux
    Par IDE dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 06/11/2006, 19h33

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