INF 1010, vår 2005 Løsningsforslag uke 11

Like dokumenter
INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

INF1010 våren 2018 tirsdag 23. januar

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF Notat om I/O i Java

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Kapittel 13: Unntakshåndtering

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

TOD063 Datastrukturer og algoritmer

Kapittel 13: Unntakshåndtering

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

INF1010 våren Arv og subklasser - del 2

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

Jentetreff INF1000 Debugging i Java

INF Løsning på seminaropppgaver til uke 8

INF1010 våren Arv og subklasser del 1 (pluss litt I/O og unntaksbehandling)

Repetisjon. INF gruppe 13

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

UNIVERSITETET I OSLO

IN Notat om I/O i Java

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Seminaroppgaver IN1010, uke 2

Fra Python til Java, del 2

Videregående programmering 6

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

INF1000-SIKT - Notat om I/O i Java

Leksjon 7. Filer og unntak

INF1000 (Uke 4) Mer om forgreninger, While-løkker

INF1010 våren Arv og subklasser del 1 pluss (hvis vi har tid) litt om Unntak, IO og Scanner-klassen

Løsningsforslag Test 2

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

UNIVERSITETET I OSLO

INF1010 våren Generalisering -spesialisering Gjenbruk av klasser. Ved arv. Klasse-hierarkier. Stein Gjessing.

INF1000 : Forelesning 4

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

IN 211 Programmeringsspråk. Java. på 20 enkle ark. spesielt for de som kan. Simula. (og gjerne litt C) Ark 1 av 20

Dagens tema Kapittel 8: Objekter og klasser

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

INF2100. Oppgaver 23. og 24. september 2010

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

INF1000: Forelesning 4. Mer om arrayer Metoder

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

INF Uke 10. Ukesoppgaver oktober 2012

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

INF2100. Oppgaver uke 40 og

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

import java.io.*; import java.util.*; import javagently.text;

HØGSKOLEN I SØR-TRØNDELAG

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Del 3: Evaluere uttrykk

Post-it spørsmål fra timen (Arv og subklasser)

Avdeling for ingeniørutdanning Institutt for teknologi

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

Inf 1000 høst 2005 Løsningsforslag ordinær eksamen

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

INF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

Litt om pakker og mest om data inn og ut

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

IN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:

INF2100. Oppgaver 26. september til 1. oktober 2007

Uke 5, 27. januar Arv og subklasser del I. Stein Gjessing Institutt for informatikk

Å lese tall fra en fil, klassen Scanner

UNIVERSITETET I OSLO

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java

I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter denne uken! Klart for første oblig

UNIVERSITETET I OSLO

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

OPPGAVE 5b og 8b Java Kode

Transkript:

