Partage
  • Partager sur Facebook
  • Partager sur Twitter

objectifs est de paramétré par le type E la pile

    23 août 2017 à 5:16:54

    public class MyStack{
        private final String[] array;
        public int top;
        public MyStack(int capacity){
            this.array = new String[capacity];
        }
    
        public boolean isEmpty(){
            return top == 0;
        }
    
        public boolean isFull(){
            return top == array.length;
        }
    
        public void push(String elem){
            array[top++] = elem;
        }
    
        public String pop(){
            top--;
            String elem = array[top];
            array[top] = null;
            return elem;
        }
    }

     j'arrive pas à paramétrer le tableau array  et l'initialiser dans le constructeur ou bien c'est pas possible de le paramétrer ?? est ce qu'il faut utiliser arrayList !!?

    je m'exerce sur les types paramétrés et je suis coinci sur ce petit exercice.

    la question  c'est : réécrivez cette classe en la paramétrant par le type E .

    • Partager sur Facebook
    • Partager sur Twitter
      23 août 2017 à 7:18:48

      Bonjour,

      Une solution "sale" mais qui marche est de créer un tableau d'Object puis de faire un cast en tableau de E.

      E[] array = (E[]) new Object[capacity];

      C'est moche mais on ne peut pas faire autrement. On peut éventuellement utiliser la réflexivité pour créer le tableau mais ça complique la tâche et le cast reste obligatoire.

      • Partager sur Facebook
      • Partager sur Twitter
        23 août 2017 à 9:06:52

        Ça ne serait pas juste un truc du genre:

        public class MyStack<E>{
            private final Object[] array;
            public int top;
            public MyStack(int capacity){
                this.array = new Object[capacity];
            }
         
            public boolean isEmpty(){
                return top == 0;
            }
         
            public boolean isFull(){
                return top == array.length;
            }
         
            public void push(E elem){
                array[top++] = elem;
            }
         
            public E pop(){
                top--;
                E elem = (E) array[top];
                array[top] = null;
                return elem;
            }
        }

        Il n'est pas important que ton tableau soit de type E.

        • Partager sur Facebook
        • Partager sur Twitter
          23 août 2017 à 10:00:45

          Ca marche aussi. C'est comme ça qu'est implémentée la classe ArrayList.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            23 août 2017 à 10:01:46

            Là plupart du temps on voit ce genre d'initialisation

            public class MyStack{
                private final String[] array;
                public MyStack(String a[]){
                    this.array = a;
                }
            

            L'initialisation se faisant lors de l'instanciation de la classe.

            • Partager sur Facebook
            • Partager sur Twitter
              23 août 2017 à 11:11:05

              Alors ça, c'est vraiment moche. Dans ce cas, la classe ne peut plus garantir le respect des invariants et devient donc inutilisable. Enfin, on peut toujours l'utiliser mais sans aucune garantie de fiabilité puisque le tableau peut être modifié depuis l'extérieur de la classe.

              Après, c'est comme d'habitude une histoire de compromis entre un code plus efficace ou un code moins buggé. En Java, j'aurais tendance à dire qu'on privilégie la propreté du code moyennant une petite perte de performance le plus souvent insignifiante.

              • Partager sur Facebook
              • Partager sur Twitter

              objectifs est de paramétré par le type E la pile

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown