L?sningsforslag ukeoppg. 11: 31. okt - 6. nov (INF1000 - H?st 2013)

_中国竞猜网_中国足彩网-足球推荐

Oppgavesettet: Ukeoppgaver 11.

[N?kkeloppg.]: Oppgave merket med n?kkelsymbol er plukket ut som spesielt representativ for de viktigste temaene fra ukens forelesning, og alle b?r ha som minimumsm?l ? l?se denne selvstendig.

 

Oppgave 1

Legg inn i et hashmap

Du har klassen Dyr (se under) Lag en klasse DyreMap, som inneholder en main-metode. Her skal du deklarere et HashMap. Opprett minst tre objekter av klassen Dyr, finn p? navn og idnr. Husk at idnr b?r v?re unike! Les disse inn i HashMappet med idnr som n?kkel.

class Dyr { 
   String navn; 
   String idnr; 
   Dyr(String navn, String idnr) { 
     this.navn = navn; 
     this.idnr = idnr; 
   } 

   String getIDnr() { 
     return idnr; 
   } 
}

L?sningsforslag

import java.util.*;
class DyreHashMap {
    public static void main(String[] args) {
        // Oppretter et HashMap med dyr:
        HashMap<String, Dyr> dyr = new HashMap<String, Dyr>();
        // Oppretter tre dyre-objekter og legger dem inn i HashMappet:
        Dyr d1 = new Dyr("Albert", "1234");
        Dyr d2 = new Dyr("Shaun", "2345");
        Dyr d3 = new Dyr("Mathilde", "3456");

        dyr.put(d1.getIDnr(), d1);
        dyr.put(d2.getIDnr(), d2);
        dyr.put(d3.getIDnr(), d3);

        // L?per gjennom HashMappet og ser at dyrene er lagt inn
        for (Dyr d: dyr.values()) {
            System.out.println(d.navn + " " + d.getIDnr());
        }
    }
}

class Dyr {
    String navn;
    String idnr;
    Dyr(String navn, String idnr) {
        this.navn = navn;
        this.idnr = idnr;
    }
    String getIDnr() {
        return idnr;
    }
}
KJ?REEKSEMPEL:

Albert 1234

Mathilde 3456

Shaun 2345

Opppgave 2 - Array med tall

a) Lag et program som ber bruker taste inn tre heltall og lagrer disse i en array kalt tall:

int[] tall = new int[3];

b) Sum av array: Utvid programmet slik at det regner ut summen av tallene ved hjelp av en l?kke, og skriver ut resultatet.

c) Minste verdi: Utvid programmet slik at det finner og skriver ut det minste tallet i arrayen.

d) Lave verdier: Legg til programkode som skriver ut alle verdiene i arrayen som er mindre enn 10.

e) S?k: Legg til programkode som skriver ut en beskjed om verdien 5 finnes eller ikke finnes i arrayen.

import easyIO.*;
class Ukeoppg3_3 {
    public static void main(String[] args) {
        In tast = new In();
        Out skjerm = new Out();

        int[] tall = new int[3];

        // (a) Lese 3 tall fra tastatur:
        for (int i = 0; i < 3; i++) {
            // Ledetekst:
            skjerm.out("Angi tall[" + i + "]: ");

            // Les et tall fra tastatur og lagre det i arrayen tall[]:
            tall[i] = tast.inInt();
        }

        // (b) Sum av array:
        int sum = 0;
        for (int i = 0; i < 3; i++) {
            sum += tall[i];
        }
        skjerm.outln("(b) Sum av tallene = " + sum);

        // (c) Minste verdi:
        int minste = tall[0];
        for (int i = 0; i < 3; i++) {
            if (tall[i] < minste) {
                minste = tall[i];
            }
        }
        skjerm.outln("(c) Minste verdi = " + minste);

        // (d) Lave verdier:
        skjerm.out("(d) Lave verdier (< 10): ");
        for (int i = 0; i < 3; i++) {
            if (tall[i] < 10) {
                skjerm.out(tall[i] + " ");
            }
        }
        skjerm.outln();

        // (e) S?k:
        boolean funnet = false;
        for (int i = 0; i < 3; i++) {
            if (tall[i] == 5) {
                funnet = true;
            }
        }
        skjerm.out("(e) Verdien 5 finnes ");
        if (! funnet) {
            skjerm.out("ikke ");
        }
        skjerm.outln("i arrayen");
    }
}
KJ?REEKSEMPEL:

> java Ukeoppg3_3 Angi tall[0]: 2 Angi tall[1]: 7 Angi tall[2]: 11 b) Sum av tallene = 20 c) Minste verdi = 2 d) Lave verdier (< 10): 2 7 e) Verdien 5 finnes ikke i arrayen

