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:

3.04: String-array

Navn: StringArray.java

a) Lag en array som inneholder tekststrenger.
b) Lag en løkke som går like mange ganger som arrayen er lang. (Hint: Bruk en teller i en løkke)
c) Les inn tekst fra brukeren og lagre det i arrayen. (Hint: bruk løkken fra b og telleren for å vite neste ledige posisjon i arrayen)
d) Skriv ut arryaen.

import java.util.Scanner;

class StringArray {
    public static void main(String[] args) {
        String[] array = new String[5];
        int teller = 0;
        Scanner tastatur = new Scanner(System.in);

        System.out.println("Skriv inn fem ord:");
        while(teller < array.length) {
            array[teller] = tastatur.nextLine();
            teller++;
        }

        teller = 0;
        System.out.println("Tastede ord:");
        while(teller < array.length) {
            System.out.println(array[teller]);
            teller++;
        }
    }
}

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.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.09: Sant eller usant om arrayer i Java.

Sant eller usant?

a) Alle elementer i en array er av samme type.
b) Array-indekser må være heltall.
c) Arrayer kan endre størrelse (bli større eller mindre avhengig av om vi trenger mer plass).
d) Arrayer kan ikke inneholde tekststrenger.
e) En metode kan ikke motta en array som parameter.

a) Sant. I en array må man spesifisere hvilken type arrayen skal være når man deklarerer den. For eksempel kan en type være int, double, String, og så videre.

b) Sant, array-indekser må være heltall.

c) Usant. Når en array først har blitt initialisert med en lengde, kan man ikke endre denne lengden. Om man trenger en lenger array, må man lage en ny en.

d) Usant. Arrayer kan inneholder tekststrenger. Arrayen må da være av typen String.

e) Usant. En metode kan motta en array som parameter. Eksempel på en metodesignatur kan være:

void jegErEnMetode(String parameterArray[]){
    <innhold i metoden>
 }

3.11: Kopier array.

Navn: KopierArray.java

a) Lag en String-array som du kaller stringArray som inneholder strengene "INF1000", "INF1500" og "INF1080".

b) Deretter lag en ny String-array som du kaller nyArray med 3 plasser.

c) Kopier alle strengene fra stringArray til nyArray.

class KopierArray{
  public static void main(String[] args) {
    String stringArray [] = {"INF1000", "INF1080", "INF1500"};
    String nyArray [] = new String [3];

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

3.15: Finn antall forekomster av en streng.

Navn: FinnAntall.java

a) Lag en String-array stasjoner med følgende verdier: "blindern", "Bislett", "Forskningsparken", "JERNBANETORGET", "toyen", "Jernbanetorget" og "forskningsparken".

b) Lag en void-metode der du får inn en String og en String-array som parameter. Du skal lage en metode sjekker hvor mange ganger strengen forekommer i arrayen. Antall forekomster skal printes ut. Også strenger med ulik bruk av små og store bokstaver skal regnes som like. Metodesignaturen skal se slik ut:

static void antallForekomster(String tekst, String [] array)

Hint: Metoden .equalsIgnoreCase() ignorerer små og store bokstaver.

class FinnAntall{
  public static void main(String[] args) {
    String [] stasjoner = {"blindern", "Bislett", "Forskningsparken",
    "JERNBANETORGET", "toyen", "Jernbanetorget", "forskningsparken"};

    //Testing
    antallForekomster("Forskningsparken", stasjoner);
    antallForekomster("Toyen", stasjoner);


  }

  static void antallForekomster(String tekst, String [] array){
    int antallForekomster = 0;
    int teller = 0;
    while(teller < array.length){
      if(array[teller].equalsIgnoreCase(tekst)){
        antallForekomster++;
      }
      teller++;
    }
    System.out.println(tekst + " forekommer " + antallForekomster + " ganger");
  }
}

4.01: Gjennomsnitt

Filnavn: Gjennomsnitt.java

Anta at vi har følgende array:

int[] tall = {1, 4, 2, 7, 9, 10};

a) Regn ut summen av tallene i arrayen.
b) Bruk summen til å regne ut gjennomsnittet av tallene i arrayen.

