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.

Logg inn

Valgte tags:

Filtrering:

Skriv ut:

0.02: Klassenavn i Java

Hva er et godt klassenavn i Java?

a)

class bok

b)

class BOK

c)

class Bok
Vis løsningsforslag

Alternativ c) er det riktige svaret. Ingen av klassenavnene vil gi kompileringsfeil, men i Java er konvensjonen å skrive klassenavn med stor forbokstav, og de resterende bokstavene i klassenavnet skal være små. Husk også at filnavnet til denne klassen må være Bok.java

0.04: Personinformasjon

Filnavn: Person.java

  1. Lag en ny fil i en teksteditor(for eksempel Atom), og lagre filen som Person.java
  2. Skriv en klasse Person.
  3. Lag metoden public static void main(String[] args) i klassen.
  4. Bruk System.out.println() for å skrive ut navnet ditt til terminal.
  5. Utvid deretter programmet ditt slik at det også skriver ut telefonnummeret og gateadressen din til terminal, på hver sin ekstra linje.
Vis løsningsforslag
class Person {
    public static void main(String[] args) {
        System.out.println("Kjell Bjarne");
        System.out.println("22222222");
        System.out.println("Pizza- og Kina-veien 43");
    }
}

For å kompilere og kjøre i terminalen:

> javac Person.java
> java Person

0.05: Tilordning og utskrift

Filnavn: HeiVerden.java

a) Skriv et program som skriver "Hei Verden!" til terminalen.
b) Utvid programmet med en deklarasjon av en heltallsvariabel alder.
c) Gi variabelen alder verdien 4. Skriv ut "Alder: " og verdien av alder til terminalen.
d) Legg inn følgende kommentar i programmet: "Nå endrer vi verdien av variabelen alder:".
e) Endre verdien i variabelen alder til din egen alder. Skriv ut en ny linje til terminalen med en passende tekst og den nye verdien til alder.
f) Kompiler og kjør programmet ditt.

Vis løsningsforslag
class HeiVerden{
    public static void main (String[] args){
        System.out.println("Hei Verden!");
        int alder;
        alder = 4;
        System.out.println("Alder: " + alder);

        //Nå endrer vi verdien av variabelen alder:
        alder = 21;
        System.out.println("Hei Verden, min alder er " + alder + "!");
    }
}

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.

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

        a = 4;
        b = 5;

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

1.03: Differansen mellom to heltall.

Navn: Differanse.java

Lag et program som ber om og leser inn to heltall. Programmet skal deretter regne ut differansen mellom de to tallene og skrive ut svaret. Her er et eksempel på hvordan en kjøring av programmet kan se ut:

Oppgi verdien til x: 
> 25
Oppgi verdien til y: 
> 19
Differansen mellom x og y er 6.

Du behøver ikke tenke på at det første tallet kan være mindre enn det andre. Det er ikke nødvendig å regne ut absoluttverdien av differansen (men prøv gjerne å finne ut hvordan det gjøres, dersom du ønsker en ekstra utfordring).

Vis løsningsforslag
import java.util.Scanner;

class Differanse {
    public static void main(String[] args) {
        //Deklarerer variabler
        String lest;
        int x;
        int y;

        //Oppretter scanner for aa lese inn fra tastatur.
        Scanner tastatur = new Scanner(System.in);

        System.out.println("Oppgi verdien til x:");
        lest = tastatur.nextLine(); //oppdaterer verdien til lest.
        x = Integer.parseInt(lest); //konverterer fra String til int.

        System.out.println("Oppgi verdien til y:");
        lest = tastatur.nextLine(); //oppdaterer verdien til lest.
        y = Integer.parseInt(lest); //konverterer fra String til int.

        System.out.println("Differanse mellom x og y er " + (x-y));
    }
}

Merk at vi her gjenbruker variabelen lest for å lese inn både x og y . Vi kunne også hatt to String-variabler for lesing, eller droppet det helt, og heller brukt Integer.parseInt() direkte på input fra bruker.

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.);
    }
}
Vis løsningsforslag
  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.05: Sammenligning av to tall

Navn: Sammmenlign.java

