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.02: Klassenavn i Java

Hva er et godt klassenavn i Java?

a)

class bok

b)

class BOK

c)

class Bok

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

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.06: Utskrift i pyramideform

Filnavn: Stjerner.java

Lag et Java-program som skriver ut tre linjer med stjerner "*" slik at det ser ut som en pyramide på skjermen. Kompiler og kjør, gjør endringer inntil du ser at programmet fungerer slik det skal.

1.01: MittProgram

Navn: MittProgram.java

a) Lag en fil som heter MittProgram.java.
b) Lag en klasse i filen som heter MittProgram.
c) Lag en main-metode i klassen (Hint: public static void main(String[] args)
d) Print "Dette er mitt program" til terminalen. (Hint: System.out.println)

class MittProgram {
    public static void main(String[] args) {
        System.out.println("Dette er mitt program");
    }
}

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).

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

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.

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

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

2.01: Min utskriftsmetode

Navn: MinMetode.java

a) Lag en klasse MinMetode og som printer "Hei student" til terminalen.
b) Endre programmet slik at printingen skjer uten et nytt linjeskift på slutten (Hint: System.out.print)
c) Lag en ny metode "static void linjeskift()" som printer ut et tomt linjeskift.
d) Kall metoden linjeskift etter at du har printet og sjekk at det blir likt som i oppgave a).

class MinMetode {
    public static void main(String[] args) {
        // Oppgave a
        System.out.println("Hei student");

        // Oppgave b
        System.out.print("Hei student");

        // Oppgave d
        linjeskift();
    }

    // Oppgave c
    public static void linjeskift() {
        System.out.println();
    }
}

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.

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.05: Kodeflyt

Dette er en penn- og papiroppgave

Vis programflyten i dette programmet

class Billettpris {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int pris = 50;
        int alder = Integer.parseInt(scan.nextLine()); 

        if (alder < 12 || alder > 67) {
            System.out.println("Du må betale " + pris*0.5 + "kr");
        } else {
            System.out.println("Du må betale " + pris + "kr");
        }
    }
} 

Avhengig av hva bruker taster, vil vi enten havne i if-blokken, eller else-blokken. Taster bruker et tall lavere enn 12, eller høyere enn 67, havner vi i if-blokken. Ellers havner vi i else.

2.06: Studie med feil

Navn: Studie.java

Med utgangspunkt i programmet nedenfor skal du utføre de angitte endringene en for en. Prøv først å kompilere programmet og studér eventuelle feilmeldinger. Dersom programmet lar seg kompilere, så forsøk å kjøre det. For hvert forsøk skal du rette programmet tilbake til utgangspunktet og kontrollere at det virker.

class Studie {
    public static void main(String[] args) {
        System.out.println("Rett på Java");
    }
}

a) Fjern ordet static.
b) Fjern ordet void.
c) Skriv studie i stedet for Studie.
d) Skriv Skrått i stedet for Rett.
e) Fjern den siste krøllparentesen.

2.07: Volum med feil

Navn: Volum.java

Finn feilene i dette programmet:

public class Volum {
    public static void main (String[] args) {
        integer lengde, bredde, høyde;
        lengde = 3;
        volum = lengde * bredde * høyde;
        System.out.println("Volumet er: " + volum);
    }
}
  1. Linje 3: "integer" skulle vært "int"
  2. Linje 5: Uinitialisert variabel volum
  3. Linje 5: bredde og høyde har ikke fått noen verdi.

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?

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.09: Hønsegården

Filnavn: Honsegaard.java

Du skal skrive et program som simulerer en natt i hønsegården. Hva som skjer, avhenger av om reven kommer, og om bonden sover eller ei.

Programmet skal lese inn fra terminal hvor mange høner som i bor i gården, om reven kommer i løpet av natten, og om bonden sover.

  1. Dersom reven kommer og bonden sover, blir én høne spist av reven.
  2. Dersom reven kommer og bonden ikke sover, blir ingen høner spist, og bonden selger reveskinnet for 190 kr.
  3. Dersom reven ikke kommer, skjer ingenting.

Eksempel på kjøring:

Hvor mange honer bor i gaarden?
> 15
Kommer reven?
> Ja
Sover bonden?
> Ja
Det bor naa 14 hons i gaarden.

Eksempel 2:

Hvor mange honer bor i gaarden?
> 15
Kommer reven?
> Ja
Sover bonden?
> Nei
Det bor naa 15 hons i gaarden. Bonden selger ett reveskinn, og tjener 190 kr.

2.11: Kompileringsfeil

Finn fem kompileringsfeil i programmet under:

class HarFeil {
    public static void main {
        System.out.println(Tast inn et siffer: );
        String tekstMedTall = tastatur.nextLine();
        x = Integer.parseInt(tekstMedTall);
        System.out.println("Det dobbelte er " + (2 * x))
    }
}
  1. Linje 2: Deklarasjonen av main mangler (String[] args)
  2. Linje 3: Anførselstegn rundt utskriftsstrengen mangler.
  3. Linje 4: Scanner er verken importert eller opprettet. "tastatur" gir ingen mening.
  4. Linje 5: x er ikke deklarert, mangler "int".
  5. Linje 6: Det mangler en avsluttende semikolon.

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

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