Ekstraoppgaver 8: 10. okt - 16. okt (INF1000 - Høst 2012)

  1. En Mobil-klasse:
    (a) Programmer en klasse Mobil og gi den variabler for merke, eier, og telefonnummer.

    (b) Opprett et objekt av klassen.

  2. En Person-klasse:
    (a) Programmer en klasse Person som inneholder variabler for navn, fødselsnummer og bosted. Main-metoden skal være i en annen klasse, ved navn OpprettPersoner.

    (b) Opprett et objekt av klassen Person, og sett passende verdier for navn, fødselsnummer og bosted.

    (c) Endre klassen Person slik at konstruktøren tar imot og setter fødselsnummeret og navnet, og endre samtidig hvordan du opprettet objektet i oppgave b.

  3. Person og kjæledyr:
    (a) Gjør oppgaven "En Person-klasse", hvis du ikke alt har gjort den. Vi fortsetter i denne fila. Lag en klasse Dyr som inneholder variabler for alder, navn og type dyr. Sistnevnte kan du lage som en String. Husk å skrive en konstruktør som tar imot verdiene, slik at du kan opprette et dyr slik: Dyr pus = new Dyr(4, "Tom", "katt"), der 4 er alderen på dyret, "Tom" er navnet på eieren og "katt" er navnet på typen dyr.

    (b) Utvid Person-klassen til å ha en variabel Dyr mittDyr, og lag metoder nyttDyr og giBortDyr. Metoden nyttDyr skal ta imot en alder, et navn og en String type som argumenter og sette mittDyr lik et nytt dyr med navnet og av typen type, mens giBortDyr skal ha returtype Dyr og sette mittDyr = null, og til slutt returnere hva mittDyr var.

    (c) Opprett to Person-objekter, og gi dem ett dyr hver. Så skal disse personene bytte dyr, f.eks:

    Donald har katten Tom. 
    Dolly har musa Jerry. 
    Donald og Dolly bytter: 
    Donald har musa Jerry. 
    Dolly har katten Tom.
    Dette skal gjøres ved at du gir Dolly det Donald sin giBortDyr()-metode returnerer og motsatt!

  4. 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<String, Dyr>. Opprett minst tre objekter av klassen Dyr, finn på navn og idnr. Husk at idnr bør være unike! Legg 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;
          }
    }
    

  5. [ NB! Resten av ekstraoppgavene denne uken er repetisjonsoppgaver. ]

  6. Utskrift av tabell: kap. 3, oppg. 2 (side 72)
    (a) Lag et program som benytter programpakken easyIO til å skrive ut følgende tabell på skjermen.  Tips: Se side 53 i læreboka.

    Bilmerke        Årsmodell       Reg.nr.
    ---------------------------------------
    Mercedes        1999            UE65660
    Ford            2003            ZE95523
    Toyota          2006            DK53401
    ---------------------------------------

    (b) (For spesielt interesserte.) Løs samme oppgave ved hjelp av printf i stedet for EasyIO.  Du kan bruke %s for å skrive ut en String, og %-16 for å angi venstrejustering av String-en på 16 plasser, for eksempel:

    System.out.printf("%-16s", "Ford");

     
  7. Filer, store bokstaver, og args:  kap. 3 (side 56), og oppg. 7 (side 73)
    (a) Filkopi: Lag et program som leser inn en fil og kopierer innholdet over til en annen fil.  Filen skal leses inn ett tegn av gangen ved hjelp av inChar().  Du kan ta utgangspunkt i programmet vist under, fra side 56 i læreboka, som leser en fil et tegn av gangen, men skriver innholdet i filen ut på skjermen.  Endre programmet slik at det skriver ut til til en annen, nyopprettet fil, i stedet for å skrive ut på skjermen; endre klassenavnet til Kopi, og utvid programmet slik at det ber bruker taste inn filnavnene for de to filene (original og kopi).

    import easyIO.*;
    
    class Tegnleser {
        public static void main(String[] args) {
    	In fil = new In("minfil.txt");
    	int antall = 0;
    
    	while (!fil.endOfFile()) {
    	    char tegn = fil.inChar();
    	    System.out.print(tegn);
    	    antall++;
    	}
    	System.out.println("Antall tegn: " + antall);
        }
    }
    

    (b) Store bokstaver: Ta utgangspunkt i programmet vist ovenfor, og endre det slik at det skriver ut tegnene fra den innleste filen til skjerm, men med alle små bokstaver konvertert til store bokstaver.  Følgende setninger viser hvordan man kan konvertere innholdet i en char-variabel c til store eller små bokstaver:
    char c = ’x’;
    char c2 = Character.toUpperCase(c);
    char c3 = Character.toLowerCase(c);
    

    (c) Antall ord: Når man skriver artikler for publisering er det ofte grenser for hvor mange ord de kan inneholde.  Lag et program som teller antall ord i en fil.  Filnavnet kan du be bruker taste inn når programmet starter.

    (d) args[]: Lag deretter en annen utgave av programmet som tar filnavnet fra første kommandolinjeargument, dvs. args[0].  "Kommandolinjeargumenter" er evt. tilleggs-ord som bruker angir i selve java-kommandolinjen når hun kjører programmet.  For eksempel, hvis bruker starter programmet med følgende kommando:

    $ java AntallOrd fil.txt ord2
    
    ...så putter Java de to siste tilleggs-ord i arrayen String args[] (som vi har sett øverst i alle programmene våre til nå uten å bruke det).  I dette tilfellet vil Java sørge for at args[0] får verdien "fil.txt" når programmet starter, og args[1] får verdien "ord2".

     
  8. Filbehandling linje for linje:  (eksempel side 57 i læreboka)
    (a) Studér følgende program, fra side 57 i læreboka, som leser en fil en linje av gangen, og skriver den ut på skjermen med linjenummer foran i hver linje.  Endre programmet slik at det i stedet for å skrive ut alle linjene bare skriver ut en melding til slutt om hvor mange linjer og hvor mange tegn filen inneholder.  For å telle antall tegn kan du bruke en variabel som summerer verdiene av linje.length()

    import easyIO.*;
    
    class Linjeleser {
        public static void main(String[] args) {
    	In fil = new In("minfil.txt");
    	int linjenummer = 0;
    
    	while (!fil.endOfFile()) {
    	    String linje = fil.readLine();
    	    linjenummer++;
    	    System.out.println(linjenummer + " " + linje);
    	}
        }
    }
    

    (b) Ta utgangspunkt i programmet vist ovenfor, og endre det slik at det skriver ut linjene på skjerm, men med alle små bokstaver konvertert til store bokstaver.  Følgende setninger viser hvordan man kan konvertere bokstavene i en String-variabel til store bokstaver:
    String s = "Jeg ER 18 år";
    String s2 = s.toUpperCase();
    // Nå er s2 tekststrengen "JEG ER 18 ÅR"
    

Løsningsforslag

Noen av oppgavene fra læreboka har løsningsforslag på Lærebokens hjemmeside.


Tibakemelding om dette oppgavesettet kan du skrive i bloggen eller sende på mail til siriamj[a] ifi.uio.no