Raddoppio dimensione Array

di il
1 risposte

Raddoppio dimensione Array

Salve a tutti, sto lavorando a un esercizio scolastico che permette di fare delle operazioni su fatture.
Sto riscontrando problemi su un particolare punto, la consegna detta: "Se il numero di fatture eccede la capienza dell'array di fatture, bisogna creare un nuovo array di dimensione doppia rispetto all'origina, e naturalmente utilizzare il nuovo array per tutte le operazioni".

So che la cosa è gestibile con IndexOutOfboundsException ma non so come impostare il codice all'interno, non mi vengono proprio idee.

grazie in anticipo a tutti

lavatricelove

1 Risposte

  • Re: Raddoppio dimensione Array

    Lavatricelove ha scritto:


    "Se il numero di fatture eccede la capienza dell'array di fatture, bisogna creare un nuovo array di dimensione doppia rispetto all'origina, e naturalmente utilizzare il nuovo array per tutte le operazioni".

    So che la cosa è gestibile con IndexOutOfboundsException
    No, in una fase di inserimento di un nuovo elemento, il IndexOutOfboundsException non dovrebbe c'entrare e non dovrebbe essere usato.

    Quando si gestisce un array a "capacità molto più espansa" (che è lo stesso concetto usato anche dalle collezioni standard quali ArrayList e Vector), oltre a tenere l'array si deve tenere anche una variabile che indica il numero "logico" di elementi, quelli veramente effettivi nell'array.

    Quindi ogni volta che si deve inserire un nuovo elemento, la prima cosa da fare è:

    Se dimensioneLogica+1 (nota: stai inserendo quindi uno in più) è maggiore della capacità fisica dell"array, allora PRIMA di inserire il nuovo elemento devi creare un nuovo array, copiarci dentro gli elementi dal "vecchio" array, ecc... Poi inserisci il nuovo elemento. In tutto questo, un IndexOutOfboundsException non deve saltare fuori. Se saltasse fuori vuol dire che hai cannato l'inserimento.

    E la variabile dimensioneLogica (o come la chiami) dovrà essere usata, ovviamente, anche in altri momenti, specialmente quando si scorre l'array e si accede all'array.
Devi accedere o registrarti per scrivere nel forum
1 risposte