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:

0.07: Avansert kompilering

Filnavn: Hei.java og Hallo.java

  1. Opprett to filer Hei.java og Hallo.java. Skriv klassene Hei og Hallo i hver sin fil.
  2. Skriv main-metoder i begge klassene.
  3. Skriv en print-setning i Hei.java som printer ut "Hei", og en print-setning i Hallo.java som printer ut "Hallo".
  4. Kompiler begge klassene samtidig.
  5. Kjør klassene hver for seg.

Hint: Du kan kompilere flere filer samtidig ved å spesifisere flere filnavn etter "javac".

1 - 3:

// I Hei.java:
class Hei {
    public static void main(String[] args) {
        System.out.println("Hei");
    }
}

// I Hallo.java:
class Hallo {
    public static void main(String[] args) {
        System.out.println("Hallo");
    }
}

4.

> javac Hei.java Hallo.java

5.

> java Hei
Hei
> java Hallo
Hallo

0.08: SumHeltall

Filnavn: SumHeltall.java

Skriv et program med en klasse SumHeltall med en main-metode. Lag to variabler av typen int og kall dem a og b. Lagre verdiene 4 og 5 i variablene. Skriv ut summen av tallene.

class SumHeltall {
    public static void main(String[] args) {
        int a;
        int b;

        a = 4;
        b = 5;

        System.out.println("Summen er: " + (a + b));
    }
}

0.09: Enkel Regning

Filnavn: Regning.java

a) Skriv en klasse du kaller "Regning.java" som inneholder main-metoden.

b) Lagre et heltall du finner på selv i en variabel du kaller "tall"

c) Skriv ut det dobbelte av "tall" på formatet "Det dobbelte av tall er : "

d) Skriv ut kvadratet av "tall" på formatet "Kvadratet av tall er: "
Hint: Å kvadrere et tall vil si å opphøye det i 2 ( tall^2 )

e) Skriv ut differansen melllom 100 og tallet ditt på formatet "Differansen mellom 100 og tall er: "

class Regning{
  public static void main(String [] args){
    // b
    int tall = 5;

    // c
    System.out.println("Det dobbelte av tall er : " + (tall*2));

    // d
    System.out.println("Kvadratet av tall er: " + (tall*tall));

    // e
    System.out.println("Differansen mellom 100 og tall er : " + (100 - tall));

  }
}

1.04: Finn syntaksfeil

Finn 6 feil i følgende program.

