Løsningsforslag sett6

Fra Hiofwiki

Gå til: navigasjon, søk

Innhold

Gruppe N

Oppgave 1

package sett6;

import java.util.*;
import java.io.*;

public class Oppgave1 {

    
    public static void main(String[] args) 
    {
        LinkedList<Integer> listLevels = new LinkedList<Integer>();
        LinkedList<File> listFiles = new LinkedList<File>(); 
        listFiles.add(new File(args[0]));
        listLevels.add(0);
        
        while(!listFiles.isEmpty())
        {
            File file = listFiles.poll();
            int level = listLevels.poll().intValue();
            
            if(file.isDirectory())
            {
                File[] files = file.listFiles();
                
                for(int i=0; i<files.length; i++)
                {
                    listFiles.add(files[i]);
                    listLevels.add(level + 1);
                }
            }
            for(int i=0; i<level; i++)
                System.out.print(" ");
            System.out.println(file.getName());
        }
    }
}


Oppgave 2

package sett6;

import java.util.*;
import java.io.*;

public class Oppgave2 {

    public static void main(String[] args) 
    {
        LinkedList<Integer> listLevels = new LinkedList<Integer>();
        LinkedList<File> listFiles = new LinkedList<File>(); 
        listFiles.push(new File(args[0]));
        listLevels.push(0);
        
        while(!listFiles.isEmpty())
        {
            File file = listFiles.pop();
            int level = listLevels.pop().intValue();
            
            if(file.isDirectory())
            {
                File[] files = file.listFiles();
                
                for(int i=0; i<files.length; i++)
                {
                    listFiles.push(files[i]);
                    listLevels.push(level + 1);
                }
            }
            for(int i=0; i<level; i++)
                System.out.print(" ");
            System.out.println(file.getName());
        }
    }
}


Oppgave 3

  • Oppretter en variabel som holder på verdi
  • Legger this.verdi inn i variabelen
  • Kopierer this.neste.verdi til this.verdi
  • Endrer this.neste til this.neste.neste (moro!)
  • Returnerer variabel

Oppgave 4

En stakk har operasjonene empty, peek, pop, push. I tillegg til disse ønsker vi en operasjon max, som returnerer det største elementet.

Vi kan f.eks bruke ArrayList.

Vi må ha en variabel som tar vare på max-verdien.

push:

  • Vi sammenligner max med den nye verdien. Er den større enn max, endrer vi max.
  • Legger til i listen. (add)

peek:

  • Ser på siste element i lista (get)

pop:

  • Fjerner siste element i lista (remove)

empty:

  • returner om listen er tom (isEmpty)

max:

  • returnerer max variablen


Oppgave 6

    //Sette inn et nytt element på en bestemt posisjon
    public boolean add(E element, Integer index)
    {
        Node temp = start;
        if(index < 0 || index > size())
        {
            throw new IndexOutOfBoundsException("Too bad!");
        }
        else
        {
            for(int i = 0; i < index-1; i++)
                temp = temp.next;
            temp.next = new Node(element, temp.next);
            num++;
        }
        return true;
    }
    //Fjerne et element fra en bestemt posisjon
    public E remove(int index)
    {
        E returnElement = null;
        //Hvis lista er tom, kast unntak
        if(empty())
        {
            throw new IndexOutOfBoundsException("The list is empty!");
        }
        //Sjekker om elementet er det samme som det første elementet i lista
        else if(index == 0)
        {
            returnElement = start.value;
            start = start.next;
        }
        else
        {
            Node temp = start;
            for(int i = 0; i < index; i++)
                temp = temp.next;
            returnElement = temp.next.value;
            temp.next = temp.next.next;
        }
        return returnElement;
    }
    //Iterator remove-metode.
    public void remove() {
        if(previous == null)
        {
             start = start.next;
             p = p.next;
        }
        else if(p.next != null)
        {
             p.value = p.next.value;
             p.next = p.next.next;
        }
        else
        {
             previous.next = null;
        }
    }

Oppgave 6.7

    private class ReverseListIterator implements Iterator<E> {

        private DoubleNode<E> p; 
        
        public ReverseListIterator(){
            p = end; 
        }
        
        public boolean hasNext() {
            return (p.last != null); 
        }

        public E next() {            
            E verdi = p.value;
            p = p.last;
            return verdi; 
        }

        public void remove() {
            if(p.next == null)
            {
                end = end.last;
                p = p.last;
            }
            else if(p.last != null)
            {
                p.value = p.last.value;
                p.last = p.last.last;
            }
            else
            {
                p.next.last = null;
            } 
        }