Lag deg et nytt array:

int[] innlesteTall = new int[5];

c) Lag en løkke og fyll arrayen med 5 verdier fra brukeren.
d) Gjenta oppgave a) og b) for den nye arrayen.

import java.util.Scanner;

class Gjennomsnitt {
    public static void main(String[] args) {
        int[] tall = {1, 4, 2, 7, 9, 10};
        int sum1 = 0;

        // Oppgave A
        for(int i = 0; i < tall.length; i++) {
            sum1 += tall[i];
        }

        System.out.println("Summen er " + sum1);

        // Oppgave B
        double snitt1 = (double) sum1 / (double) tall.length;

        System.out.println("Snittet er " + snitt1);

        // Oppgave C
        Scanner tast = new Scanner(System.in);
        int[] innlesteTall = new int[5];

        System.out.println("Tast fem tall:");

        for(int i = 0; i < innlesteTall.length; i++) {
            innlesteTall[i] = Integer.parseInt(tast.nextLine());
        }

        // Oppgave D-1
        int sum2 = 0;

        for(int i = 0; i < innlesteTall.length; i++) {
            sum2 += tall[i];
        }

        System.out.println("Summen er " + sum2);

        // Oppgave D-2
        double snitt2 = (double) sum2 / (double) innlesteTall.length;

        System.out.println("Snittet er " + snitt2);

        char[] c = new char[1];

        System.out.println(c[0]);
    }
}

4.02: Lese temperatur fra fil

Navn: TemperaturLeser.java

a) Lag et program som inneholder en String-array med 12 plasser.
b) Lag et Scanner-objekt for å lese filen "Temperatur.txt". Filen kan finnes her: http://www.uio.no/studier/emner/matnat/ifi/INF1000/h16/Obligatoriske%20innleveringer/temperatur.txt
c) Legg til en løkke i programet som går så lenge det finnes uleste linjer i filen. Lagre hver innleste linje i arrayen. Bruk her en teller for å holde styr på neste ledige plass.
d) Print ut alle elementene i arrayen.

import java.util.Scanner;
import java.io.File;

class TemperaturLeser {
    public static void main(String[] args) throws Exception {
        Scanner fil = new Scanner(new File("Temperatur.txt"));
        String[] temperaturer = new String[12];
        int teller = 0;

        while(fil.hasNextLine()) {
            temperaturer[teller] = fil.nextLine();
            teller++;
        }

        for(int i = 0; i < temperaturer.length; i++) {
            System.out.println(temperaturer[i]);
        }
    }
}

4.04: Enkel lesing fra fil

Navn: FraFil.java

a) Lag et program med en klasse FraFil som inneholder en main-metode.
b) Opprett et Scanner-objekt for å lese fra filen tekst.txt i main-metoden. Pass på at main-metoden må "kaste unntak" (throws Exception).
c) Lag en løkke som går så lenge det finnes uleste linjer i filen og som leser en ny linje hver gang løkken kjøres.
(Hint: Bruk Scanner sin metode hasNextLine())
d) Print alle de innleste linjene til terminalen.

Følgende tekst kan lagres i filen tekst.txt dersom du ønsker å teste programmet ditt:

hei
paa
deg
student
import java.util.Scanner;
import java.io.File;

class FraFil {
    public static void main(String[] args) throws Exception {
        Scanner fil = new Scanner(new File("tekst.txt"));

        String linje = "";
        while(fil.hasNextLine()) {
            linje = fil.nextLine();
            System.out.println(linje);
        }
    }
}

4.06: Returverdier

Fyll ut returtypene for følgende metoder:

a)

[returtype] jegReturnererIngenting() { 
}

b)

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

c)

[returType] summenAvToDobule(){
   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;
}

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

5.01: 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 Oppgave501 {
    public static void main(String[] args) {
        // Her kan du opprette Bil-objekter og sette eier og merke.
    }
}
public class Oppgave501 {
    public static void main(String[] args) {

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

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

    }
}

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

    }

}