class Utskrift {
    pubic stitac void main(String args) (
        System.out.println("Beethoven skrev Skjebnesymfonien")
        System.out.println("og åtte andre symfonier.);
    }
}
  1. Linje 2: "pubic" skulle vært "public".
  2. Linje 2: "stitac" skulle vært "static".
  3. Linje 2: "(String args)" skulle vært "(String[] args)".
  4. Linje 2: Parentes på slutten av linjen skulle vært krølleparentes.
  5. Linje 3: Mangler semikolon på slutten av linjen.
  6. Linje 4: Mangler avsluttende anførselstegn på strengen inne i println-setningen.

1.07: Finn ut om siste siffer er felles.

Navn: SisteSiffer.java

Gitt tre heltallsvariable, a, b og c med ikke-negative verdier som du velger selv. Sjekk om to eller flere har felles siste siffer, og skriv eventuelt ut disse til skjerm.

class SisteSiffer {
    public static void main(String[] args) {
        int a = 43;
        int b = 123;
        int c = 324;

        if(a % 10 == b % 10) {
            System.out.println("a og b har like siste siffer");
        }

        if(a % 10 == c % 10) {
            System.out.println("a og c har like siste siffer");
        }

        if(b % 10 == c % 10) {
            System.out.println("b og c har like siste siffer");
        }
    }
}

Operatoren % som er brukt her, kalles "modulo". Den beregner resten av det første tallet delt på det andre tallet. I 10-tallssystemet vil resten av et tall delt på 10 alltid være det siste sifferet i tallet (prøv selv!).

Merk at vi bruker if hele veien, og ikke else if. Årsaken er at det er mulig at flere tall har felles siste siffer -- og da vil vi ha ut alle!

1.09: Skatt i Ruritania.

Navn: SkattRuritania.java

I det fiktive landet Ruritania er skattereglene slik at hvis en person har inntekt < 10000, så betaler man 10% skatt på hele inntekten, og hvis inntekten >= 10000, så betaler man 10% skatt på de første 10000 kronene og 30% skatt på resten av inntekten. Lag et program som regner ut og skriver ut hvor mange kroner som skal betales i skatt. Programmet skal lese inntekten (som antas å være et desimaltall) fra terminal.

import java.util.Scanner;

class SkattRuritania {
    public static void main(String[] args) {
        Scanner tastatur = new Scanner(System.in);
        double inntekt = 0.0;
        double skatt = 0.0;

        System.out.println("Tast inn din inntekt:");
        inntekt = Double.parseDouble(tastatur.nextLine());

        if(inntekt < 10000) {
            skatt = inntekt*0.1;
        }
        else {
            skatt = ((10000*0.1) + ((inntekt - 10000)*0.3));
        }

        System.out.println("Skatt: " + skatt);
    }
}

1.10: Kroppstemperatur.

Navn: Kroppstemperatur.java

Hos friske mennesker varierer kroppstemperaturen vanligvis mellom 36.5 og 37.5 grader. Lag et program som avgjør om en persons kroppstemperatur ligger henholdsvis under, innenfor eller over normal kroppstemperatur. Programmet skal lese kroppstemperaturen fra terminal. (Hint: Her må du lese inn double-verdier fra terminalen! Vi kan bruke Double.parseDouble()).

import java.util.Scanner;

class Kroppstemperatur{
    public static void main(String [] args){
        double lavTemp = 36.5;
        double hoyTemp = 37.5;

        //Innlesing fra bruker
        System.out.println("Skriv inn din kroppstemperatur:");
        Scanner tastatur = new Scanner(System.in);
        String linje = tastatur.nextLine();
        double brukerTemp = Double.parseDouble(linje);

        if(brukerTemp < lavTemp){
            System.out.println("Du har lavere kroppstemperatur enn normalen");
        } else if (brukerTemp > hoyTemp){
            System.out.println("Du har høyere kroppstemperatur enn normalen");
        } else {
            System.out.println("Du har normal kroppstemperatur");
        }
    }
}

1.12: Handletur

Navn: Handletur.java

Programmet skal regne ut totalpris for en bruker etter å ha vært på handletur. De varene det er mulig å kjøpe er brød, melk, ost og youghurt.

Prisene er som følger:
Brød: 20 kr.
Melk: 15 kr.
Ost: 40 kr.
Youghurt: 12 kr.

Eksempel på interaksjon med programmet:

Hei! Velkommen til IFI-butikken.
Hvor mange brød vil du ha?
> 2
Hvor mange melk vil du ha?
> 1
Hvor mange ost vil du ha?
> 1
Hvor mange yoghurt vil du ha?
> 3
Du skal betale: 131 kr.
import java.util.Scanner;

class Handletur {
    public static void main(String[] args) {
        int antBrod;
        int antMelk;
        int antOst;
        int antYog;

        Scanner tastatur = new Scanner(System.in);

        System.out.println("Hvor mange brod vil du ha?");
        antBrod = Integer.parseInt(tastatur.nextLine());

        System.out.println("Hvor mange melk vil du ha?");
        antMelk = Integer.parseInt(tastatur.nextLine());

        System.out.println("Hvor mange ost vil du ha?");
        antOst = Integer.parseInt(tastatur.nextLine());

        System.out.println("Hvor mange yoghurt vil du ha?");
        antYog = Integer.parseInt(tastatur.nextLine());

        int subtotal = 0;

        subtotal += antBrod * 20;
        subtotal += antMelk * 15;
        subtotal += antOst * 40;
        subtotal += antYog * 12;

        System.out.println("Du skal betale: " + subtotal + " kr.");
    }
}

1.13: Høyde.

Filnavn: Hoyde.java

Du skal lage en program som gir tar inn en høyde i cm fra bruker, og skriver ut et av følgende alternativer:
- Du er lav.
- Du er middels.
- Du er høy.

Grensen for å være lav er om høyde < 140 cm, og grensen for å være høy er om høyde > 190 cm.

import java.util.Scanner;

class Hoyde{
    public static void main(String [] args){
        int lav = 140;
        int hoy = 190;

        //Innlesing fra bruker
        System.out.println("Skriv inn din hoyde:");
        Scanner tastatur = new Scanner(System.in);
        String linje = tastatur.nextLine();
        int brukerHoyde = Integer.parseInt(linje);

        if(brukerHoyde < lav){
            System.out.println("Du er lav.");
        } else if (brukerHoyde > hoy){
            System.out.println("Du er hoy.");
        } else {
            System.out.println("Du er middels.");
        }
    }
}

1.14: Busstur

Filnavn: Busstur.java

Du skal skrive et program som sjekker om det er plass på en buss på en bussrute med tre stopp.

For hvert stopp, skal bruker taste inn hvor mange passasjerer som går på bussen. Det er plass til inntil 30 passasjerer i bussen. Dersom det er fullt på bussen, kan ingen nye passasjerer komme på. Om det er noen ledige plasser, men flere enn de antall ledige plassene som ønsker å gå på bussen, skal det slippes på like mange som ledige plasser. For eksempel om det er 27 på bussen og 3 ledige plasser igjen, og 6 ønsker å gå på, skal 3 av de som ønsker å komme på få plass, imens de resterende 3 må gå.

Vi antar at alle passasjerer skal til endestasjonen, så vi behøver ikke ta høyde for at noen går av bussen underveis.

Eksempel på kjøring:

Stasjon 1! Hvor mange gaar paa bussen?
> 14
Stasjon 2! Hvor mange gaar paa bussen?
> 13
Stasjon 3! Hvor mange gaar paa bussen?
> 5
Bussen er full. 2 maa gaa til fots.
import java.util.Scanner;

class Busstur {
    public static void main(String[] args) {
        Scanner tastatur = new Scanner(System.in);
        int passasjerer = 0;
        int nye = 0;

        System.out.println("Stasjon 1! Hvor mange gaar 
                paa bussen?");
        nye = Integer.parseInt(tastatur.nextLine());

        if((passasjerer + nye) >= 30) {
            passasjerer = 30;
            System.out.println("Bussen er full. " + 
                    (passasjerer + nye - 30) + 
                    " maa gaa til fots.");
        } else {
            passasjerer += nye;
        }

        System.out.println("Stasjon 2! Hvor mange gaar 
                paa bussen?");
        nye = Integer.parseInt(tastatur.nextLine());

        if((passasjerer + nye) >= 30) {
            passasjerer = 30;
            System.out.println("Bussen er full. " + 
                    (passasjerer + nye - 30) + 
                    " maa gaa til fots.");
        } else {
            passasjerer += nye;
        }

        System.out.println("Stasjon 3! Hvor mange gaar 
                paa bussen?");
        nye = Integer.parseInt(tastatur.nextLine());

        if((passasjerer + nye) >= 30) {
            passasjerer = 30;
            System.out.println("Bussen er full. " + 
                    (passasjerer + nye - 30) + 
                    " maa gaa til fots.");
        } else {
            passasjerer += nye;
        }
    }
}

1.15: Har du råd?

Filnavn: Raad.java

Du skal lage et program som først tar inn saldoen på din bankkonto(NB: Det skal være mulig å ta inn et tall med desimaler). Deretter skal man skrive inn en totalpris på en vare du har lyst til å kjøpe. Programmet skal deretter gi tilbakemelding om du har råd eller ikke.

import java.util.Scanner;

class Raad{
    public static void main(String [] args){

        //Innlesing fra bruker
        System.out.println("Skriv inn saldo:");
        Scanner tastatur = new Scanner(System.in);
        String linje = tastatur.nextLine();
        double saldo = Double.parseDouble(linje);

        System.out.println("Skriv inn prisen paa varen du vil kjope:");
        tastatur = new Scanner(System.in);
        linje = tastatur.nextLine();
        double prisPaaVare = Double.parseDouble(linje);

        if(saldo < prisPaaVare){
            System.out.println("Du har dessverre ikke raad. Sorry.");
        } else {
            System.out.println("Gratulerer! Du har raad.");
        }
    }
}

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");
    }
}

4.03: Kaldeste og varmeste måned

Utvidelse av oppgave 4.1 fra oblig 4.

c) Finn hvilken måned som var den kaldeste måneden.

(Hint: Sjekk hvilken posisjon som er kaldest og finn hvilken måned dette tilsvarer).

d) Finn hvilken måned som var den varmeste måneden.

Løsningsforslag ikke tilgjengelig, fordi dette er en utvidelse av oppgave fra obligatorisk innlevering 4.

4.05: Avansert Ole Brum

Navn: OleBrum.java

a) Gjør først oppgave 4.1. Følg samme oppskrift, men denne gangen skal du lese inn filen "avansert_olebrum.txt" som er en fil med mer enn et ord per linje.
(Hint: Her kan du bruke split(" ") for å dele opp linjen og finne de ulike ordene)

b) Utvid programmet ditt slik at det ikke ser forskjell på store/små bokstaver.

Siden dette er en utvidelse av en oppgave fra obligatorisk innlevering 4, foreligger ikke løsningsforslag.