Løsningsforslag - oppgaver i Avsnitt 3.1.5


Oppgave 1

  public int antall()
  {
    return antall;
  }

Oppgave 2

  public void nullstill()
  {
    for (int i = 0; i < antall; i++)
      a[i] = null;
    antall = 0;
  }

Oppgave 3

  private class TabellBeholderIterator implements Iterator<T>
  {
    private int denne = antall - 1;              // instansvariabel
    private boolean removeOK = false;   // instansvariabel

    public boolean hasNext()     // sjekker om det er flere igjen
    {
      return denne >= 0;     // sjekker verdien til denne
    }

    public T next()
    {
      if (!hasNext())
        throw new NoSuchElementException("Tomt eller ingen verdier igjen!");

      T temp = a[denne];         // henter aktuell verdi
      denne--;                   // flytter indeksen
      removeOK = true;           // nå kan remove() kalles
      return temp;               // returnerer verdien
    }

    public void remove()
    {
      if (!removeOK) throw
        new IllegalStateException("Ulovlig tilstand!");

      removeOK = false;          // remove() kan ikke kalles på nytt

      // verdien i posisjon denne - 1 skal fjernes siden den ble returnert
      // i det siste kallet på next(), verdiene fra og med denne flyttes
      // derfor en enhet mot venstre

      antall--;           // en verdi vil bli fjernet

      for (int i = denne + 1; i < antall; i++)
      {
        a[i] = a[i+1];    // verdiene flyttes
      }

      a[antall] = null;   // verdien som lå lengst til høyre nulles
    }

  }  // class TabellBeholderIterator