INF 1010, vår 2005 uke 11 Anders Brunland 11. april 2005 Oppgave 1 Oppgave 1 i kapittel 19, Rett på Java Er følgende metoder lovlige? Hovorfor/hvorfor ikke? a) void koknverter ( int mnd ) { konverterdato ( mnd ); catch ( Exception e) { System. out. println (" Noe gikk veldig galt... "); catch ( KonverterDatoException kdm ) { System. out. println (" Feil månedsnummer "); Denne metoden er ikke lovlig. Siden man først fanger det mest generelle unntaket (Exception) vil man aldri kunne fange det mer spesielle unntaket (KonverterDatoException) det blir fanget i første catch-del. Feilmeldingen fra kompilatoren er: javac Unntaktest.java Unntaktest.java:8: exception KonverterDatoException has already been caught catch (KonverterDatoException kdm) { ^ 1 error Compilation exited abnormally with code 1 at Fri Apr 08 19:15:56 b) void konvertermer ( int mnd ) throws KonverterDatoException { konverterdato ( mnd ); finally { System. out. println (" takk for nå" ); 1

Denne metoden er lovlig. Først prøves den delen av koden som kan resultere i et unntak. Uavhengig av om det kastes et unntak eller ikke, utføres så setningen i finally-delen. Evt. unntak som blir kastet fanges muligens opp på kall-stedet, eller kastes videre derfra. Oppgave 2 Oppgave 2, kapittel 19, Rett på Java Hva blir utskriften til skjermen i følgende metode hvis filen ikke finnes? Hva om den finnes? 1 void lesfil () { 2 3 In inn = new In(" En fil som ikke finnes "); 4 System. out. println (" Utskrift 1" ); 5 catch ( IOException e) { 6 System. out. println (" Utskrift 2" ); 7 finally { 8 System. out. println (" Utskrift 3" ); 9 10 Hvis filen ikke finnes kastes det et unntak på linje 3. Unntaket er av typen FileNotFoundException, som er en subklasse av klassen IOException. IOException fanges opp på linje 5, og innholdet i catch-blokken blir utført. Tilslutt utføres finally-blokken. Resultatet blir som følger: Utskrift 2 Utskrift 3 Hvis filen finnes, forstetter programmet etter linje 3. Når try-delen er ferdig utføres finally-delen. Resultatet blir: Utskrift 1 Utskrift 3 Oppgave 3 Oppgave 3, kapittel 19, Rett på Java: Utvid konverterdato-metoden slik at den i tillegg til måned tar dag og år som parametere (dag oppgis som dato et tall mellom 1 og 31). Lag et testprogram. Eksempel på bruk av metoden: 2

konverterdato(2002, 12, 31) returnerer teksten 31. desember, 2002 konverterdato(2002, 4, 5) returnerer teksten 5. april, 2002 konverterdato(2002, 2, 29) gir en feil (et unntak) siden 2002 ikke er et skuddår. konverterdato(2002, 4, 31) gir en feil siden april ikke har 31 dager. Hint: Skuddår beregnes som følger. Hvis året er delelig med 4 og det ikke er et helt århundre, eller det er et helt århundre som er delelig med 400, der det et skuddår. Det gir at år 2000 var et skuddår, mens år 2100 ikke er et skuddår (ikke delelig med 400). /* * oppgave 3, kapittel 19. * Lagres på en fil ved navn Datokonverterer. java */ import easyio.*; import java.io.*; class Datokonverterer { public static void main ( String [] args ) { new Datokonverterer (); // For ikke å gjøre programmet unødig stort, er datoene som // konverteres skrevet rett inn i koden. Det overlates til leseren // å endre programmet slik at brukeren selv skriver inn datoene // som skal konverteres. Datokonverterer () { System. out. println ( konverterdato (2003, 4, 5)); System. out. println ( konverterdato (2000, 2, 29)); System. out. println ( konverterdato (2003, 4, 31)); catch ( KonverterDatoException e) { System. out. println (e. getmessage ()); System. out. println (" Takk for nå."); System. exit (0); String konverterdato ( int år, int mnd, int dag ) throws KonverterDatoException { 3

String [] mndnavn = {"", " januar ", " februar ", " mars ", " april ", " mai ", " juni ", " juli ", " august ", " september ", " oktober ", " november ", " desember "; // Sjekker lovlig måned if ( mnd < 1 mnd > 12) throw new KonverterDatoException(" Ulovlig måned : mnd = " + mnd ); // Sjekker lovlig dato if ( dag < 1 dag > 31) throw new KonverterDatoException(" Ulovlig dag : dag = " + dag ); // April, juni, september, og november kan bare ha 30 dager if ( dag > 30) { switch ( mnd ) { case 4: // april case 6: // juni case 9: // september case 11: // november throw new KonverterDatoException( mndnavn [ mnd ] + " kan ikke ha " + dag + " dager" ); // Februar kan maksimalt ha 29 dager if ( mnd == 2 && dag > 29) throw new KonverterDatoException( mndnavn [ mnd ] + " kan ikke ha " + dag + " dager "); // Hvis februar har mer en 28 dager må det være et skuddår. if ( mnd == 2 && dag > 28) { // Skuddår? boolean skuddår = ( år % 4 == 0 && år % 100!= 0) (år % 400 == 0); if (! skuddår ) throw new KonverterDatoException(" År " + år + " er ikke et skuddår." ); return dag + ". " + mndnavn [ mnd ] + ", " + år ; // end konverterdato class KonverterDatoException extends Exception { KonverterDatoException() { super (); 4

KonverterDatoException( String msg ) { super ( msg ); Resultat ved kjøring: >java -Dfile.encoding=cp850 Datokonverterer 5. april, 2003 29. februar, 2000 april kan ikke ha 31 dager Takk for nå. 5