Du er ikke logget inn. Så lenge du ikke er logget inn går du glipp av muligheten for å holde styr på din egen progresjon.

Filtrering:

2.03: Kalkulator med meny og divisjon

Navn: EnkelKalkulator2.java

a) Utvid kalkulator-oppgaven fra oblig 2 med en metode for divisjon også. Pass på at programmet ikke gjør heltallsdivisjon. (Hint: double)

b) Oppdater programmet slik at brukeren selv bestemmer hvilke metoder som skal brukes. Bruk en enkel meny for dette.

Eksempelkjøring:

Tast inn tall1: 
> 2
Tast inn tall2: 
> 3
MENY: 
1 - addisjon
2 - subtraksjon
3 - multiplikasjon
4 - divisjon

Tast inn valg: 
> 1
Sum: 2 + 3 = 5

2.04: Bytte verdier

Oppgaven er hentet fra Big Java: Late objects (R5.14)

Se på metoden under. Den skal bytte verdien i to variabler:

public static void main(String[] args) {
    int x = 3;
    int y = 4;
    variabelBytte(x, y);
    System.out.println(x + " " +y);
}

public static void variabelBytte(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

Hvorfor fungerer ikke metoden slik den skal?

Metoden bytter verdien i variablene, men siden den ikke returnerer noe, vil ikke verdiene av x og y oppdateres i main. x og y som eksisterer i metoden variabelBytte, er kopier av verdiene til x og y som sendes fra main -- ikke de faktiske variablene.

3.02: Primtall lavere enn N

Navn: Primtall.java

Denne oppgaven er hentet fra Big Java: Late objects (P4.18)

Skriv et program som
a) tar imot et tall fra brukeren.
b) skriver ut alle primtall lavere enn tallet fra brukeren.

import java.util.Scanner;

class Primtall {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int tall = Integer.parseInt(sc.nextLine());
        int teller = tall;

        while(teller > 1) {
            printPrimtall(teller);
            teller--;
        }
    }

    public static void printPrimtall(int tall) {
        int teller = tall-1;
        boolean funnet = false;

        while(teller > 1) {
            if(tall % teller == 0) {
                funnet = true;
            }
            teller--;
        }

        if(!funnet) {
            System.out.println("Fant primtall " + tall);
        }
    }
}

3.05: Stringarray med måneder.

Navn: Maaneder.java

a) Skriv et program som inneholder en String-array som inneholder alle månedsnavnene.
b) Ta imot et heltall fra brukeren og skriv ut hvilken måned dette tilsvarer. For eksempel om brukeren taster inn 5, vil den få "Mai" tilbake.
c) Legg til en feilmelding dersom tallet ikke er et gyldig valg.

import java.util.Scanner;

class Maaneder{
    public static void main(String [] args){
        String maaneder [] = {"Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"};

        System.out.println("Tast inn maanedsnummer:");
        Scanner tastatur = new Scanner(System.in);
        String linje = tastatur.nextLine();
        int valg = Integer.parseInt(linje);


        if(valg < 13 && valg > 0){
            System.out.println(valg + " - " + maaneder[valg - 1]);
        } else {
            System.out.println("Feil: " + valg + " er ugyldig.");
        }

    }
}

3.07: Minste rektangel med punkter.

Navn: Koordinater.java

Denne oppgaven er hentet fra Big Java: Late objects (R6.26 og R6.27)

a) Du har gitt to heltallsarrayer som representere x- og y-koordinater i et koordinatsystem. Vi er interessert i å finne det minste rektangelet som inneholder alle punktene representert i arrayene.

y = {}; 
x = {}; 

b) Løs probelemet ved å sortere arrayen slik at du finner hvilke verdier som er de minste og største.

Kjøreeksempel:

// Punkter:
int[] x = {3, 9, 1};
int[] y = {5, 7, 2};

// Utskrift:
Nede venstre:    [1, 2]
Nede hoyre:      [9, 2]
Ovre hoyre:      [9, 7]
Ovre venstre:    [1, 7]

Tips: Her kan det være lurt å bruke sorteringsalgoritmer som allerede finnes, som innstikksortering eller boblesortering.