Lag et program som inneholder to heltallsvariable; a og b. Gi variablene verdier som du selv velger.

Lag en sjekk om a er større enn b. Skriv ut til skjerm enten a er storre enn b eller a er ikke storre enn b.

Varier verdiene du setter for a og b, og sjekk at resultatet blir som forventet i alle tilfellene.

Vis løsningsforslag
class Sammenlign {
    public static void main(String[] args) {
        int a = 4;
        int b = 2;

        if(a > b) {
            System.out.println("a er storre enn b");
        } else {
            System.out.println("a er ikke storre enn b");
        }
    }
}

Utskriften her ville vært "a er storre enn b", fordi a er 4 og b er 2.

1.06: Regn ut produktet av to heltall.

Navn: Produkt.java

a) Lag et program som ber om og leser inn to heltall. Programmet skal deretter regne ut produktet av de to tallene og skrive ut svaret.

Her er et eksempel på hvordan en kjøring av programmet kan se ut:

Oppgi verdien til x: 
> 5
Oppgi verdien til y: 
> 4
Produktet av x og y er 20.

b) Endre programmet slik at programmet sjekker om differansen mellom tallene er positiv eller negativ og skriver ut en passende beskjed til brukeren.

Vis løsningsforslag
import java.util.Scanner;

class Produkt {
    public static void main(String[] args) {
        int x;
        int y;
        Scanner tastatur = new Scanner(System.in);

        System.out.println("Oppgi verdien til x:");
        x = Integer.parseInt(tastatur.nextLine());

        System.out.println("Oppgi verdien til y:");
        y = Integer.parseInt(tastatur.nextLine());

        System.out.println("Produktet av x og y er " + (x*y));
    }
}

Her kunne man også brukt midlertidige String-variabler for å holde på verdiene før parseInt(). Med løsningen ovenfor konverterer man inntastet verdi av typen String til int direkte.

1.08: Mindre eller større enn.

Navn: MindreStorre.java

a) Lag et program som tar inn et tall fra brukeren og skriver ut om tallet er mindre eller større enn 10.
b) Legg deretter til en test til for å sjekke om tallet er mindre eller større enn 20.
c) Endre programmet slik at brukeren kun får én tilbakemelding per tall som er tastet innn.

Programmet skal kunne se slik ut under kjøring:

Tast inn et tall: 
> 13
Tallet er mellom 10 og 20

Tast inn et tall: 
> 9
Tallet er under 10

Tast inn et tall: 
> 22
Tallet er over 20
Vis løsningsforslag
import java.util.Scanner;

class MindreStorre {
    public static void main(String[] args) {
        int tall;
        Scanner tastatur = new Scanner(System.in);

        System.out.println("Tast inn et tall:");
        tall = Integer.parseInt(tastatur.nextLine());

        if(tall < 10) {
            System.out.println("Tallet er under 10");
        } else if(tall > 10 && tall < 20) {
            System.out.println("Tallet er mellom 10 og 20);
        } else {
            System.out.println("Tallet er over 20");
        }
    }
}

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.

Vis løsningsforslag
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.11: Ulike verdier.

Navn: UlikeVerdier.java

Lag et program som inneholder to heltallsvariable, i og j.

Gi variablene verdier som du selv velger. Sjekk om i og j er forskjellige, og skriv ut til skjerm enten i og j har ulike verdier eller i og j har ikke ulike verdier.

Varier verdiene du setter for i og j, og sjekk at resultatet blir som forventet i alle tilfellene.

Vis løsningsforslag
class UlikeVerdier {
    public static void main(String[] args) {
        int i = 4;
        int j = 1233;

        if(i != j) {
            System.out.println("i og j har ulike verdier");
        } else {
            System.out.println("i og j har ikke ulike verdier");
        }
    }
}

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.
Vis løsningsforslag
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.");
    }
}

2.02: Utskrift med metode

Navn: Utskrift.java

a) Skriv en metode som tar i mot en streng, og skriver denne ut i terminalen. Metodesignaturen skal se slik ut:

public static void utskrift(String tekst);

