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:

01.01: 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.

01.02. Personinformasjon

Filnavn: Personinfo.java

  1. Lag en ny fil i en teksteditor(for eksempel Atom), og lagre filen som Personinfo.java
  2. Skriv klassen Personinfo.
  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 Personinfo {
    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 Personinfo.java
> java Personinfo

01.03: SumHeltall

Filnavn: SumHeltall.java

a) Skriv et program med en klasse SumHeltall med en main-metode.

b) Lag to variabler av typen int og kall dem a og b. Lagre verdiene 4 og 5 i variablene.

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

01.04: Enkel datastrukturtegning

Denne oppgaven tar utgangspunkt i Trix-oppgave 1.03: SumHeltall.

Tegn datastrukturen til klassen SumHeltall når programmet kjøres.

Vis løsningsforslag

Se løsningsforslag her.

01.05: Finn syntaksfeil

Finn 5 feil i følgende program:

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

01.06: Sammenligning av to tall

Navn: Sammenlign.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.

01.07: Boolske (logiske) verdier

Navn: BoolskeVerdier.java

a) Lag et program som inneholder to boolske variabler med navn sann og usann, og gi variablene verdiene true og false. Skriv ut innholdet av den ene variabelen ved hjelp av System.out.println-kommandoen og se hvordan det ser ut ved kjøring.

b)Utvid programmet ditt med to if-tester. Den første skal sammenligne de to variablene slik at resultatet blir sant med verdiene du ga dem i a) og da skrive ut "Første test slo til!".

Den andre testen skal sammenligne de to variablene på en slik måte at resultatet blir usant (med de samme to verdiene). Denne testen skal ha en else-gren som skriver ut "Andre test slo ikke til!"

Vis løsningsforslag
1  class BoolskeVerdier {
2        public static void main(String[] args) {
3            boolean sann = true;
4            boolean usann = false;
5    
6            if (sann != usann) {
7                System.out.println("Første test slo til!");
8            } else {
9                System.out.println("Noe gikk feil!");
10            }
11            
12            if (sann == usann) {
13                System.out.println("Noe gikk feil!");
14            } else {
15                System.out.println("Andre test slo ikke til!");
16            }
17        }
18    }

01.08: Rektangel

a) Du skal skrive en klasse Rektangel med datarepresentasjon og metoder. Rektangler har en bredde og en lengde, og tilbyr følgende grensesesnitt:

class Rektangel {

  public Rektangel (double l, double b) {   // Konstruktør
  }

  public void oekLengde (int okning) {    // Oek lengden som angitt
  }

  public void oekBredde (int okning) {    // Oek bredden som angitt
  }

  public double areal () {     // Beregn mitt areal
  }

  public double omkrets () {   // Beregn min omkrets
  }
}

b) Skriv et hovedprogram som:
- oppretter to rektangler med valgfrie størrelser
- skriver ut begges areal
- øk lengden på det ene og bredden på den andre
- skriver ut begges omkrets

c) Utvid klassen med metoder for å redusere et objekt.

Vis løsningsforslag

a)

class Rektangel{

    double bredde;
    double lengde;

    public Rektangel(double l, double b){
        lengde = l;
        bredde = b;
    }

    public void oekLengde(int okning){
        lengde = lengde + okning;
        //lengde += okning;
    }

    public void oekBredde(int okning){
        bredde = bredde + okning;
        //lengde += okning;
    }

    public double areal(){
        return bredde*lengde;
    }

    public double omkrets(){
        return bredde*2 + lengde*2;
    }
}

b)

class RektangelHovedprogram{

    public static void main(String[] args) {

        Rektangel en = new Rektangel(5,9);
        Rektangel to = new Rektangel(10, 2);

        System.out.println("Areal: " +  en.areal());
        System.out.println("Areal: " + to.areal());

        en.oekBredde(5);
        to.oekLengde(2);

        System.out.println("Omkrets: " + en.omkrets());
        System.out.println("Omkrets: " + to.omkrets());
    }
}

c)

De følgende metodene tilhører klassen Rektangel.

public void reduserBredde(int reduser){
    if (bredde - reduser < 1){
        System.out.println("Bredden kan ikke reduseres så mye");
    }
    else {
        bredde = bredde - reduser;
    }
}

public void reduserLengde(int reduser){
    if (lengde - reduser < 1){
        System.out.println("Lengden kan ikke reduseres så mye");
    }
    else {
        lengde = lengde - reduser;
    }
}

01.09: Båthus

I denne oppgaven skal du lage en klasse som skal kunne inneholde båter. Båter er definert ved hjelp av klassen Baat:

class Baat {

    private static int antProd = 0;
    private int prodnr;
    private String merke;

    public Baat(String mrk) {
        prodnr = antProd;
        antProd++;
        merke = mrk;
    }

    public String hentInfo() {
        return "Produksjonsnummer: " + prodnr + ", merke: " + merke;
    }
}

a) Skriv klassen Baathus. Et båthus skal inneholde en liste (array) av Baat-objekter. Konstruktøren skal ta imot et heltall antallPlasser som brukes for å bestemme størrelsen på båtlisten.

Du trenger også en metode settInn som tar imot et Baat-objekt og forsøker å legge det til i lista (her vil du trenge en løkke!). Hvis det ikke er plass til flere båter skal metoden skrive ut en feilmelding.

I tillegg skal Baathus ha en metode skrivBaater som skriver ut informasjon om alle båtene ved hjelp av en for-løkke.

b) Skriv en klasse TestBaathus med en main-metode der du oppretter et båthus med 3 plasser samt noen båter. Forsøk å sette inn en båtene i båthuset, og sjekk at programmet sier fra dersom du forsøker å sette inn for mange i båthuset.

