Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Expand
titleDel 4 - Input/output og Unntak (20%)
Oppgave a)

Lag en metode void read(InputStream input) i WordList som fyller ordlista med ord lest fra den angitte input-strømmen. Du kan anta at input-strømmen er fra en tekstfil eller tekstlig nettressurs. Hver tekstlinje består enten av et enkeltord eller et prefiks etterfulgt av bindestrek (‘-‘) og så en liste med endelser med komma (‘,’) mellom. Merk at ekstra mellomrom rundt skilletegnene ‘-‘ og ‘,’ må utelates fra prefiks og endelser. Du trenger ikke sjekke om ordene inneholder rare tegn. I tillegg kan en linje inneholde en ‘#’, som betyr at alt fra og med ‘#’-tegnet regnes som en kommentar som skal ignoreres. Alle unntak skal overlates til kalleren av metoden. 

Eksempler:

java # enkeltordformat: legger “java” inn i lista

# kommentarlinje, ingen ord

2-1,2,3 # prefiks og liste med endelser, legger “21”, “22” og “23” inn i lista

tretti- # prefiks med tom liste av endelser: legger “tretti” inn i lista

Expand
titleLF

Unntaket må deklareres med throws. Input må omsluttes med en Reader for å håndtere tekstkoding riktig. De ulike formatene må håndteres (kommentar som hele eller deler av linja, enkeltord, prefiks med endelse).

 

Code Block
public void read(InputStream input) throws IOException {
      BufferedReader reader = new BufferedReader(new InputStreamReader(input));
      String line = null;
      while ((line = reader.readLine()) != null) {
            int pos = line.indexOf('#');
            if (pos >= 0) {
                  line = line.substring(0, pos);
            }
            pos = line.indexOf('-');
      if (pos < 0) {
                 addWord(line);
            } else {
                  String prefix = line.substring(0, pos).trim();
                  String[] suffixes = line.substring(pos + 1).split(",");
                  for (int i = 0; i < suffixes.length; i++) {
                        addWord(prefix + suffixes[i].trim());
                  }
            }
      }
}
Oppgave b)

Hva er en checked exception? Anta at metoden m2 bruker metoden m1 og m1 (muligens) utløser en checked exception. Da er det to måter å kode m2 på som gjør at den kompilerer, hvilke?

Expand
titleLF

En Exception som ikke er en RuntimeException er en checked exception. En slik unntakstype krever enten try/catch eller en throws-deklarasjon for å unngå kompileringsfeil.

Oppgave c)

  Anta at metoden m2 bruker metoden m1 og m1 (muligens) kaster utløser en checked exception. Hvordan kan en kode m2 slik at den utløser en unchecked exception når m1 utløser en checked exception?

Expand
titleLF

En må fange unntaket med en try/catch og så utløse en ny unchecked exception, altså RuntimeException eller en egnet subklasse:

try { ... kode som kaster checked exception ...}

catch (Exception e) { throw new RuntimeException(e);}