class Koordinater {
    public static void main(String[] args) {
        int[] x = {3, 9, 1};
        int[] y = {5, 7, 2};
        int c = 0;
        int d = 0;
        int swap = 0;

        // // Sorterer array x
        while(c < x.length) {
            while(d < x.length - c - 1) {
                if(x[d] > x[d+1]) {
                    swap = x[d];
                    x[d] = x[d+1];
                    x[d+1] = swap;
                }
                d++;
            }
            d = 0;
            c++;
        }

        c = 0;
        d = 0;

        // Sorterer array y
        while(c < y.length) {
            while(d < y.length - c - 1) {
                if(y[d] > y[d+1]) {
                    swap = y[d];
                    y[d] = y[d+1];
                    y[d+1] = swap;
                }
                d++;
            }
            d = 0;
            c++;
        }

        System.out.println("Hjorner: ");
        System.out.println("Nede venstre:\t[" + x[0] + ", " + y[0] + "]");
        System.out.println("Nede hoyre:\t[" + x[x.length-1] + ", " + y[0] + "]");
        System.out.println("Ovre hoyre:\t[" + x[x.length-1] + ", " + y[y.length-1] + "]");
        System.out.println("Ovre venstre:\t[" + x[0] + ", " + y[y.length-1] + "]");
    }
}

3.08: Verdier i array.

Navn: ArrayBytte.java

a) Lag et program som inneholder en heltallsarray
b) Finn minste verdi i arrayen
c) Finn største verdi i arrayen
d) Bytt plass på verdiene
e) Print både arrayen før og etter at du bytter plass på verdiene for å se at det blir riktig.

class ArrayBytte {
    public static void main(String[] args) {
        // A
        int[] tall = {1, 5, 2, 6, 3, 7, 2, 6};

        // B, C og D
        int teller = 0;
        int minste = Integer.MAX_VALUE;
        int storste = Integer.MIN_VALUE;
        int minstePlass = 0;
        int storstePlass = 0;

        System.out.println("Tall foer bytte:");
        while(teller < tall.length) {
            System.out.println(tall[teller]);
            teller++;
        }

        teller = 0;
        while(teller < tall.length) {
            if(tall[teller] < minste) {
                minste = tall[teller];
                minstePlass = teller;
            }
            if(tall[teller] > storste) {
                storste = tall[teller];
                storstePlass = teller;
            }
            teller++;
        }

        int swap = tall[minstePlass];
        tall[minstePlass] = tall[storstePlass];
        tall[storstePlass] = swap;

        System.out.println("Storste: " + storste);
        System.out.println("Minste: " + minste);

        System.out.println("Tall etter bytte:");

        teller = 0;
        while(teller < tall.length) {
            System.out.println(tall[teller]);
            teller++;
        }
    }
}

3.12: Samme elementer

Navn: ArrayEquals.java

Denne oppgaven er hentet fra Big Java: Late objects(P6.9 og P6.10)

a) Skriv en metode

public static void equals(int[] a, int[] b)

som sjekker om to arrayer har de samme elementene i samme rekkefølge.

Oppgave B er for studenter som ønsker seg en real utfordring! Det er ikke forventet at alle studenter skal klare denne oppgaven etter uke 3.

b) Skriv en metode

public static void sameSet(int[] a, int[] b)

som sjekker om to arrayer inneholder de samme elementene i en tilfeldig rekkefølge. Vi skal ignorere duplikater. For eksempel, arrayene

1 4 9 16 9 7 4 9 11

og

11 11 7 9 16 4 1

vil bli sett på som like. Du trenger antakeligvis en eller flere hjelpemetoder.

a)

public static void equals(int[] a, int[] b) {
    int teller = 0;
    boolean like = true;

    if(a.length != b.length) {
        System.out.println("Arrayene er ikke like lange!");
    } else {
        while(teller < a.length) {
            if(a[teller] != b[teller]) {
                like = false;
            }
        }
    }

    if(like) {
        System.out.println("Arrayene er like");
    } else {
        System.out.println("Arrayene er ulike");
    }
}