Anteckningar från föreläsning 7

Detta är den programkod vi skrev -- anteckningarna är gjorda bara för att vara ett stöd för minnet för dem som var där, och därför inte nödvändigtvis fullständiga eller ens sammanhängande. Betydligt mer hjälp finns att hämta i kompendiet.

OH-bilder finns här.

Mer om listor

Vi fortsatte med listor, som vi ju började prata om under föreläsning 6, och löste bland annat följande problem (vi återanvände delar av det som vi skrev under föreläsning 6):

import java.util.*;
import se.lth.cs.pt.io.Keyboard;

class Lists {

    public static void main(String[] args) {
        new Lists().run();
    }

    void run() {
        int nbrOfStrings = 5;

        List list = readStrings(nbrOfStrings);

        System.out.println("================================");
        System.out.println("Listan i ursprunglig ordning:");
        simplerPrintList(list);
        System.out.println("Vänder listan:");
        reverse(list);
        simplerPrintList(list);
        System.out.println("================================");

        System.out.println("Först i bokstavsordning: " +
                           firstAlphabetically(list));

        System.out.println("Sorterade i bokstavsordning: ");
        List sorted = sorted(list);
        simplerPrintList(sorted);
    }

    List sorted(List values) {
        List sorted = new ArrayList();
        for (String value : values) {
            insert(value, sorted);
        }
        return sorted;
    }

    void insert(String value, List sorted) {
        for (int k = 0; k < sorted.size(); k++) {
            if (value.compareTo(sorted.get(k)) < 0) {
                sorted.add(k, value);
                return;
            }
        }
        sorted.add(value);
    }

    void reverse(List list) {
        for (int k = 0; k < list.size() / 2; k++) {
            // byt plats på element k och element size - 1 - k
            String temp = list.set(k, list.get(list.size() - 1 - k));
            list.set(list.size() - 1 - k, temp);
        }            
    }

    String firstAlphabetically(List strings) {
        String bestSoFar = strings.get(0);
        for (int k = 1; k < strings.size(); k++) {
            String current = strings.get(k);
            if (current.compareTo(bestSoFar) < 0) {
                bestSoFar = current;
            }
        }
        return bestSoFar;
    }

    List readStrings(int nbrOfStrings) {
        List list = new ArrayList();
        for (int k = 1; k <= nbrOfStrings; k++) {
            String s = Keyboard.nextLine("Ange en sträng: ");
            list.add(s);
        }
        return list;
    }

    void simplerPrintList(List list) {
        for (String value : list) {
            System.out.println(" * " + value);
        }
    }

    void printReversedList(List list) {
        for (int k = list.size() - 1; k >= 0; k--) {
            String value = list.get(k);
            System.out.println(" * " + value);
        }
    }
}

Listor med primitiva värden

Java tillåter bara listor med referenser, så vi kan inte lagra primitiva värden i våra listor.

class ListsWithPrimitiveValues {

    public static void main(String[] args) {
        new ListsWithPrimitiveValues().run();
    }

    void run() {
        List numbers = new ArrayList();
        // auto-boxing
        Integer p = 1;      // new Integer(1);
        Integer q = 2;      // new Integer(2);
        Integer r = p + q;  // new Integer(p.intValue() + q.intValue());
        System.out.println(r);
        for (int k = 1; k <= 10; k++) {
            numbers.add(k);
        }
        for (Integer k : numbers) {
            System.out.println(k);
        }
    }
}

class Statistics {

    public static void main(String[] args) {
        new Statistics().run();
    }

    void run() {
        List values = readValues();
        System.out.println("Medelvärde: " +
                           average(filter(values, 3, 5)));
    }

    double average(List values) {
        return sum(values) / values.size();
    }

    double sum(List values) {
        double sum = 0;
        for (double value : values) {
            sum += value;
        }
        return sum;
    }

    List filter(List values, double min, double max) {
        List found = new ArrayList();
        for (double value : values) {
            if (min <= value && value <= max) {
                found.add(value);
            }
        }
        return found;
    }

    List readValues() {
        Scanner input = new Scanner(System.in);
        System.out.print("Antal tal: ");
        int n = input.nextInt();
        List values = new ArrayList();
        for (int k = 1; k <= n; k++) {
            values.add(input.nextDouble());
        }
        return values;
    }
}