Oppgave 3

Metoder (10 poeng) oppgave 5 fra eksamen h09

a) Nedenfor er det deklarert en metode sum(int[] array), som skal beregne summen av tallene i en int-array. Vil metoden kompilere? Hvis nei, forklar hva som m? endres for at metoden skal kompilere.

public void sum ( int[] array ) { 
   int sum = 0; 
   for (int i=0; i < array.length: i++) { 
      sum += array[i]; 
   } 
   return sum; 
}

L?sningsforlsag

Tre syntaksfeil:

  • I linje 3 brukes ’:’ i stedet for ’;’ etter betingelsen i for-l?kka.

  • I linje 4 brukes ’{’/’}’ i stedet for ’[’/’]’ som paranteser for ? angi plass i arrayen.

  • I linje 6 returneres en int-verdi, selv om metoden er deklarert void. Endre metodensreturtype til int.

b) Deklararer en metode snitt(int[] array), som skal beregne gjennomsnittet av tallene i parameteren array av type int-array. Snittet skal beregnes med flyttallsdivisjon og returverdien skal v?re av type double. Du skal skrive hele metoden, inkludert signaturen.

L?sningsforslag

double snitt (int[] array) {
    double snitt = 0.0;
    for (int i = 0; i < array.length; i++) {
        snitt += array[i];
    }
    return snitt/array.length ;
}

c) Vi kan beregne en gjenstands snitthastighet ved ? dividere tilbakelangt distanse p? tid. Deklararer en metode som tar to double-parametre distanse og tid, og som returnerer hastigheten som en double-verdi. Hvis verdien til tid er 0, skal metoden returnere -1. Du skal skrive hele metoden, inkludert signaturen. Finn p? et passende metodenavn.

L?sningsforslag

double snittHastighet (double distanse, double tid) {
    if (tid == 0) {
        return -1;
    }else{
        return distanse/tid;
    }
}

d) I sj?- og luftfart oppgis ofte hastigheter i knop. ?n knop er definert som én nautisk mil pr. time, som tilsvarer 1852 meter pr. time. Deklarer en metode som tar en double-parameter knop og returnerer den tilsvarende hastigheten i km/t som en double-verdi. Du skal skrive hele metoden, inkludert signaturen. Finn p? et passende metodenavn.

L?sningsforslag

double beregnKmT ( double knop ) {
    return knop * 1.852;
}

Oppgave 4

Klasser og objekter, Oppgave 11 eksamen h05 (25 poeng)

I programmet nedenfor skal du lage en konstrukt?r til klassen Pyramide som har pyramidens bredde, lengde og h?yde som tre double-parametreparameter. Du skal ogs? lage en objektmetode i klassen Pyramide som regner ut volumet og returnerer denne verdien (du skal bruke formelen: volum = 0.333*h?yde*bredde*lengde).

Du skal ogs? skrive programkode i main som oppretter to pyramider, en med langde =30.1,bredde=30.1 og h?yde = 22.9 og en med samme grunnflate, men med dobbelt s? stor h?yde som den f?rste pyramiden.

Fra main skal du s? kalle p? volumberegningsmetoden i hvert av de to objektene og skrive ut en linje for hver pyramide med h?yde, lengde og bredde samt volumet.

L?sningsfoslag

class PyramideTest {
    public static void main ( String [] args) {
        // skriv kode her som lager to Pyramide-objekter og
        // skriver ut deres h?yde, lengde og volum
        Pyramide[] p = new Pyramide[2];
        p[0] = new Pyramide(30.1,30.1,22.9);
        System.out.println("Pyramide "+ 30.1 +" x "+ 30.1+" x "+22.9+"har volum "+ p[0].volum());
        p[1] = new Pyramide(30.1,30.1,2*22.9);
        System.out.println("Pyramide "+ 30.1 +" x "+ 30.1+" x "+2*22.9+"har volum "+ p[1].volum());
    } // end main
} // end class PyramideTest

class Pyramide {
    double h?yde, lengde, bredde;
    // skriv konstrukt?r her
    Pyramide( double lengde, double bredde, double h?yde ){
        this.lengde = lengde;
        this.bredde = bredde;
        this.h?yde = h?yde;
    }
    // skriv objektmetode her som beregner og returnerer volumet
    double volum(){
        return 0.333*h?yde*bredde*lengde;
    }
} // end class Pyramide

Tilbakemelding p? dette oppgavesettet kan du sende p? mail til ingridgg [a] ifi.uio.no

Publisert 21. nov. 2013 09:40 - Sist endret 21. nov. 2013 09:42