Comment créer une matrice de dynamique extensible en Java sans utiliser les classes pré-faites?

StackOverflow https://stackoverflow.com/questions/2914281

  •  04-10-2019
  •  | 
  •  

Question

Oui, il est une question de devoirs, si givemetehkodezplsthx! :)

Quoi qu'il en soit, voici ce que je dois faire:
Je dois avoir une classe qui compte parmi ses attributs tableau d'objets d'une autre classe. La bonne façon de le faire à mon avis, serait d'utiliser quelque chose comme LinkedList, Vector ou similaire. Malheureusement, la dernière fois que je l'ai fait, je suis arrivé feu et de soufre de mon professeur, parce que, selon sa croyance que j'utilisais des choses avancées sans bases compréhension.

Maintenant la prochaine solution évidente serait de créer une matrice avec un nombre fixe d'éléments et d'ajouter des contrôles pour obtenir et définir qui verra si le tableau est complet. Si elle est pleine, ils avaient créer de nouvelles plus tableau, copier les données de tableau ancien au nouveau tableau et de retourner le nouveau tableau à l'appelant. Si elle est presque vide, ils avaient créer de nouveaux petits tableaux et déplacer les données de l'ancien tableau à nouveau. Pour moi, cela ressemble un peu stupide. Pour mes devoirs, il ne sera probablement pas plus que 3 éléments dans un tableau, mais je voudrais faire une solution évolutive sans calcul des statistiques sur la façon dont est souvent rempli manuellement tableau, quel est le nombre moyen de nouveaux éléments ajoutés, puis en utilisant les résultats de calcul pour calculer le nombre d'éléments dans la nouvelle matrice et ainsi de suite.

Par ailleurs, il n'y a pas besoin de supprimer des éléments du milieu du tableau.

Des conseils?

Était-ce utile?

La solution

class test {
    private Object[] objects;
    private int size;

    public test() {
        objects = new Object[10];
        size = 0;
    }

    public void push(Object o) {
        if (objects.length == size) {
            throw new RuntimeException("This wouldn't happen if I didn't have to reinvent the wheel");
        }
        objects[size] = o;
        size++;
    }

    public Object pop() {
        size--;
        Object o = objects[size];
        objects[size] = null;
        return o;
    }
}

Just kidding. Je pense que vous êtes le meilleur pari est de mettre en œuvre votre propre liste, et utiliser ensuite que, dans votre classe. Quelque chose comme:

class Element {
    Object val;
    Element next;
    Element prev;

    public Element(Object val, Element next, Element prev) {
        this.val = val;
        this.next = next;
        this.prev = prev;
    }

}

class LinkedList {
    Element head;
    Element tail;

    public void add(Object o) {
        Element el = new Element(o, null, tail);
        tail.next = el;
    }

    public Object remove() {
        Element o = tail;
        tail = o.prev;
        tail.next = null;
        return o.val;
    }
}

Autres conseils

Une chose que vous voulez faire est quand vous devez développer la taille de votre tableau créer un tableau qui est la taille de l'ancien tableau deux fois. De même, si vous avez besoin de réduire la taille du tableau de hte, ne le faire une fois que le tableau est à moitié plein.

Il sera donc vous devez faire beaucoup moins de copies du tableau.

Faire cela, il sera nécessaire de garder une variable qui garde la trace de la taille réelle du tableau parce que la longueur du tableau représentera pas avec précision la taille réelle.

Pour copier un tableau existant dans un plus petit ou plus grand, vous pouvez trouver System#arrayCopy() utile.

Coup d'envoi par exemple:

Object[] originalArray = new Object[3];
// ...
Object[] resizedArray = new Object[originalArray.length + 2]; // Grow with 2.
System.arrayCopy(originalArray, 0, resizedArray, 0, originalArray.length);

Cette copie les articles sur toute la longueur de originalArray en début de resizedArray. Les 2 fentes à la fin de resizedArray sont null encore pour que vous puissiez l'utiliser pour d'autres articles.

Cela doit vous aider à démarrer. Bonne chance:)

est-il pour une classe de structures de données? Sons comme votre professeur vous attend à mettre en œuvre votre propre lié ??la structure de données List ou quelque chose au lieu d'utiliser la même l'un Java fournit. Google et votre livre de texte (s) sont à votre ami.

Si je me souviens bien, la classe ArrayList fonctionne en ayant un tableau de taille fixe (avec une capacité initiale de tout ce que vous définissez) qui redimensionne à peu près de la façon dont vous avez décrit quand il est plein.

Vous pouvez utiliser une liste chaînée, bien que par les sons de celui-ci votre professeur vous veut programmer ce genre de choses par vous-même, afin de créer votre propre classe démontrant que vous savez comment cela fonctionne?

Je pense que la façon vraiment facile: p que nous ne pouvons pas faire en C, mais peut le faire en java

package javaapplication21;

import java.util.Scanner;
public class JavaApplication21 {
    public static void main(String[] args) {
       int a;
       Scanner obj=new Scanner(System.in);
       System.out.print("Enter array size=");
       a=obj.nextInt();
       int b[]=new int[a];
       for(int i=0;i<b.length;i++){
          System.out.println(b[i]+i);
       }
   }
}
scroll top