```

5.04: Sett data med 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; 
    }
}
public class Person {
    String navn;
    int alder;

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

5.06: Espresso

I denne oppgaven skal vi modellere en kapselmaskin for espresso. Maskinen har to innstillinger, espresso (liten kopp) og lungo (større kopp). Maskinen kan ikke startes uten nok vann. En espresso krever 40ml, og en lungo krever 110ml. Maskinens vanntank er på 1000ml -- én liter.

Gitt "skjelettet" under, fyll ut metodene. Du kommer til å måtte definere dine egne instansvariabler når du skal løse denne oppgaven, og du står også fritt til å definere egne metoder i klassen. Tilslutt skal du teste at programmet fungerer ved å lage noen kaffedrikker. Lag en passende feilmelding dersom man prøver å lage en kaffe man ikke har nok vann til.

class EspressoMaskin {
    // Lag espresso dersom det er nok vann
    public void lagEspresso() {   }

    // Lag lungo dersom det er nok vann
    public void lagLungo() {   }

    // Fyll på et gitt antall milliliter vann, dersom det er plass
    public void fyllVann(int ml) {   }

    // Les av målestrekene på vanntanken og tilgjengelig vann i ml
    public int hentVannmengde() {   }
}
class EspressoMaskin {
    private int maxBeholdningVanntank = 1000; //Vanntanken kan maksimalt romme 1000ml van.
    private int innholdVanntank = 0; //Vanntanken er tom ved start.

    // Lag espresso dersom det er nok vann(40 ml)
    public void lagEspresso() {
        if(innholdVanntank >= 40){
          innholdVanntank -= 40; //Bruker 40ml for aa lage espresso.
          System.out.println("Espresso ble laget. Innholdet i vanntanken er naa " + innholdVanntank);
        } else {
          System.out.println("Du har for lite vann for aa lage espresso. Innholdet i vanntanken er " + innholdVanntank);
        }
    }

    // Lag lungo dersom det er nok vann(100ml)
    public void lagLungo() {
      if(innholdVanntank >= 100){
        innholdVanntank -= 100; //Bruker 100ml for aa lage lungo.
        System.out.println("Lungo ble laget. Innholdet i vanntanken er naa " + innholdVanntank);
      } else {
        System.out.println("Du har for lite vann for aa lage lungo. Innholdet i vanntanken er " + innholdVanntank);
      }
    }

    // Fyll på et gitt antall milliliter vann, dersom det er plass
    public void fyllVann(int ml) {
      if(ml + innholdVanntank > maxBeholdningVanntank){
        System.out.println("Du prover aa sette inn for mye vann i vanntanken. Innholdet i vanntanken er " + innholdVanntank);
      } else {
        innholdVanntank += ml; //Oppdaterer innholdet i vanntanken
        System.out.println(ml + " ble satt inn i vanntanken. Innholdet i vanntanken er er " + innholdVanntank);
      }
    }

    // Les av maalestrekene på vanntanken og tilgjengelig vann i ml
    public int hentVannmengde() {
      return innholdVanntank;
    }
}


class TestEspressoMaskin{
  public static void main(String[] args) {
    //Oppretter EspressoMaskin
    EspressoMaskin em = new EspressoMaskin();

    //Sjekker om vannmengde er 0 ved start.
    System.out.println("Ved opprettelse er vannmengde " + em.hentVannmengde());

    //Prover aa lage en espresso
    System.out.println("Prover aa lage en espresso");
    em.lagEspresso();

    //Prover aa sette inn 500 ml
    System.out.println("Prover aa sette inn 500 ml");
    em.fyllVann(500);

    //Prover aa lage en lungo
    System.out.println("Prover aa lage en lungo");
    em.lagLungo();

    //Prover aa sette inn 1000 ml
    System.out.println("Prover aa sette inn 1000 ml");
    em.fyllVann(1000);
  }
}

7.03: Enkelt køsystem

Du har fått i oppgave i å utforme et program for et enkelt køsystem for et nytt apotek. Køsystemet skal fungere som en rettferdig kø, som vil si at den som har ventet lengst på hjelp(som trakk lapp først), skal få hjelp først. Når en kunde har fått hjelp, skal den fjernes fra køen.

Klassene du har behov for er:

  • KoLapp - Skal ha en unikt nummer som sier når den ble trukket.

  • KoSystem - Skal kunne lage nye kølapper, betjene den kunden som har trukket kølapp først og enda ikke har blitt betjent og holde styr på hvor mange kunder som venter på å bli betjent. Dette skal oppnåes ved at den klassen innholder en ArrayList koLapper av objekter av typen KoLapp.

  • Oppgave703 - Skal ha en main-metode og en ordreløkke.

Grensesnittet til KoSystem ser slik ut:

public class KoSystem{

    //Lager et nytt objekt av KoLapp, printer ut informasjon om den og legger den til i listen over koLapper.     
    public void trekkKoLapp(){

    }

    //Henter ut, printer ut informasjon og fjerner den forste kolappen i lista. Gir feilmelding dersom ingen kunder staar i ko.
    public void betjenKunde(){

    }

    //Returnerer antall kunder som er i ko.
    public int antKunder(){

    }

    //Printer alle kunder i ko
    public void printKunderIKo(){

    }

}

Grensesnittet ser slik ut KoLapp:

public class KoLapp{

    //Konstruktor
    public KoLapp(int nummer){

    }

    //Returnerer et tildelt nummer paa kolappen.    
    public int hentNummer(){

    }
}

Oppgave703 skal inneholde en ordreløkke som tar i mot instrukser fra bruker. Se under for eksempel av kjøring:

> java Oppgave703
**MENY FOR BILLETTSYSTEM**
1 - Trekk ny kolapp.
2 - Betjen kunde.
3 - Print antall kunder i kø.
4 - Avslutt.

> 1
Du har fatt tildelt billettnr 1.
Det staar 0 foran deg.

**MENY FOR BILLETTSYSTEM**
1 - Trekk ny kolapp.
2 - Betjen kunde.
3 - Print antall kunder i kø.
4 - Avslutt.

> 3
Det staar 1 personer i ko.

**MENY FOR BILLETTSYSTEM**
1 - Trekk ny kolapp.
2 - Betjen kunde.
3 - Print antall kunder i kø.
4 - Avslutt.

> 1
Du har fatt tildelt billettnr 2.
Det staar 1 foran deg.

**MENY FOR BILLETTSYSTEM**
1 - Trekk ny kolapp.
2 - Betjen kunde.
3 - Print antall kunder i kø.
4 - Avslutt.

> 2
Kunde med billettnr. 1 er betjent.

**MENY FOR BILLETTSYSTEM**
1 - Trekk ny kolapp.
2 - Betjen kunde.
3 - Print antall kunder i kø.
4 - Avslutt.

> 4
Programmet avsluttes.
//klasse Oppgave703
import java.util.Scanner;

public class Oppgave703{

    public static void main(String[] args){
        KoSystem koSystem = new KoSystem();
        Scanner scanner = new Scanner(System.in);
        int valg = 0;

        while(valg != 4){
            printMeny();
            valg = Integer.parseInt(scanner.nextLine());

            if(valg == 1){
            koSystem.trekkKoLapp();
            } else if(valg == 2){
            koSystem.betjenKunde();
            } else if(valg == 3){
            koSystem.printKunderIKo();
            } else if(valg == 4){
            System.out.println("Programmet avsluttes.");
            } else {
            System.out.println("Error: tast 1,2,3 eller 4");
            }
        }
    }

    public static void printMeny(){
        String meny = "**MENY FOR BILLETTSYSTEM**\n";
        meny += "1 - Trekk ny kolapp\n";
        meny += "2 - Betjen kunde\n";
        meny += "3 - Print antall i ko\n";
        meny += "4 - Avslutt\n";

        System.out.println(meny);
    }
}

// Klasse Kolapp
public class KoLapp{

    int nummer;

    /**
     * konstruktor setter nummer paa kolapp
     */
    public KoLapp(int nummer){
        this.nummer = nummer;
    }

    /**
     * returnerer kolapp-nummeret
     */
    public int getNummer(){
        return nummer;
    }
}

// Klasse KoSystem
import java.util.ArrayList;

public class KoSystem{

    ArrayList<KoLapp> koLapper = new ArrayList<>();
    int teller = 0;

    /**
     * Lager et nytt objekt av KoLapp, printer ut
     * informasjon om den og legger den til i listen
     * over koLapper.
     */
    public void trekkKoLapp(){
        teller ++;
        KoLapp nyLapp = new KoLapp(teller);
        koLapper.add(nyLapp);

        System.out.print("Du har fatt tildelt billettnr ");
        System.out.println(nyLapp.getNummer() + ".");
        System.out.println("Det staar "+(koLapper.size()-1) +" foran deg.\n");
    }

    /**
     * Henter ut, printer ut informasjon og fjerner den
     * forste kolappen i lista. Gir feilmelding dersom
     * ingen kunder staar i ko.
     */
    public void betjenKunde(){
        if(koLapper.isEmpty()){
            System.out.println("ingen er i ko");
        } else {
            KoLapp betjenes = koLapper.remove(0);
            System.out.print("Kunde med billettnr: ");
            System.out.println(betjenes.getNummer() + " er betjent.\n");
        }

    }

    /**
     * Returnerer antall kunder som er i ko.
     */
    public int antKunder(){
        return koLapper.size();
    }

    /**
     * Printer alle kunder i ko
     */
    public void printKunderIKo(){
        System.out.println("Disse er i ko: ");

        // printer ved hjelp av en for-each-løkke
        for(KoLapp koLapp : koLapper){
            System.out.print("nr." + koLapp.getNummer() + ", ");
        }
        System.out.println("\n\n");
    }
}

8.01: Løpe igjennom en HashMap

Anta at studenter er fylt med Student-objekter og deklarert slik som under. Nøkkelen er navnet til studenten. Under kan du se hvordan HashMapen er deklarert og intialisert. Du kan anta at Student har en .toString()-metode som henter ut navn.

HashMap studenter = new HashMap();

  1. Bruk en for each-løkke til å skrive ut alle nøkkelverdiene. Hva skrives ut?

  2. Bruk en for each-løkke til å igjennom alle Student-objektene(verdiene), for å skrive ut navnet til studentene.

for(String nokkel : studenter.keySet()){
    System.out.println(nokkel);
}

Studenten sitt navn blir skrevet ut.

for(Student denneStudenten : studenter.values()){
    System.out.println(denneStudenten.toString());
}

8.02 - Datastruktur til problem.

Hvilken datastruktur passer til følgende problemer?

  1. En billettkø

  2. Et personregister hvor personer har en unik id

  1. Til en billettkø passer ArrayList best, siden man her kan bruke indeksen for å hele tiden hente ut element på plass 0.

  2. Til et personregister hvor personer har en unik id vil det passe best med HashMap, siden man her kan hente ut personen med nøkkel som id.

8.03: Enkel telefonbok

Vi skal i denne oppgaven lage en enkel telefonbok, der bruker kan søke på navn for å hente telefonnummer.

a) Lag en klasse Telefonbok med en main-metode. Opprett en HashMap med nøkkeltype String og verditype Integer.

b) Fyll HashMap'en med følgende relasjoner:
("Arne", 22334455)
("Lisa", 95959595)
("Jonas", 97959795)
("Peder", 12345678)

c) Lag en ordreløkke der bruker kan søke etter navn, og få det tilhørende opp telefonnummer.

d) Gjør slik at når bruker avslutter, løper du igjennom alle nøklene i HashMapen - og skriver ut navn og telefonnummer.

Hint: HashMap har en funksjon som heter keySet() som henter alle nøkler (navnene).

8.04: Finn student ved navn

Gitt HashMap'en studenter der nøkkelverdien representerer et navn. Skriv metoden under for å finne ut om det finnes en student med navnet Espen Askeladd.

public boolean finnStudent(String navn){
    return studenter.containsKey(navn);
}

Alternativt:

public boolean finnStudent(String navn){
   if(studenter.containsKey(navn)){
        return true;
    } return false;
}

9.01: Studentsystem

Du skal lage et system som har oversikt over hvilke fag en student tar, og fag skal holde oversikt over hvilke studenter som tar faget.

Programmet skal tilby følgende operasjoner:

  • Finne ut hvilket fag som blir tatt av flest studenter.
  • Finne ut hvilken student som tar flest fag.
  • Skrive ut alle studenter som tar et fag.
  • Skrive ut alle fag en student tar.
  • Legge til et nytt fag til en student/legge til en ny student til et fag.
  • Fjerne en student fra et fag/fjerne et fag fra en student.
  • Legge til ny student.
  • Legge til nytt fag.
  • Avslutt program.

Programmet skal lese inn fra en gitt fil; emnestudenter.txt Filen er på følgende format(forkortet versjon):

*MAT1001
Emilie
Jonathan
Henrik
Mari
Esben
Gard
Fritjof
*MAT1100
Mathias
Ole Petter
Elsie
Andreas
Martin

Oppgaver:
1. Lag et forenklet UML-diagram for programmet. UML-diagrammet trenger kun å inneholde klassenavn og relasjoner.
2. Lag en metode som leser inn fra fil og oppretter datastrukturen.
3. Implementer alle funksjonene som er oppgitt. Lag tester til alle metodene.
4. Etter at brukeren har bedt om å avslutte programmet, skal det skrives til fil igjen. Lag en metode som gjør dette.

Bonus: Få filnavn lest inn på kommandolinja.

1.) UML-diagram kan finnes her: UML til StudentSystem

2.) Løsningsforslag for denne oppgaven kan finnes her: Løsningsforslag til StudentSystem

A.1 - Krig

I denne oppgaven skal vi lage kortspillet krig!

a) Lag en klasse Kort.java som representerer et kort. Den skal ha en konstruktør som tar imot 'farge' og tall (seperat). Lag også tilhørende get-metoder og en toString-metode.

b) Lag en klasse Kortstokk.java som representerer en kortstokk. Den skal ha attributtene

private ArrayList<Kort> kortstokk; // fra java.util.ArrayList

private Random trekker; // fra java.util.Random

som initialiseres i konstruktøren, der kortstokk skal inneholde kortene og trekker skal være en generator for å trekke et tilfeldig kort litt senere.

c) Vi kan representere fargene på kortene slik: String[] farger = {"H", "K", "S", "R"}. Bruk to for-løkker der du går gjennom fargene og tallene, og fyll kortstokkene med add()-metoden til ArrayList (Dette kan gjøres i konstruktøren til kortstokk, eller i en egen metode).

d) Random-generatoren kan vi bruke slik:

int indeks = trekker.nextInt(kortstokk.size()). Vi har nå en indeks som er tilfeldig valgt. Lag en metode trekkKort(). Lag også en metode erTom().

Hint: Det kan her være lurt å sjekke java-API'et for ArrayList.

e) Lag en klasse Spiller.java som skal representere en kortspiller. Den skal ha en konstruktør som tar i mot et navn og initialiserer attributtene

private String navn;

private ArrayList<Kort> hand;

Lag også metodene giKort() der spilleren mottar et kort og legger det på handa, leggKort() der spilleren legger et kort på bordet, tomHand() som gir en booleanverdi og antallKort() som gir antall kort spilleren har på hand. Legg også til følgende toString-metode.

public String toString() {

        String string = navn + "\nKort: ";

        for (Kort k : hand) {

            string += k + " ";

        }

        return string;

    }

f) Lag en klasse Krig.java som skal representere selvet spillet vårt. Den skal ha én metode, nemlig en main()-metode. Lag en kortstokk, to spillere og fordel kortene i kortstokken mellom de to spillerne. Skriv ut spillerene til skjerm, for å sjekke at alt fungerer.

g) Vi skal nå lage resten av programmet vårt ved hjelp av diverse if-setninger. Begynn med en while-løkke som fortsetter helt til en av spillerne dine ikke har flere kort igjen. Det kan være lurt å gjøre noen forenklinger underveis, der for eksempel en av spillerene bare får kortene. Husk at det er den med høyeste kort som får alle kortene. Dersom man har det samme tallet, legges det frem 4 kort, og det siste hver av spillerene legger, avgjør hvem som får alle kortene. En forenkling kan være at dersom disse siste kortene også er like, får en av spillerne kortene.

Det kan også være hjelpsomt å skrive ut en del til terminalen underveis.