b) Skriv en metode som tar i mot et heltall, og skriver ut denne i terminalen. Kan metodene nå hete det samme?

c) Endre metoden fra b slik at vi tar i mot to heltall og plusser dem sammen. Skriv så ut resultatet til terminalen.

Vis løsningsforslag
class Utskrift {

  public static void main(String[] args) {
    String enTekst = "Her er en tekst";
    int tall1 = 2;
    int tall2 = 5;

    utskrift(enTekst);
    utskrift(tall1);
    utskrift(tall1, tall2);
  }

    // Oppgave a
    public static void utskrift(String tekst) {
        System.out.println("Tekst: " + tekst);
    }

    // Oppgave b
    public static void utskrift(int tall){
      System.out.println("Tall: " + tall);
    }

    // Oppgave c
    public static void utskrift(int tall1, int tall2) {
        System.out.println("Sum av tallene: " + (tall1 + tall2));
    }
}

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?

Vis løsningsforslag

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.

2.08: Feilmeldinger

Vi har gitt følgende program:

1 class Test {
2   public static void main(String[] args) {
3       int jens;
4       int siv = Jens * 3;
5       System.out.println("Svar: " siv);
6       erna = siv - jens;
7       System.out.printn(erna);
8   }

Prøv å kompilere programmet. Hva betyr følgende feilmeldinger, som kompilatoren spytter ut når vi prøver å
kompilere og debugge dette programmet?

a) Test.java:8: reached end of file while parsing
     }
      ^

b) Test.java:4: cannot find symbol
   symbol : variable Jens
   location: class Test
    int siv = Jens * 3;
              ^

c) Test.java:4: variable Jens might not have been initialized
    int siv = Jens * 3;
              ^

d) Test.java:5: ’)’ expected
    System.out.println("Svar: " siv);
                               ^
   Test.java:5: illegal start of expression
    System.out.println("Svar: " siv);
                                   ^

e) Test.java:6: cannot find symbol
   symbol : variable erna
   location: class Test
    erna = siv - jens;
    ^
f) Test.java:7: cannot find symbol
   symbol : method printn(int)
   location: class java.io.PrintStream
    System.out.printn(erna);
              ^

Hvis vi fjerner "{" (krøllparentesen) på linje 2 får vi ca. 10 nye feilmeldinger, bl.a. følgende.

g) Test.java:2: ’;’ expected
    public static void main(String[] args)
                                          ^
   Test.java:5: <identifier> expected
    System.out.println("Svar: " + siv);
                      ^
   Test.java:5: illegal start of type
    System.out.println("Svar: " + siv);
                        ^

Hva tipper du er grunnen til at så mange feilmeldinger forårsakes av bare denne enkle lille feilen?

Vis løsningsforslag

a) Denne feilen kommer av at man har glemt eller lagt til en krøllparantes for mye. Her mangler vi en krøllparantes for å lukke klassen.

b) og c) Kompilatoren finner ikke variabelen Jens. Dette er fordi vi på linje 3 har kalt den jens. Dette vil i Java bli sett på som to ulike variabler, og kan fikses ved å kalle begge variablene for jens.

d) Når vi har flere ting vi vil skrive ut i en printsetning må vi "legge" disse sammen ved å plusse de sammen. Løsningen her hadde vært å legge til et ekstra plusstegn, slik: System.out.println("Svar: " + siv);

e) Kompilatoren finner ikke variabelen erna, siden vi aldri har deklarert den. Kompilatoren må vite hvilken type variable erna er, og siden det står et regnestykke på høyreside av to heltall, er det naturlig å la erna være en variabel av typen int. Det hadde da blitt seende slik ut: int erna = siv - jens;

f) Her mangler vi l i println.

g) Grunnen til at det kommer så mange flere feil, er at man får flere følgefeil av den første kompilatorfeilen. En god huskeregel er alltid å rette kompileringsfeil først, og deretter kompilere på nytt. Gjenta helt til alle feilene er borte.

2.12: Kjøretidsfeil

Finn tre kjøretidsfeil i følgende programkode:

import java.util.Scanner;