Vis løsningsforslag

a)

class Baathus {
    private Baat[] baathus;

    public Baathus(int antallPlasser) {
        baathus = new Baat[antallPlasser];
    }

    public void settInn(Baat enBaat) {

        boolean sattInn = false;
        int teller = 0;

        while (teller < baathus.length && sattInn == false) {
            if (baathus[teller] == null) {
                baathus[teller] = enBaat;
                sattInn = true;
            }

            teller++;
        }

        if (sattInn != true) {
            System.out.println("Det er ikke plass til flere baater!");
        }

    }

    public void skrivBaater() {
        for (int i = 0; i < baathus.length; i++) {
            if (baathus[i] != null){
                System.out.println(baathus[i].hentInfo());
            }
        }
    }
}

b)

class TestBaathus {
    public static void main(String[] args) {
        Baathus baathus = new Baathus(3);

        Baat b1 = new Baat("Triton");
        Baat b2 = new Baat("Chaparral");
        Baat b3 = new Baat("Mercury");
        Baat b4 = new Baat("Mercury");

        baathus.settInn(b1);
        baathus.settInn(b2);
        baathus.settInn(b3);
        baathus.settInn(b4);

        baathus.skrivBaater();
    }
}

01.10: Datastrukturtegning av båthus

Denne oppgaven bygger på Trix-oppgave 1.09: Båthus.

Vi tenker oss at vi i deloppgave b oppretter båt-objektene gitt i løsningsforslaget:

Baat b1 = new Baat("Triton");
Baat b2 = new Baat("Chaparral");
Baat b3 = new Baat("Mercury");
Baat b4 = new Baat("Mercury");

Tegn datastrukturen til programmet slik status ser ut etter at vi har opprettet og forsøkt å sette inn disse objektene. Du trenger kun å detaljere (fylle inn metoder i) det første objektet av hver type. NB: Pass på å skille mellom klassedatastruktur og objekt!

Vis løsningsforslag

Se løsningsforslag her.

01.11: Sannhetsverdier

Gitt at verdien av boolean b er false, og verdien av int 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

01.12 Python til Java; Areal av rektangel

Filnavn: Areal.java

Under ligger et program som regner ut arealet av en rektangel og skriver ut bredde, høyde og arealet i terminalen. "Oversett" programmet til java. NB husk main!

bredde = 10
hoyde = 20
print("Bredde:", bredde)
print("Høyde:", hoyde)

areal = bredde * hoyde
print("Areal:", areal)
Vis løsningsforslag
class Areal {
    public static void main(String[] args) {
        int bredde = 10;
        int hoyde = 20;

        System.out.println("Bredde: " + bredde);
        System.out.println("Hoyde: " + hoyde);

        int areal = bredde * hoyde;
        System.out.println("Areal: " + areal);
    }
}

01.13: Bruk av konstruktør

Se på følgende kode. Endre programmet slik at instansvariablene blir satt ved hjelp av konstruktør i stedet for metodene.

public class Person {
    String navn; 
    int alder; 

    public void giNavn(String n){
        navn = n; 
    }   

    public void giAlder(int a){
        alder = a; 
    }
}
Vis løsningsforslag
public class Person {
    String navn;
    int alder;

    public Person(String n, int a){
      navn = n;
      alder = a;
    }
}

01.14: 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;
        }
    }
}

01.15: 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.

01.16: Returtyper

Fyll ut returtypene for følgende metoder:

a)

[returtype] jegReturnererIngenting() { 
}

b)

[returtype] summenAvToHeltall() {
   int a = 2;
   int b = 3;
   return a + b;
}

c)

[returType] summenAvToFlyttall(){
   double a = 2.0;
   double b = 3.0;
   return a + b;
}

d)

[returtype] navnetTilBrukeren(){
   Scanner tastatur = new Scanner(System.in);
   String navn = tastatur.nextLine();
   return navn;
}
Vis løsningsforslag

a) void
b) int
c) double
d) String

01.17: Bil-objekter

a) Skriv en klasse med navn 'Bil':
b) Bilen skal ha to variabler, en for eier og en for merke:

private String eier;
private String merke;

c) Lag en konstruktør for å sette verdien til eier og merke.
d) Skriv en metode for å skrive ut verdien til eieren og merket.
e) Test klassen din ved å opprette to Bil-objekter med forskjellige eiere. For å gjøre dette må du lage deg en ny klasse (egen fil) med en main-metode.

Eks:

public class Biltest {
    public static void main(String[] args) {
        // Her kan du opprette Bil-objekter og sette eier og merke.
    }
}
Vis løsningsforslag

a-d)

class Bil{

    private String eier;
    private String merke;

    public Bil(String e, String m){
        eier = e; //setter den globale verdien eier til lokale eier
        merke = m; //setter den globale verdien merke til lokale merke
    }


    public void infoOmBil(){

        System.out.println ("Eier:    "+ eier);
        System.out.println ("Merke:   "+ merke);

    }

}

e)

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

        Bil bilGeir = new Bil("Geir Kjetil", "ford");
        Bil bilSiri = new Bil("Siri", "volvo");

        bilGeir.infoOmBil();
        bilSiri.infoOmBil();

    }
}

01.18: Datastrukturtegning av biler

Denne oppgaven tar utgangspunkt i Trix-oppgave 1.17: Bil-objekter.

Tegn datastrukturen slik den ser ut etter når hovedprogrammet fra deloppgave e) kjøres. Anta at vi lager følgende biler:

Bil bilGeir = new Bil("Geir Kjetil", "ford");
Bil bilSiri = new Bil("Siri", "volvo");
Vis løsningsforslag

Se løsningsforslag her.

02.01: 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.

02.02: 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.