Domanda

Si, è una questione compiti a casa, così givemetehkodezplsthx! :)

In ogni caso, ecco cosa ho bisogno di fare:
Ho bisogno di avere una classe che avrà tra i suoi attributi array di oggetti di un'altra classe. Il modo corretto di fare questo a mio parere potrebbe essere quella di usare qualcosa come LinkedList, Vector o simili. Purtroppo, l'ultima volta che l'ho fatto, ho preso fuoco e zolfo dal mio professore, perché secondo la sua convinzione che stavo usando cose avanzate, senza basi comprensione.

Ora la prossima soluzione ovvia sarebbe quella di creare array con numero fisso di elementi e aggiungere i controlli per ottenere e impostare che vedere se l'array è pieno. Se è piena, avrebbero creano nuovo array più grande, copiare i dati maggiore di matrice per il nuovo array e restituire il nuovo array al chiamante. Se è quasi vuoto, avrebbero creano nuovo array e spostare i dati più piccoli da vecchia serie alla nuova. A me questo sembra un po 'stupido. Per il mio lavoro, probabilmente non ci sarà più di 3 elementi di un array, ma mi piacerebbe fare una soluzione scalabile senza calcolare manualmente le statistiche su come spesso è array riempito, qual è il numero medio di nuovi elementi aggiunti, poi utilizzando i risultati di calcolo per calcolare numero di elementi in nuovo array e così via.

A proposito, non v'è alcuna necessità di rimuovere elementi dal centro della matrice.

Qualche consiglio?

È stato utile?

Soluzione

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;
    }
}

solo scherzando. Penso che tu sia cosa migliore è di implementare la propria lista collegata e quindi utilizzare tale nella tua classe. Qualcosa di simile:

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;
    }
}

Altri suggerimenti

Una cosa che si vuole fare è quando si ha bisogno per crescere la dimensione della matrice creare una matrice che è il doppio della vecchia matrice. Allo stesso modo, se avete bisogno di ridurre la dimensione della matrice HTE, farlo solo una volta che la matrice è mezzo pieno.

In questo modo sarà quindi bisogna fare molto meno copie di array.

Questo renderà necessario mantenere una variabile che registra la dimensione effettiva della matrice, poiché la lunghezza della matrice non rappresenterà accuratamente la dimensione effettiva.

Per copiare un array esistente in un più piccolo o più grande, si può trovare System#arrayCopy() utile.

Kickoff esempio:

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

Questo copierà gli elementi su tutta la lunghezza del originalArray nella inizio resizedArray. I 2 slot a fine resizedArray sono ancora null in modo che si può utilizzare per altre voci.

Questo deve iniziare. Buona fortuna:)

E 'per una classe strutture di dati? Suona come il vostro professore si aspetta di implementare il proprio Linked List struttura dati o qualcosa di simile, invece di utilizzare quello Java fornisce. Google e il tuo libro di testo (s) sono tuo amico.

Se non ricordo male, la classe ArrayList funziona avendo un array di dimensioni fisse (con una capacità iniziale di quello che imposti) che ridimensiona in praticamente il modo in cui si descrivono quando è pieno.

Si potrebbe utilizzare una lista collegata, anche se dai suoni di esso il tuo professore ti vuole programmare queste cose da soli, in modo da creare una classe dimostrando di sapere come funziona?

Credo che il suo modo davvero semplice: p che non possiamo fare in C, ma possiamo fare in 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);
       }
   }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top