class HarKjoretidsfeil {
    public static void main(String[] args) {
        int x = 0;
        int y = 0;
        Scanner tastatur = new Scanner("System.in");

        System.out.println("Tast inn to heltall");
        x = Integer.parseInt(tastatur.nextLine());
        x = Integer.parseInt(tastatur.nextLine());

        System.out.println("Summen av tallene er: " + x + y);
    }
}
Vis løsningsforslag
  1. Linje 6: System.in står i anførselstegn. Dette vil passere kompilering, men lesing blir da fra en antatt fil kalt "System.in" -- ikke terminalen.
  2. Linje 8 og 9: Leser til variabelen x to ganger -- y står uberørt.
  3. Linje 11: Slå en parentes rundt (x + y) for å beregne den faktiske summen. Utskriften som står, vil skrive tallene i x og y etter hverandre.

2.13: Like strenger

a) Koden under printer ut "Navnene er ikke like!". Hva er feil?

class LikeStrenger{
    public static void main(String [] args){
        String navn1 = new String("Maria");
        String navn2 = new String("Maria");

        if(navn1 == navn2){
            System.out.println("Navnene er like!");
        } else {
            System.out.println("Navnene er ikke like!");
        }
    }
}

b) Endre programmet slik at det fungerer.

Vis løsningsforslag

a) Feilen er at vi benytter oss av '=='. Om man skal sjekke likhet for strenger er like, må man benytte seg av metoden .equals().

b) Programmet kunne heller ha sett slik ut:

class LikeStrenger{
    public static void main(String [] args){
        String navn1 = new String("Maria");
        String navn2 = new String("Maria");

        if(navn1.equals(navn2)){
            System.out.println("Navnene er like!");
        } else {
            System.out.println("Navnene er ikke like!");
        }
    }
}

2.14: Sannhetsverdier

Gitt at verdien av b er false, og verdien av x er 0. Hva er sannhetsverdien til følgende uttrykk?

  1. b && x == 0
  2. b || x == 0;
  3. !b && x == 0
  4. !b || x == 0
  5. b && x != 0
  6. b || x != 0
  7. !b && x != 0
  8. !b || x != 0
Vis løsningsforslag
  1. false
  2. true
  3. true
  4. true
  5. false
  6. false
  7. false
  8. true

3.01: While-løkke med teller

Filnavn: Lokker.java

a) Skriv et program som inneholder klassen "Lokker"
b) Lag en while-løkke som teller fra 0 til 10. Hint: while(....)
c) Legg til en printing av telleren du bruker slik at det blir en printing for hver gang løkken kjører.

Forventet utskrift:

0
1
2
3
4
5
6
7
8
9
Vis løsningsforslag
class Lokker {
    public static void main(String[] args) {
        int teller = 0;

        while(teller < 10) {
            System.out.println(teller);
            teller = teller + 1;
        }
    }
}

3.03: Heltallsarray og løkke.

Navn: Heltallsarray.java

a) Lag fem heltallsvariable som inneholer verdiene 0,1,2,3,4.
b) Skriv ut variablene.
c) Lag en heltallsarray som kan inneholde 5 tall.
d) Legg verdiene dine inn i arrayen ved hjelp av en løkke.
e) Skriv ut variablene i arrayen ved hjelp av en løkke.

Vis løsningsforslag
class Heltallsarray{
    public static void main(String [] args){
        int tall1 = 0;
        int tall2 = 1;
        int tall3 = 2;
        int tall4 = 3;
        int tall5 = 4; 

        System.out.println("Utskrift av variable:");
        System.out.println("tall1 = " + tall1);
        System.out.println("tall2 = " + tall2);
        System.out.println("tall3 = " + tall3);
        System.out.println("tall4 = " + tall4);
        System.out.println("tall5 = " + tall5);

        int array [] = new int [5];

        int lengdePaaArray = array.length;
        int teller = 0; 
        while(teller < lengdePaaArray){
            array[teller] = teller;
            teller++;
        }

        teller = 0;
        System.out.println("Utskrift av array:");
        while(teller < lengdePaaArray){
            System.out.println("array[" + teller + "] = " + array[teller]);
            teller++;
        }
    }
}