Kapittel 12: Filer og strømmer. Java som første programmeringsspråk

Størrelse: px
Begynne med side:

Download "Kapittel 12: Filer og strømmer. Java som første programmeringsspråk"

Transkript

1 Kapittel 12: Filer og strømmer Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, ISBN Vi gir tillatelse til å bruke disse notatene i tilknytning til boken. Modifisert: 16/1/06 JFPS 12: Filer og strømmer 12-1/61 Emneoversikt Strømmer Filer Dataposter Binære filer Tekstfiler Terminal I/O Objektserialisering Direkte filtilgang JFPS 12: Filer og strømmer 12-2/61

2 Inn- og ut-data Inndata: Data som et program leser utenfra. Inndata kommer fra en kilde som produserer dataene. F.eks. tastatur, en fil Utdata: Data som et program skriver ut Utdata skrives ut til et mål som kan motta dataene. F.eks. skjerm, en fil En datafil tilbyr permanent lagring av data fra et program på et eksternt medium. JFPS 12: Filer og strømmer 12-3/61 Strømmer En strøm er et objekt som et program kan bruke til å skrive data til et mål (ut-strøm) eller lese data fra en kilde (inn-strøm). Sekvensielle strømmer: Data bare kan leses eller skrives med én verdi om gangen, dvs. som en sekvens. JFPS 12: Filer og strømmer 12-4/61

3 Bytestrømmer og tegnstrømmer Bytestrømmer håndterer sekvenser av bytes. Data bestående av åtte bits. Tegnstrømmer: håndterer sekvenser av tegn. Data bestående av 16-bits Unicode-tegn. JFPS 12: Filer og strømmer 12-5/61 Bytestrømmer (Figur 12.1) java.io InputStream FilterInputStream... DataInputStream «interface» DataInput ObjectInputStream «interface» ObjectInput FileInputStream... OutputStream FilterOutputStream DataOutputStream «interface» DataOutput PrintStream... ObjectOutputStream «interface» ObjectOutput... FileOutputStream JFPS 12: Filer og strømmer 12-6/61

4 Tegnstrømmer (Figur 12.2) java.io Reader... BufferedReader InputStreamReader... FileReader Writer BufferedWriter OutputStreamReader... PrintWriter FileWriter JFPS 12: Filer og strømmer 12-7/61 Filbehandling En fil betegner et spesifikt lagerområde på et eksternt medium, for eksempel harddisk, der informasjon er lagret. Data i filer blir lagret som en sekvens av bytes. Binærfil: Data tolket som en sekvens av bytes. Tekstfil: Data tolket som en sekvens av tegn. JFPS 12: Filer og strømmer 12-8/61

5 Standard lengde for predefinerte datatyper (Tabell 12.1) Predefinerte typer Antall bytes boolean 1 char 2 int 4 long 8 float 4 double 8 JFPS 12: Filer og strømmer 12-9/61 Filsti En filsti identifiserer en fil i filsystemet: String datafilnavn = "ansattfil.dat"; // Filsti angir filen. String filsti1 = "firma\\ansattfil.dat"; // Windows String filsti2 = "firma/ansattfil.dat"; // Unix String filnavn = "firma" + File.separator + "ansattfil.dat"; // Plattformuavhengig JFPS 12: Filer og strømmer 12-10/61

6 Dataposter (Figur 12.3) Problemstilling: lagre opplysninger om ansatte (Program 12.1) på en fil. String fornavn; String etternavn; double timelønn; boolean kjønn; En post er en oppstilling av ett eller flere datafelt. Et felt består vanligvis av en primitiv verdi, men en streng kan inngå som en feltverdi. felt 1 felt 2 felt 3 felt 4 "Ole" "Olsen" false post felt 1 felt 2 felt 3 felt 4 "Bill" "Bailey" false JFPS 12: Filer og strømmer 12-11/61 Binære filer En binærfil lagrer binære representasjoner av primitive verdier definert i Java. Tallverdier på filen opptar lagerplass i henhold til lengden definert i Java-programmeringsspråket. Tegn blir representert i Unicode-tegnsettet på i en binærfil. De boolske verdiene true og false blir lagret på filen med binær representasjon gitt ved henholdvis (byte)1 og (byte)0. Programmet må sørge for at verdiene som skrives ut blir tolket riktig ved innlesing. JFPS 12: Filer og strømmer 12-12/61

7 It's now or never Flaming Star Suspious Minds Angel Crying in the Chapel If I can dream Fever CC Rider Little Sister Are you lonesome tonight? Devil in desguise Utskriving av binære verdier (Figur 12.4) Objekt av klassen DataOutputStream Objekt av klassen FileOutputStream writeboolean(boolean v) writechar(int v) writechars(string s) writedouble(double v) writefloat(float v) writeint(int v) writelong(long v)... verdier Steg 2 bytes Steg 1 bytes binærfil FileOutputStream utfilstrøm = new FileOutputStream(binærfilnavn, utvid); // Steg 1 DataOutputStream utbinstrøm = new DataOutputStream(utFilStrøm); // Steg 2 JFPS 12: Filer og strømmer 12-13/61 Saksgangen for å skrive binære verdier på en fil (Figur 12.4, Program 12.2) 1. Definer et FileOutputStream-objekt som åpner filen det skal skrives til: FileOutputStream utfilstrøm = new FileOutputStream(datafilnavn, utvid); 2. Definer et DataOutputStream-objekt som kobles til FileOutputStream-objekttet: DataOutputStream utbinstrøm = new DataOutputStream(utFilStrøm); 3. Skriv verdier binært med relevante writex()-metoder definert i DataOutput- Stream-klassen. void skrivansattdata(dataoutputstream utbinstrøm) // (13) throws IOException { // Et strengfelt avsluttes med FELT_SLUTT_TEGN. utbinstrøm.writechars(fornavn + FELT_SLUTT_TEGN); utbinstrøm.writechars(etternavn + FELT_SLUTT_TEGN); utbinstrøm.writedouble(timelønn); utbinstrøm.writeboolean(kjønn); 4. Avslutt med å lukke strømmen for å frigjøre filen og andre ressurser: utbinstrøm.close(); JFPS 12: Filer og strømmer 12-14/61

8 It's now or never Flaming Star Suspious Minds Angel Crying in the Chapel If I can dream Fever CC Rider Little Sister Are you lonesome tonight? Devil in desguise Eksempel: Skriving av binære verdier (Program 12.2) Metoden skrivansattinfotilbinfil(), definert i klassen PersonellRegisterBin, skriver ut opplysninger om et ansatt. // Opprett strømmer for binærskriving. (4) FileOutputStream utfilstrøm = new FileOutputStream(datafilnavn, utvid); DataOutputStream utbinstrøm = new DataOutputStream(utFilStrøm); // Skriv hvor mange poster (dvs. antall ansatte) som skal // lagres i filen. utbinstrøm.writeint(antallansatte); // (5) // Skriv ut informasjon om alle ansatte. for (int i = 0; i < antallansatte; i++) ansatttabell[i].skrivansattdata(utbinstrøm); // (6) utbinstrøm.close(); // (7) JFPS 12: Filer og strømmer 12-15/61 Innlesing av binære verdier (Figur 12.5) Objekt av klassen FileInputStream Objekt av klassen DataInputStream bytes bytes binærfil Steg 1 Steg 2 verdier boolean readboolean() char readchar() double readdouble() float readfloat() int readint() long readlong()... FileInputStream innfilstrøm = new FileInputStream(binærfilnavn); // Steg 1 DataInputStream innbinstrøm = new DataInputStream(innFilStrøm); // Steg 2 JFPS 12: Filer og strømmer 12-16/61

9 Innlesing av binære verdier Prosedyren for å lese binære verdier fra en fil er følgende (se Figur 12.5 og Program 12.2): 1. Definer et FileInputStream-objekt som åpner filen det skal leses fra: FileInputStream innfilstrøm = new FileInputStream(datafilnavn); 2. Definer et DataInputStream-objekt som kobles til FileInputStream-objektet: DataInputStream innbinstrøm = new DataInputStream(innFilStrøm); 3. Les verdier binært med relevante readx()-metoder definert i DataInputStreamklassen. timelønn = innbinstrøm.readdouble(); kjønn = innbinstrøm.readboolean(); 4. Avslutt ved å lukke strømmen: innbinstrøm.close(); JFPS 12: Filer og strømmer 12-17/61 Eksempel: Lesing av binære verdier (Program 12.2) Metoden lesansattinfofrabinfil() i klassen PersonellRegisterBin sørger for innlesing av binære verdier for et ansatt: // Opprett strømmer for binærinnlesing. (9) FileInputStream innfilstrøm = new FileInputStream(datafilnavn); DataInputStream innbinstrøm = new DataInputStream(innFilStrøm); // Les hvor mange poster som er i filen. (10) int totalansatte = innbinstrøm.readint(); // Les inn informasjon om hver ansatt. (11) for (int i = 0; i < totalansatte; i++) { // Opprett en "tom" ansatt. AnsattBin nyansatt = new AnsattBin(); // Les data i den. nyansatt.lesansattdata(innbinstrøm); // Innsett i registeret. leggtilansatt(nyansatt); innbinstrøm.close(); // (12) JFPS 12: Filer og strømmer 12-18/61

10 Opplysninger om en ansatt blir lest av metoden lesansattdata() i klassen Ansatt- Bin, (14): fornavn = lesbinstrengfelt(innbinstrøm); etternavn = lesbinstrengfelt(innbinstrøm); timelønn = innbinstrøm.readdouble(); kjønn = innbinstrøm.readboolean(); Metoden lesbinstrengfelt() sørger for å lese en streng, (15): String str = ""; while(true) { char tegn = innbinstrøm.readchar(); if (tegn == FELT_SLUTT_TEGN) break; else str += tegn; JFPS 12: Filer og strømmer 12-19/61 Håndtering av slutt på inndata for binær innlesing (Program 12.3) Slutt på inndata håndteres ved å fange kontrollerte unntak av typen EOFException. Metoden main() sørger for å opprette strømmene og behandle IOExceptions som metoden lesfrabinfil() kaster videre. JFPS 12: Filer og strømmer 12-20/61

11 Håndtering av slutt på inndata ved binær lesing (Program 12.3) import java.io.*; public class EOFUnntak { public static void main(string[] args) { // (1) try { lesfrabinfil(args[0]); catch (FileNotFoundException unntak) { System.out.print("Filen ikke funnet: " + unntak); unntak.printstacktrace(); catch (IOException unntak) { System.out.print("Feil ved lesing: " + unntak); unntak.printstacktrace(); JFPS 12: Filer og strømmer 12-21/61 public static void lesfrabinfil(string filnavn) throws IOException { // (2) FileInputStream innfilstrøm = new FileInputStream(filnavn); // (3) DataInputStream innbinstrøm = new DataInputStream(innFilStrøm); try { // (4) while (true) { // (5) int i = innbinstrøm.readint(); System.out.println(i); catch (EOFException unntak) { // (6) System.out.print("Slutt på inndata."); innbinstrøm.close(); // (7) Utføring av programmet: >java EOFUnntak testdata.dat Slutt på inndata. JFPS 12: Filer og strømmer 12-22/61

12 It's now or never Flaming Star Suspious Minds Angel Crying in the Chapel If I can dream Fever CC Rider Little Sister Are you lonesome tonight? Devil in desguise Tekstfiler En tekstfil består av tekstlinjer. En tekstlinje består av en sekvens av tegn avsluttet med en linjeslutt-streng. Metodene i Java sørger for at denne strengen blir tolket riktig. Løsningen for å håndtere tegn mellom Java-program og omverdenen: Bytes som er lest av byte-inn-strømmen blir oversatt til Unicode-tegn av tegn-innstrømmen. Unicode-tegn (som skal skrives) oversettes til bytes av tegn-ut-strømmen og blir skrevet ut av byte-ut-strømmen. JFPS 12: Filer og strømmer 12-23/61 Utskrift til en tekstfil (Figur 12.6) print(boolean b) print(char t) print(char[] ttab) print(double d) print(float f) print(int i) print(long l) print(object obj) print(string str) println() println(...) printf(...)... Objekt av klassen PrintWriter Objekt av klassen FileWriter verdier tegn bytes Steg 2 Steg 1 tekstfil FileWriter tekstfilskriver = new FileWriter(tekstfilnavn,utvid); // Steg 1 PrintWriter tekstskriver = new PrintWriter(tekstFilSkriver); // Steg 2 JFPS 12: Filer og strømmer 12-24/61

13 It's now or never Flaming Star Suspious Minds Angel Crying in the Chapel If I can dream Fever CC Rider Little Sister Are you lonesome tonight? Devil in desguise Utskrift til tekstfiler (Figur 12.6 og Program 12.4) 1. Definer et FileWriter-objekt som åpner filen det skal skrives til: FileWriter tekstfilskriver = new FileWriter(datafilnavn, utvid); 2. Definer et PrintWriter-objekt som kobles til FileWriter-objektet: PrintWriter tekstskriver = new PrintWriter(tekstFilSkriver); 3. Skriv verdier ut som tekst med print()-metoder definert i PrintWriter- klassen. void skrivansattdata(printwriter tekstskriver) { // (13) // Felt adskilt med et feltslutt-tegn. tekstskriver.print(fornavn + FELT_SLUTT_TEGN); // (14) tekstskriver.print(etternavn + FELT_SLUTT_TEGN); // (15) tekstskriver.print(timelønn); // (16) tekstskriver.print(felt_slutt_tegn); // (17) tekstskriver.println(kjønn); // (18) jfr. kildekoden for metoden skrivansattdata2(). 4. Avslutt ved å lukke strømmen: tekstskriver.close(); JFPS 12: Filer og strømmer 12-25/61 Innlesing fra en tekstfil (Figur 12.7) Objekt av klassen FileReader Objekt av klassen BufferedReader String readline() bytes tegn tekstfil Steg 1 Steg 2 tekstlinje FileReader tekstfilleser = new FileReader(tekstfilnavn); // Steg 1 BufferedReader tekstleser = new BufferedReader(tekstFilLeser); // Steg 2 JFPS 12: Filer og strømmer 12-26/61

14 Innlesing fra tekstfiler (Figur 12.7, Figur 12.8 og Program 12.4): 1. Definer et FileReader-objekt som åpner filen det skal lese fra: FileReader tekstfilleser = new FileReader(datafilnavn); 2. Definer et BufferedReader-objekt som kobles til FileReader-objektet: BufferedReader tekstleser = new BufferedReader(tekstFilLeser); 3. Les én linje om gangen med readline()-metoden som returnerer et String-objekt: String post = tekstleser.readline(); Tegn i et felt kan hentes ut (steg 1 og 2 i Figur 12.8): int feltsluttindeks1 = post.indexof(felt_slutt_tegn); fornavn = post.substring(0, feltsluttindeks1); Felttegn må konverteres til tilsvarende primitiv verdi (steg 3 i Figur 12.8): String doublestr = post.substring(feltsluttindeks2 + 1, feltsluttindeks3); timelønn = Double.parseDouble(doubleStr); // (22) String sannhetsverdi = post.substring(feltsluttindeks3 + 1); kjønn = sannhetsverdi.equals("true"); // (23) jfr. kildekoden for metoden lesansattdata2(). 4. Avslutt ved å lukke strømmen. JFPS 12: Filer og strømmer 12-27/61 Innlesing og konvertering av tekst til primitive verdier (Figur 12.8) Steg 1: Finn indeks til feltslutt-tegn feltsluttindeks1 feltsluttindeks2 feltsluttindeks3 indeks Tekstlinje Steg 2: Ekstraher substreng O l e O l s e n f a l s e \n felt 1 felt 2 felt 3 felt 4 "Ole" "Olsen" "215.0" "false" Steg 3: Konverter substreng til flyttall til boolsk verdi false JFPS 12: Filer og strømmer 12-28/61

15 It's now or never Flaming Star Suspious Minds Angel Terminal I/O Hvert Java-program under utføring får automatisk knyttet til seg følgende tre bytestrømmer: 1. System.in leser bytes fra tastaturet. 2. System.out skriver bytes til skjermen. 3. System.err for å skrive feilmeldinger til skjermen. Terminal er en utstyrsenhet som har et tastatur og en skjerm. JFPS 12: Filer og strømmer 12-29/61 Utskrift til terminalen System.out er et objekt av Klassen PrintStream, og brukes til å sende utskrift til skjermen (Figur 12.9): System.out.println("Livet er for kort. Spis desserten først!"); print(boolean b) print(char t) print(char[] ttab) print(double d) print(float f) print(int i) print(long l) print(object obj) print(string str) println() println(...) printf(...)... Objekt av klassen PrintStream: System.out Terminalvindu JFPS 12: Filer og strømmer 12-30/61

16 It's now or never Flaming Star Suspious Minds Angel Avsøking med java.util.scanner-klassen En scanner konverterer inndata fra dens kilde til ord (eng. tokens). Whitespace (mellomrom, tabulatortegn, linjeskift) skiller ordene. Kilden kan være en String, en InputStream eller en Reader, og sendes som parameter i konstruktørkallet. Lookahead metoder boolean hasnext() Returnerer true dersom det er ord igjen inndata. boolean hasnextint() boolean hasnextlong() boolean hasnextdouble() boolean hasnextboolean() Returner true dersom neste ord i inndata kan tolkes som typen som tilsvarer metodenavnet. void close() Lukker denne scanneren og evt. dens kilde. Analyse av ord i inndata String next() Returnerer neste ord i inndata. String nextline() Flytter innlesing forbi innværende linje, og returnerer inndata som ble hoppet over. int nextint() long nextlong() double nextdouble() boolean nextboolean() Tolker neste ord i inndata som typen som tilsvarer metodenavnet. JFPS 12: Filer og strømmer 12-31/61 Innlesing fra terminalen Objekt av klassen InputStream: System.in Objekt av klassen Scanner Tastatur Steg 1 String next() int nextint() long nextlong() double nextdouble() boolean nextboolean() String nextline()... Scanner tastatur = new Scanner(System.in); // Steg 1 System.in er en byte-inn-strøm. Et Scanner-objekt kan kobles til System.in for innlesning. Metoder i Scanner-klassen brukes til å lese verdier som blir tastet. JFPS 12: Filer og strømmer 12-32/61

17 Eksempel: Innlesing fra terminalen import java.util.arraylist; import java.util.list; import java.util.scanner; import static java.lang.system.out; public class LesingFraTerminalMedScanner { public static void main(string[] args) { // En Scanner kobles til System.in, dvs. til terminalen. Scanner innleser = new Scanner(System.in); // Leser navn. String fornavn; String etternavn; String navn; String svar; do { System.out.print("Skriv fornavn: "); fornavn = innleser.next(); innleser.nextline(); // tøm inneværende linje for tegn. JFPS 12: Filer og strømmer 12-33/61 System.out.print("Skriv etternavn: "); etternavn = innleser.next(); innleser.nextline(); navn = etternavn + " " + fornavn; System.out.println("Navn: " + navn); System.out.print("Ett til? (j/n): "); svar = innleser.next(); while (svar.equals("j")); // Leser en list med heltall. List<Integer> intlist = new ArrayList<Integer>(); out.println("skriv en liste med heltall," + " avslutt med en verdi som ikke er heltall:"); while(innleser.hasnextint()) { int i = innleser.nextint(); intlist.add(i); for (int i : intlist) out.println(i); // Lukk scanner. innleser.close(); JFPS 12: Filer og strømmer 12-34/61

18 Kjøring av programmet: Skriv fornavn: Junior Skriv etternavn: Java Navn: Java Junior Ett til? (j/n): n Skriv en liste med heltall, avslutt med en verdi som ikke er heltall: slutt JFPS 12: Filer og strømmer 12-35/61 Klassen Terminal Klassen Terminal definerer statiske metoder for innlesning av verdier. public final class Terminal { private Terminal() {; private static Scanner leser = new Scanner(System.in); public static int lesint() { while (true) try { return leser.nextint(); catch (InputMismatchException ime) { reporterror(); catch (NoSuchElementException nsee) { reporterror(); //... private static void reporterror() { leser.nextline(); // Tøm linjen først. System.out.println( "Feil i inndata. Prøv på nytt!" ); Metoden nextint() kan kaste to ikke-kontrollerte unntak som kan være en god idé å håndtere. JFPS 12: Filer og strømmer 12-36/61

19 It's now or never Flaming Star Suspious Minds Angel Crying in the Chapel If I can dream Fever CC Rider Little Sister Are you lonesome tonight? Devil in desguise Objektserialisering Prosessen for å skrive ut et objekt kalles serialisering. All relevant informasjon om et objekt skrives ut som en bytesekvens. Prosessen for å lese inn disse opplysningene for å gjenskape et objekt kalles deserialisering. Objektet kan "gjenskapes" ved å tolke dets bytesekvens. Klassene ObjectOutputStream og ObjectInputStream definerer henholdvis objektut-strømmer og objekt-inn-strømmer som tilbyr metoder for å serialisere og deserialisere objekter. Klassene kan også brukes til å skrive og lese binære verdier og objekter. For at et objekt til en klasse skal kunne serialiseres, må klassen implementere java.lang.serializable-kontrakten. interface Serializable { // Tom kropp. class Ansatt implements Serializable {... JFPS 12: Filer og strømmer 12-37/61 Utskriving av objekter og binære verdier (Figur 12.11) writeobject(object obj) Objekt av klassen ObjectOutputStream Objekt av klassen FileOutputStream writeboolean(boolean v) writechar(int v) writechars(string s) writedouble(double v) writefloat(float v) writeint(int v) writelong(long v)... objekter primitive verdier bytes bytes Steg 2 Steg 1 datafil FileOutputStream utfilstrøm = new FileOutputStream(datafilnavn, utvid); // Steg 1 ObjectOutputStream utobjstrøm = new ObjectOutputStream(utFilStrøm); // Steg 2 JFPS 12: Filer og strømmer 12-38/61

20 Utskriving av objekter Metoden writeobject() i klassen ObjectOutputStream brukes til å skrive objekter. utobjstrøm.writeobject(nyansatt); Metoden skriver ut tilstanden til et objekt, som utgjør verdiene til feltvariabler i objektet. Statiske datamedlemmer blir ikke tatt med. Følgende metodekall serialisere hele personellregisteret: utobjstrøm.writeobject(personellregister); Følgende instans-datamedlemmer blir inkludert i denne serialiseringen: Ansatt[] ansatttabell; int antallansatte; int antallkvinner; Legg merke til at kallet ovenfor fører til at hele ansatttabellen også blir serialisert, inklusive Ansatt-objekter i tabellen. Ved innlesingen blir samme tilstand gjenskapt som før utskrivingen. JFPS 12: Filer og strømmer 12-39/61 Saksgangen for å serialisere objekter til en fil (Figur og Program 12.6): 1. Definer et FileOutputStream-objekt som åpner filen det skal skrives til: FileOutputStream utfilstrøm = new FileOutputStream(datafilnavn, utvid); 2. Definer et ObjectOutputStream-objekt som kobles til FileOutputStream-objektet: ObjectOutputStream utobjstrøm = new ObjectOutputStream(utFilStrøm); 3. Skriv ut objekter med writeobject()-metoden: utobjstrøm.writeobject(ansatttabell); // (5) Skriver ut en tabell I tillegg til å skrive objekter kan vi også skrive primitive verdier, for eksempel: utobjstrøm.writeint(antallansatte); utobjstrøm.writeint(antallkvinner); 4. Avslutt ved å lukke strømmen: utobjstrøm.close(); JFPS 12: Filer og strømmer 12-40/61

21 It's now or never Flaming Star Suspious Minds Angel Crying in the Chapel If I can dream Fever CC Rider Little Sister Are you lonesome tonight? Devil in desguise Innlesing av objekter og binære verdier (Figur 12.12) Objekt av klassen FileInputStream Objekt av klassen ObjectInputStream bytes bytes datafil Steg 1 Steg 2 objekter primitive verdier Object readobject() boolean readboolean() char readchar() double readdouble() float readfloat() int readint() long readlong()... FileInputStream innfilstrøm = new FileInputStream(datafilnavn); // Steg 1 ObjectInputStream innobjstrøm = new ObjectInputStream(innFilStrøm); // Steg 2 JFPS 12: Filer og strømmer 12-41/61 Innlesing av objekter Under deserialiseringen må man holde rede på at riktig antall objekter blir lest i riktig rekkefølge. Metoden readobject() i ObjectInputStream-klassen brukes til å lese inn ett serialisert objekt om gangen, inklusive dets delobjekter: Object objref = innobjstrøm.readobject(); Programmet må selv holde rede på hvilken klasse objektet egentlig tilhører: if (objref instanceof Ansatt) { // (1) Ansatt enansatt = (Ansatt) objref; // (2) double lønn = enansatt.beregnukelønn(47.5); // (3) Metoden readobject() gjenskaper hele objektet: Object ref = innobjstrøm.readobject(); if (ref instanceof PersonellRegister) { PersonellRegister nyttpersonellregister = (PersonellRegister) ref; nyttpersonellregister.skrivansattinfotilterminal(); JFPS 12: Filer og strømmer 12-42/61

22 Saksgangen for å deserialisere objekter fra en fil (Figur og Program 12.6) 1. Definer et FileInputStream-objekt som åpner filen det skal leses fra: FileInputStream innfilstrøm = new FileInputStream(datafilnavn); 2. Definer et ObjectInputStream-objekt som kobles til FileInputStream-objektet: ObjectInputStream innobjstrøm = new ObjectInputStream(innFilStrøm); 3. Les et objekt med readobject()-metoden. Kontroller objektets type før vi kaller metoder definert spesifikt i objektets klasse. // Les et objekt fra filen. Object nyttobj = innobjstrøm.readobject(); // (9) // Kontroller at det er en ansatttabell. if (nyttobj instanceof Ansatt[]) ansatttabell = (Ansatt[]) nyttobj; // (10) else System.out.println("Ansatttabell ikke funnet."; 4. Avslutt ved å lukke strømmen: innobjstrøm.close(); JFPS 12: Filer og strømmer 12-43/61 Mer om serialisering Serialiseringsprosessen er sekvensiell. Dette medfører at objektene blir deserialiert i den rekkefølgen de ble serialisert. Serialiseringsmekanismen unngår duplisering av objekter (Program 12.7). JFPS 12: Filer og strømmer 12-44/61

23 Direkte filtilgang (Figur 12.13) Klassen RandomAccessFile tilbyr det som kalles direkte filtilgang (Tabell 12.2). Kan både lese og skrive fra en vilkårlig posisjon i en fil. seek(0) It's now or never seek(inneværende - f) -f bytes inneværende = getfilepointer() +f bytes seek(inneværende + f) Flaming Star Suspious Minds Angel Crying in the Chapel If I can dream Fever CC Rider Little Sister Are you lonesome tonight? Devil in desguise seek(length()-1) //siste byte JFPS 12: Filer og strømmer 12-45/61 Direkte filtilgang (Tabell 12.2) RandomAccessFile(String filnavn, String filmodus) throws FileNotFoundException long length() void setlength(long nylengde) long getfilepointer() void seek(long forskyvning) int skipbytes(int n) boolean readboolean() char readchar() double readdouble() float readfloat() int readint() long readlong() java.io.randomaccessfile Åpner fil med angitt filnavn. Henter antall bytes lagret i filen, det vil si lengden til filen. Lengden til filen Henter filpekerens inneværende posisjon. Flytter filpekeren til posisjon angitt ved verdien i parameteren forskyvning. Hopper n bytes fremover fra inneværende posisjon i filen. Klassen definerer metoder for innlesing av binære verdier. JFPS 12: Filer og strømmer 12-46/61

24 java.io.randomaccessfile void writeboolean(boolean v) void writechar(int v) void writedouble(double v) void writefloat(float v) void writeint(int v) void writelong(long v) void writechars(string s) void close() Klassen definerer metoder for skriving av binære verdier. Metoden skriver hvert tegn i strengen som to bytes til strømmen, det vil si som et Unicode-tegn. Metoden lukker filen. JFPS 12: Filer og strømmer 12-47/61 Bruk av klassen RandomAccessFile For å opprette direkte tilgang til en fil må filen åpnes ved å angi filnavnet under opprettelsen av et RandomAccessFile-objekt: try { RandomAccessFile raf = new RandomAccessFile(datafilnavn, "rw"); catch (FileNotFoundException unntak) {... Filmodusen "rw" tillater kombinering av både lese- og skriveoperasjoner på filen. Filmodusen "r" tillater bare lesing fra en eksisterende fil. Antall bytes i en fil kalles fillengde, som returneres av metoden length(). En filpeker (eng. file pointer) angir hvor i filen lesing eller skriving kan utføres. En markør mellom to etterfølgende bytes på filen angir hvor lesing og skriving kan skje. Posisjoneringen av filpekeren med metoden seek() gjøres alltid ved å spesifisere riktig antall bytes fra starten av filen. JFPS 12: Filer og strømmer 12-48/61

25 Å hoppe over fem tegn fra inneværende posisjon: raf.skipbytes(10); For å utvide en fil ved å supplere data på slutten, må filpekerverdien settes lik fillengden: raf.seek(raf.length()); // Sett filpekeren til slutten av filen. Klassen RandomAccessFile kan også brukes til å lese og skrive binære verdier. En RandomAccessFile-strøm må også lukkes etter bruk. JFPS 12: Filer og strømmer 12-49/61 Eksempel: Bruk av direkte filtilgang (Program 12.8) Klassen AnsattDirekte leser og skriver en ansatt-post i posisjon angitt ved filpekeren. Alle poster har samme faste lengde. Dette betyr at samme felt i alle poster må ha fast feltlengde. For verdier av predefinerte datatyper er det gitt hvor mange bytes de opptar i filen. For at et felt med en strengverdi skal ha fast lengde, kan vi bruke følgende løsning: Dersom strengen er mindre enn feltlengden, fylles feltet med et bestemt tegn. Dersom strengen er større enn feltlengden, blir strengen trunkert slik at den passer i feltet. final static char FYLLE_TEGN = \u0000 ; final static int FORNAVN_LENGDE = 20; // Unicode-tegn final static int ETTERNAVN_LENGDE = 30; // Unicode-tegn final static int TIMELØNN_LENGDE = 8; // bytes final static int KJØNN_LENGDE = 1; // byte final static int POST_LENGDE_BYTES = 2*FORNAVN_LENGDE + 2*ETTERNAVN_LENGDE + TIMELØNN_LENGDE + KJØNN_LENGDE; // bytes JFPS 12: Filer og strømmer 12-50/61

26 Metoden skrivfastlengdestreng() i linje (3) tar strenglengden i betraktning og sørger alltid for at hele feltet blir fylt: int antallfylletegn = MAKS_FELT_LENGDE - str.length(); for (int k = 0; k < antallfylletegn; k++) str += FYLLE_TEGN; raf.writechars(str.substring(0, MAKS_FELT_LENGDE)); Metoden lesfastlengdestreng() i linje (5) sørger for at et felt som inneholder en streng, blir lest riktig: String str = ""; int i; for (i = 0; i < MAKS_FELT_LENGDE; i++) { char tegn = raf.readchar(); if (tegn == FYLLE_TEGN) break; else str += tegn; // Hopp over ev. sekvens av FYLLE_TEGN som opptar 2 bytes hver. raf.skipbytes(2*(maks_felt_lengde - i - 1)); return str; Konstruktøren i klassen PersonellRegisterDirekte oppretter et RandomAccess- File-objekt i en try-blokk i linje (6). Den nullstiller først innholdet i filen ved å sette fillengden til null. JFPS 12: Filer og strømmer 12-51/61 Metoden utvidmedenansattpåfil() definert i linje (7) i klassen PersonellRegisterDirekte utvider filen med en ny post: // Posisjoner filpeker etter siste post. raf.seek(raf.length()); // Skriv ansatt-info til filen. ansatt.skrivansattdata(raf); og oppdaterer opplysninger om antall poster lagret ved starten av filen: raf.seek(0); int antallregistrert = raf.readint(); raf.seek(0); raf.writeint(antallregistrert + 1); Metoden registrernytimelønnforansattpåfil() i linje (8) oppdaterer direkte inn i filen timelønnen til en ansatt som er angitt ved et ansatt-nummer: raf.seek(4 + ansattnummer*ansattdirekte.post_lengde_bytes); Etter at posten er lest til et AnsattDirekte-objekt, blir timelønnet justert. Deretter blir filpekeren spolt tilbake slik at tidligere feltverdier i posten kan overskrives: long inneværendeposisjon = raf.getfilepointer(); raf.seek(inneværendeposisjon - AnsattDirekte.POST_LENGDE_BYTES); JFPS 12: Filer og strømmer 12-52/61

27 enansatt.skrivansattdata(raf);håndtering av ansatt-poster med direkte filtilgang (Program 12.8) import java.io.*; class AnsattDirekte { // Konstanter for håndtering av poster med fast-lengde. (1) final static char FYLLE_TEGN = \u0000 ; final static int FORNAVN_LENGDE = 20; // Unicode-tegn final static int ETTERNAVN_LENGDE = 30; // Unicode-tegn final static int TIMELØNN_LENGDE = 8; // bytes final static int KJØNN_LENGDE = 1; // byte final static int POST_LENGDE_BYTES = 2*FORNAVN_LENGDE + 2*ETTERNAVN_LENGDE + TIMELØNN_LENGDE + KJØNN_LENGDE; // bytes //... void skrivansattdata(randomaccessfile raf) // (2) throws IOException { skrivfastlengdestreng(fornavn, FORNAVN_LENGDE, raf); skrivfastlengdestreng(etternavn, ETTERNAVN_LENGDE, raf); raf.writedouble(timelønn); raf.writeboolean(kjønn); JFPS 12: Filer og strømmer 12-53/61 private void skrivfastlengdestreng(string str, // (3) int MAKS_FELT_LENGDE, RandomAccessFile raf) throws IOException { // Feltet blir utvidet med FYLLE_TEGN dersom lengden den har, // er mindre enn MAKS_FELT_LENGDE. int antallfylletegn = MAKS_FELT_LENGDE - str.length(); for (int k = 0; k < antallfylletegn; k++) str += FYLLE_TEGN; raf.writechars(str.substring(0, MAKS_FELT_LENGDE)); public void lesansattdata(randomaccessfile raf) // (4) throws IOException { fornavn = lesfastlengdestreng(fornavn_lengde, raf); etternavn = lesfastlengdestreng(etternavn_lengde, raf); timelønn = raf.readdouble(); kjønn = raf.readboolean(); private String lesfastlengdestreng(int MAKS_FELT_LENGDE, // (5) RandomAccessFile raf) throws IOException { // Les tegn som utgjør strengverdien. String str = ""; int i; JFPS 12: Filer og strømmer 12-54/61

28 for (i = 0; i < MAKS_FELT_LENGDE; i++) { char tegn = raf.readchar(); if (tegn == FYLLE_TEGN) break; else str += tegn; // Hopp over ev. sekvens av FYLLE_TEGN som opptar 2 bytes hver. raf.skipbytes(2*(maks_felt_lengde - i - 1)); return str; class PersonellRegisterDirekte { private AnsattDirekte[] ansatttabell; private int antallansatte; private int antallkvinner; // Direkte tilgang-fil. private RandomAccessFile raf; PersonellRegisterDirekte(int maxantall, String datafilnavn) { ansatttabell = new AnsattDirekte[maxAntall]; try { // (6) // Opprett fil for lesing og skriving. raf = new RandomAccessFile(datafilnavn, "rw"); // Nullstill filen. raf.setlength(0); JFPS 12: Filer og strømmer 12-55/61 // Oppdater informasjon om antall poster i filen. raf.writeint(0); catch (FileNotFoundException unntak) { System.out.print("Filen ikke funnet." + unntak); System.exit(1); catch (IOException unntak) { System.out.print("Feil ved skriving: " + unntak); System.exit(1); //... void utvidmedenansattpåfil(ansattdirekte ansatt) { // (7) try { // Posisjoner filpeker etter siste post. raf.seek(raf.length()); // Skriv ansatt-info til filen. ansatt.skrivansattdata(raf); // Oppdater antall poster lagret på filen. raf.seek(0); int antallregistrert = raf.readint(); raf.seek(0); raf.writeint(antallregistrert + 1); JFPS 12: Filer og strømmer 12-56/61

29 catch (IOException unntak) { System.out.print("Feil ved skriving: " + unntak); void registrernytimelønnforansattpåfil(int ansattnummer, double tlønn) { // (8) try { // Sett filpeker til riktig post. raf.seek( 4 + ansattnummer*ansattdirekte.post_lengde_bytes); // Les post i et "tomt" ansatt-objekt og oppdater lønn. AnsattDirekte enansatt = new AnsattDirekte(); enansatt.lesansattdata(raf); enansatt.setttimelønn(tlønn); // Posisjoner filpekeren til å skrive tilbake posten. long inneværendeposisjon = raf.getfilepointer(); raf.seek(inneværendeposisjon - AnsattDirekte.POST_LENGDE_BYTES); enansatt.skrivansattdata(raf); catch (IOException unntak) { System.out.print("Feil ved innlesing: " + unntak); JFPS 12: Filer og strømmer 12-57/61 void lesansattinfofradirektetilgangfil() { // (9) try { // Sett filpekeren til starten. raf.seek(0); // Les hvor mange poster som er i filen. int totalansatte = raf.readint(); // Les inn informasjon om hver ansatt sekvensielt. for (int i = 0; i < totalansatte; i++) { // Opprett en "tom" ansatt. AnsattDirekte nyansatt = new AnsattDirekte(); // Les data i den. nyansatt.lesansattdata(raf); // Innsett i registeret. leggtilansatt(nyansatt); catch (IOException unntak) { System.out.print("Feil ved lesing: " + unntak); System.exit(1); // avbryter dersom IO-unntak oppstår. void lukkstrøm() { // (10) try { raf.close(); JFPS 12: Filer og strømmer 12-58/61

30 catch (IOException unntak) { System.out.print("Feil ved lukking: " + unntak); System.exit(1); class NyttFirmaDirekte { private static PersonellRegisterDirekte register; public static void main(string[] args) { // Opprett en tabell med ansatte. AnsattDirekte[] ansattinfo = { new AnsattDirekte("Ole", "Olsen", , AnsattDirekte.MANN), new AnsattDirekte("Bill", "Bailey", , AnsattDirekte.MANN), new AnsattDirekte("Liv", "Larsen", , AnsattDirekte.KVINNE) ; // Skriv ansatt-tabell på terminalen. System.out.println("Ansatte som skal lagres på fil."); for (int i = 0; i < ansattinfo.length; i++) System.out.println(ansattInfo[i]); JFPS 12: Filer og strømmer 12-59/61 // Opprett et personellregister med maks. 100 ansatte. // Filnavn angir filen for lagring av ansatt-poster. register = new PersonellRegisterDirekte(100, "ansattfil.data"); // Registrer ansatte direkte i filen. for (int i = 0; i < ansattinfo.length; i++) register.utvidmedenansattpåfil(ansattinfo[i]); // Oppdater timelønn direkte på fil. register.registrernytimelønnforansattpåfil(2, 100.0); register.registrernytimelønnforansattpåfil(0, 300.0); register.registrernytimelønnforansattpåfil(1, 400.0); System.out.println("Leser alle ansatte fra direkte tilgang-fil."); register.lesansattinfofradirektetilgangfil(); register.skrivansattinfotilterminal(); register.skrivrapport(); register.lukkstrøm(); Utskrift fra programmet: Ansatte som skal lagres på fil. Fornavn: Ole Etternavn: Olsen Timelønn: Kjønn: mann Fornavn: Bill Etternavn: Bailey Timelønn: Kjønn: mann JFPS 12: Filer og strømmer 12-60/61

31 Fornavn: Liv Etternavn: Larsen Timelønn: Kjønn: kvinne Leser alle ansatte fra direkte tilgang-fil. Antall ansatte: 3 Fornavn: Ole Etternavn: Olsen Timelønn: Kjønn: mann Fornavn: Bill Etternavn: Bailey Timelønn: Kjønn: mann Fornavn: Liv Etternavn: Larsen Timelønn: Kjønn: kvinne Firmaet har 3 ansatte, hvorav % er kvinner. JFPS 12: Filer og strømmer 12-61/61

Kapittel 12: Filer og strømmer INF 100. Java som første programmeringsspråk

Kapittel 12: Filer og strømmer INF 100. Java som første programmeringsspråk Kapittel 12: Filer og strømmer Forelesningsnotater for: INF 100 Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, 2003. ISBN 82-02-23274-0

Detaljer

Kapittel 12: Filer og strømmer. Java som første programmeringsspråk

Kapittel 12: Filer og strømmer. Java som første programmeringsspråk Kapittel 12: Filer og strømmer Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

Kapittel 12: Filer og strømmer. Java som første programmeringsspråk

Kapittel 12: Filer og strømmer. Java som første programmeringsspråk Kapittel 12: Filer og strømmer Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

Kapittel 14: Filer og strømmer. Kort versjon

Kapittel 14: Filer og strømmer. Kort versjon Kapittel 14: Filer og strømmer Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Kapittel 14: Filer og strømmer

Kapittel 14: Filer og strømmer Kapittel 14: Filer og strømmer Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

Kapittel 14: Filer og strømmer

Kapittel 14: Filer og strømmer Kapittel 14: Filer og strømmer Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

Kapittel 14: Filer og strømmer. Kort versjon

Kapittel 14: Filer og strømmer. Kort versjon Kapittel 14: Filer og strømmer Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Å lese tall fra en fil, klassen Scanner

Å lese tall fra en fil, klassen Scanner Å lese tall fra en fil, klassen Scanner 1. Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2. Kan skanne teksten etter data av ulike typer. 3. Kan kun skanne framover i teksten. Vis

Detaljer

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

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste Datafiler og serialisering Tekstfiler Scanner klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_lc191d.php

Detaljer

INF1000-SIKT - Notat om I/O i Java

INF1000-SIKT - Notat om I/O i Java INF1000-SIKT - Notat om I/O i Java Tuva Kristine Thoresen tuvakt@ulrik.uio.no 30. oktober 2013 Innhold 1 Innlesning fra terminal 2 1.1 Innlesning av tekst........................ 2 1.2 Innlesning av tall.........................

Detaljer

INF1010 våren 2018 tirsdag 23. januar

INF1010 våren 2018 tirsdag 23. januar INF1010 våren 2018 tirsdag 23. januar I/O og litt om bruk av unntak i Java Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type: Scanner boolean

Detaljer

IN Notat om I/O i Java

IN Notat om I/O i Java IN1010 - Notat om I/O i Java Mathias J.P. Stang, Tuva Kristine Thoresen, Ingrid Grønlie Guren 17. januar 2018 Dette notatet handler om I/O (input/output) i Java, og tar for seg innlesning fra terminal,

Detaljer

Litt om pakker og mest om data inn og ut

Litt om pakker og mest om data inn og ut Litt om pakker og mest om data inn og ut IN105-javainnogut-1 import java.io.*;. Data inn fra tastaturet lesemetode tastatur BufferedReader void lesemetode (String [ ] args) throws IOException {... /* sett

Detaljer

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

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først) INF1010 våren 2019 Onsdag 30. januar Mer om unntak i Java (med litt repetisjon av I/O først) Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type:

Detaljer

INF Notat om I/O i Java

INF Notat om I/O i Java INF1000 - Notat om I/O i Java Tuva Kristine Thoresen, Ingrid Grønlie Guren tuvakt@ulrik.uio.no, ingridgg@ulrik.uio.no 22. oktober 2014 Dette notatet handler om I/O (input/output) i Java, og tar for seg

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Kapittel 8: Sortering og søking

Kapittel 8: Sortering og søking Kapittel 8: Sortering og søking Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

TOD063 Datastrukturer og algoritmer

TOD063 Datastrukturer og algoritmer TOD063 Datastrukturer og algoritmer Øving : 3 Utlevert : Uke 7 Innleveringsfrist : 26. februar 2010 Klasse : 1 Data og 1 Informasjonsteknologi Gruppearbeid: 2-3 personer pr. gruppe. Oppgave 1 Vi skal lage

Detaljer

Enkel lesing og skriving i Java

Enkel lesing og skriving i Java Enkel lesing og skriving i Java Dag Langmyhr dag@ifi.uio.no 11. januar 2019 Innhold 1 Skriving 1 1.1 Skriving til fil...................................... 3 2 Lesing 4 2.1 Lesing fra fil.......................................

Detaljer

Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler

Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler Plan for dagen Vprg 4 LC191D Videregående programmering Høgskolen i Sør-Trøndelag Avdeling for informatikk og e-læring Anette Wrålsen Del: Intro til tekstfiler Del II: Mer om tekstfiler, Scanner-klassen

Detaljer

Kapittel 8: Sortering og søking INF100

Kapittel 8: Sortering og søking INF100 Forelesningsnotater for: Kapittel 8: Sortering og søking INF100 Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak 6108 Programmering i Java Leksjon 7 Filer og unntak Del2: 7.2 og 7.4 Roy M. Istad 2015 Fil: Permanent lagring av data PrintWriter(filnavn) throws Exception usjekkede/sjekkede unntak? skriver.println(data-i-tekstlinje)

Detaljer

Kapittel 8: Sortering og søking INF100

Kapittel 8: Sortering og søking INF100 Forelesningsnotater for: Kapittel 8: Sortering og søking INF100 Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

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

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 7 Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert

Detaljer

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen Forkurs INF1010 Dag 1 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Tuva Kristine Thoresen (tuvakt@ifi.uio.no) Institutt for Informatikk, 6. januar 2014 Forkurs INF1010 - dag 1 Hello, World! Typer Input/output

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I

Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI Del I Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I

Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI Del I Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf

Detaljer

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

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java INF1010 våren 2017 Onsdag 25. januar Litt om unntak i Java Stein Gjessing Nytt tema: Feilhåndtering (IO: Innlesing/Utskrift) n En metode som kan komme til å gjøre en IO-feil på fil må enten behandle denne

Detaljer

Kapittel 8: Programutvikling

Kapittel 8: Programutvikling Kapittel 8: Programutvikling Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak 6108 Programmering i Java Leksjon 7 Filer og unntak Del1: 7.1 7.2 Roy M. Istad 2015 Fil permanent lagring Ønsker at program skal kunne ta vare på data over tid, fra en kjøring til den neste (kontra hurtigminnet

Detaljer

Kapittel 7: Mer om arv

Kapittel 7: Mer om arv Kapittel 7: Mer om arv Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag,

Detaljer

Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå

Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå Vedlegg A.4 Filbehandling på char-nivå Side 1 av 9 Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå A.4 Filbehandling på char-nivå A.4.1 Reader-klassene Reader er en abstrakt basisklasse

Detaljer

Kapittel 13: Grafiske brukergrensesnitt INF 100. Java som første programmeringsspråk

Kapittel 13: Grafiske brukergrensesnitt INF 100. Java som første programmeringsspråk Kapittel 13: Grafiske brukergrensesnitt Forelesningsnotater for: INF 100 Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, 2003. ISBN 82-02-23274-0

Detaljer

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

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 6 Bokmål Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert

Detaljer

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

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 8 Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag Fredag 10. desember

Detaljer

Læringsmål for forelesningen

Læringsmål for forelesningen Læringsmål for forelesningen Objektorientering lesing og skriving av data Java-programmering IO klassene, kap. 10 og 18 i «Big Java» Eclipse... 1 Spill-Grupper Forslag til spill-prosjekter leveres innen

Detaljer

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet Eksamen i emnet INF101/INF101-F - Programmering 2 Fredag 10. juni 2011, kl. 09-14 Bokmål Tillatte hjelpemidler: alle skrevne og trykte.

Detaljer

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå Vedlegg A.1 Filbehandling på bit-nivå Side 1 av 9 Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå A.1 Filbehandling på bit-nivå A.1.1 Sammendrag Klassen BitInputStream gjør det mulig å lese

Detaljer

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder: Lese fra fil Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo INF1000 : Forelesning 5 Vi må først importere pakken easyio Vi åpner

Detaljer

Løse reelle problemer

Løse reelle problemer Løse reelle problemer Litt mer om løkker, metoder med returverdier, innlesing fra fil og strenger INF1000, uke5 Ragnhild Kobro Runde MER OM LØKKER Repetisjon fra forrige uke: while Syntaks: while (condition)

Detaljer

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

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk Kapittel 11: Unntakshåndtering Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

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

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen INF1000 EKSTRATILBUD Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen PLAN FOR DAGEN gjennomgå stoff fra uke 1-5(6), men med en litt annen tilnærming kun gjennomgått stoff, men vekt på konsepter og

Detaljer

Kapittel 5: Objektkommunikasjon

Kapittel 5: Objektkommunikasjon Kapittel 5: Objektkommunikasjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

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

INF 1010, vår 2005 Løsningsforslag uke 11 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

Detaljer

Løse reelle problemer

Løse reelle problemer Løse reelle problemer Litt mer om løkker, metoder med returverdier og innlesing fra fil INF1000, uke4 Geir Kjetil Sandve Repetisjon fra forrige uke: while Syntaks: while (condition) do1; do2;... Eksempel:

Detaljer

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

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; } 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; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =

Detaljer

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering Eksamensoppgave i TDT4100 Objektorientert programmering Torsdag 12. august 2010, kl. 09:00-13:00 Oppgaven er utarbeidet av faglærer Hallvard Trætteberg og kvalitetssikret av Svein Erik Bratsberg. Kontaktperson

Detaljer

Fra Python til Java, del 2

Fra Python til Java, del 2 Fra Python til Java, del 2 Hvordan kjøre Java? På Ifis maskiner På egen maskin Et eksempel Array-er For-setninger Lesing og skriving Metoder Biblioteket Hva trenger vi egentlig? Å kjøre Java For å kunne

Detaljer

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

INF1010 våren Arv og subklasser del 1 pluss (hvis vi har tid) litt om Unntak, IO og Scanner-klassen INF1010 våren 2014 Onsdag 5. februar Arv og subklasser del 1 pluss (hvis vi har tid) litt om Unntak, IO og Scanner-klassen Stein Gjessing Institutt for informatikk Universitetet i Oslo 1 Når du har lært

Detaljer

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

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000. Arne Maus, ver.2.2, august, 2013 Bruk av class, FileWriter og Formatter som alternativ til EasyIO i INF1000. Noen ønsker å bruke noen av de klassene vi finner i pakken java.util og java.io isteden for

Detaljer

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

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk Kapittel 11: Unntakshåndtering Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak 6108 Programmering i Java Leksjon 7 Filer og unntak Del1: 7.1 7.2 Roy M. Istad 2015 Fil permanent lagring Ønsker at program skal kunne ta vare på data over tid, fra en kjøring til den neste (kontra hurtigminnet

Detaljer

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man Eksempel med to-dimensjonal array Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 6 Vi skal lage et program som illustrerer

Detaljer

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

INF1010 våren Arv og subklasser del 1 (pluss litt I/O og unntaksbehandling) INF1010 våren 2012 Torsdag 9. februar Arv og subklasser del 1 (pluss litt I/O og unntaksbehandling) Stein Gjessing Institutt for informatikk Universitetet i Oslo 1 Når du har lært om subklasser kan du

Detaljer

Forelesningsquiz. Forelesning inf1000 - Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Forelesningsquiz. Forelesning inf1000 - Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min. Forelesning inf1000 - Java 5 Forelesningsquiz Tema: En liten quiz (se utdelt ark) Filbehandling Tekster Ole Christian Lingjærde, 19. september 2012 Sett dere to (eller tre) sammen og besvar de fire spørsmålene

Detaljer

Oblig 4Hybelhus litt mer tips enn i oppgaven

Oblig 4Hybelhus litt mer tips enn i oppgaven Oblig 4Hybelhus litt mer tips enn i oppgaven lørdag 19. okt 2013 Arne Maus Obligatorisk oppgave 4 Gulbrand Grås husleiesystem I denne oppgaven skal vi se på hans studenthus Utsyn. Utsyn består av 3 etasjer,

Detaljer

Algoritmer og datastrukturer A.1 BitInputStream

Algoritmer og datastrukturer A.1 BitInputStream Vedlegg A.1 BitInputStream Side 1 av 8 Algoritmer og datastrukturer A.1 BitInputStream A.1 BitInputStream A.1.1 Instansiering BitInputStream har fire konstruktører og to konstruksjonsmetoder (eng: factory

Detaljer

Kapittel 1: Datamaskiner og programmeringsspråk

Kapittel 1: Datamaskiner og programmeringsspråk Kapittel 1: Datamaskiner og programmeringsspråk Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

INF1000: Forelesning 4. Mer om arrayer Metoder

INF1000: Forelesning 4. Mer om arrayer Metoder INF1000: Forelesning 4 Mer om arrayer Metoder MER OM ARRAYER 2 Array som en samling verdier Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene: String[] studenter = new String[500];

Detaljer

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

IN 211 Programmeringsspråk. Java. på 20 enkle ark. spesielt for de som kan. Simula. (og gjerne litt C) Ark 1 av 20 Java på 20 enkle ark spesielt for de som kan Simula (og gjerne litt C) Ark 1 av 20 Forelesning 28.9.1998 Et minimalt eksempel Filen Hallo.java ser slik ut: class Hallo { public static void main(string

Detaljer

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU 1 Kunnskap for en bedre verden TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6 Terje Rydland - IDI/NTNU 2 Læringsmål og pensum Mål Lære bruk av inn- og ut-operasjoner

Detaljer

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015 Beskrivelse av programmeringsspråket Compila15 INF5110 - Kompilatorteknikk Våren 2015 Her beskrives syntaksen og den statiske semantikken (hva som skal sjekkes av kompilatoren) til språket Compila15. Den

Detaljer

Innhold. INF1000 Høst Klasser og objekter. Uke 7: Mer objektorientert programmering Siri Moe Jensen

Innhold. INF1000 Høst Klasser og objekter. Uke 7: Mer objektorientert programmering Siri Moe Jensen Innhold INF1000 Høst 2015 Uke 7: Mer objektorientert programmering Siri Moe Jensen Oo: Hva skjer egentlig i programmene våre? Hva var det vi gjorde annerledes i Uke 5? Klassemetoder (deklarert som static)

Detaljer

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet TGA Et større programeksempel Hvordan løse et reelt problem med en objektorientert fremgangsmåte En større problemstilling I uke 4 skrev vi et program for å sjekke om et gen (en tekstfil) inneholdt ordet "TGA"

Detaljer

Forelesning inf Java 4

Forelesning inf Java 4 Forelesning inf1000 - Java 4 Tema: Løkker Arrayer Metoder Ole Christian Lingjærde, 12. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1 Repetisjon: arrayer Deklarere og opprette

Detaljer

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

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 Repetisjon: arrayer Tema: Løkker Arrayer Metoder Ole Christian Lingjærde,. september Deklarere og opprette array - eksempler: int[] a = new int[]; String[] a = new String[]; I

Detaljer

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

import java.io.*; import java.util.*; import javagently.text; //-------------------------------------------------------- // // Fil: Oppg1.java - // løser oppgave 1 i eksamensettet for in105 - v99 // //-------------------------------------------------------- import

Detaljer

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program Oversikt INF1000 Uke 1 time 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning

Detaljer

INF1000 : Forelesning 5

INF1000 : Forelesning 5 INF1000 : Forelesning 5 Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo 1 Lese fra fil import easyio.*; Vi må først importere pakken

Detaljer

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

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15. Forkurs INF1010 Dag 3 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Gard Inge Rosvold (gardir@ifi.uio.no) Institutt for Informatikk, 15. januar 2016 Forkurs INF1010 - dag 3 Strenger 2 Forkurs INF1010 - dag

Detaljer

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster 3 emner i dag! INF1000 Uke 5 Litt om objekter, pekere og null Filer og easyio Litt mer om tekster Litt om objekter, filer med easyio, tekst 1 2 Objekter og pekere Vi lager pekere og objekter når vi bruker

Detaljer

INF1000 - Løsning på seminaropppgaver til uke 8

INF1000 - Løsning på seminaropppgaver til uke 8 INF1000 - Løsning på seminaropppgaver til uke 8 Oppgave 1 a) for(string nokkel : studenter.keyset){ System.out.println(nokkel); Studenten sitt navn blir skrevet ut. b) for(student dennestudenten : studenter.values()){

Detaljer

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

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java INF høsten 2 Uke 4: 3. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Mål for uke 4: Innhold uke 4 Repetisjon m/ utvidelser:

Detaljer

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

Post-it spørsmål fra timen (Arv og subklasser) Post-it spørsmål fra timen 30.01 (Arv og subklasser) Tegning Spørsmål: Skjønte ikke tegningene Hater tegningene. Lær meg å tegne. Mvh frustrert elev. Spørsmål: Datastruktur-tegning, og hvor mye detaljer

Detaljer

Del 1 En oversikt over C-programmering

Del 1 En oversikt over C-programmering Del 1 En oversikt over C-programmering 1 RR 2016 Starten C ble utviklet mellom 1969 og 1973 for å re-implementere Unix operativsystemet. Er et strukturert programmeringsspråk, hvor program bygges opp av

Detaljer

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

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et eksempel Klasser

Detaljer

22.02.2009. Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

22.02.2009. Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java Spørsmål fra forrige forelesning INF1000 Forelesning 7 Operator-presedens i Java? Hvordan virker metodene inword()/inint()/etc. i In-klassen i easyio når vi skriver inn flere verdier på tastaturet? Litt

Detaljer

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det? Obligatorisk oppgave 3 Gulbrand Grås husleiesystem Oblig 3hus litt mer tips enn i oppgaven I denne oppgaven skal vi se på hans studenthus Utsyn. Utsyn består av 3 etasjer, nummerert fra -3. I hver etasje

Detaljer

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale. Høgskolen i Telemark Fakultet for allmennvitenskapelige fag EKSAMEN I 6108/6108N PROGRAMMERING I JAVA 21. 12. 2015 Tid: 4 timer Sidetall: Hjelpemiddel: Merknader: Framside + 5 sider Alt trykt og skriftlig

Detaljer

INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første

Detaljer

Bruk av class Scanner, split(), FileWriter og Formatter som alternativ til easyio i INF1000.

Bruk av class Scanner, split(), FileWriter og Formatter som alternativ til easyio i INF1000. Arne Maus, ver.2.3, oktober, 2013 Bruk av class, split(), FileWriter og Formatter som alternativ til i INF1000. Noen ønsker å bruke noen av de klassene vi finner i pakken java.util og java.io isteden for

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : IN 105 Eksamensdag : Mandag 7. juni 1999 Tid for eksamen : 09.00-15.00 Oppgavesettet er på : 6 sider (inkludert vedlegg) Vedlegg

Detaljer

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

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm Mer om easyio Mer om forgreninger Løkker 7. september 2004 Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 4 1 Tre måter å lese fra terminal Først:

Detaljer

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2 Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2 11.2 Korteste vei i en graf 11.2.1 Dijkstras metode En graf er et system med noder og kanter mellom noder. Grafen kalles rettet Notasjon Verdien

Detaljer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første

Detaljer

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

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene: INF1000: Forelesning 4 Mer om arrayer Metoder MER OM ARRAYER 2 Array som en samling verdier Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene: String[] studenter = new String[500];

Detaljer

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

INF1010 våren Generalisering -spesialisering Gjenbruk av klasser. Ved arv. Klasse-hierarkier. Stein Gjessing. INF1010 våren 2009 Uke 5, 27. januar Arv og subklasser del I Stein Gjessing Institutt for informatikk 1 Emneoversikt subklasser Generalisering -spesialisering Gjenbruk av klasser Ved sammensetning (komposisjon)

Detaljer

Løsningsforslag Test 2

Løsningsforslag Test 2 Løsningsforslag Test 2 Oppgave 1.1: Interface definerer et grensesnitt som kan implementeres av flere klasser. Dette gir en standardisert måte å kommunisere med objekter av en eller flere relaterte klasser.

Detaljer

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

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs Forkurs INF1010 Dag 3 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Eivind Storm Aarnæs (eivinsaa@math.uio.no) Institutt for Informatikk, 14. januar 2015 Forkurs INF1010 - dag 3 Strenger Fil-I/O Unntakshåndtering

Detaljer

Kapittel 6: Arv. Redigert av: Khalid Azim Mughal (khalid@ii.uib.no)

Kapittel 6: Arv. Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kapittel 6: Arv Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag,

Detaljer

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 14.desember 2007 Varighet: 0900-1200 Fagnummer: Fagnavn: Klasser: LO347D Web-applikasjoner med Java EE Nettstudenter

Detaljer

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

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo INF, 22. mai 23 Prøveeksamen 23 (Eksamen 2. juni 22) Stein Gjessing Inst. for Informatikk Universitetet i Oslo Oppgave a Tegn klassehierarkiet for de 9 produkttypene som er beskrevet over. Inkluder også

Detaljer

Eksempel: Body Mass Index (BMI) Forelesning inf1000 - Java 3. Ferdig program (første del) Ferdig program (siste del)

Eksempel: Body Mass Index (BMI) Forelesning inf1000 - Java 3. Ferdig program (første del) Ferdig program (siste del) Forelesning inf1000 - Java 3 Eksempel: Body Mass Index (BMI) Tema: Mer om forgreninger Løkker Arrayer Litt om easyio Ole Christian Lingjærde, 5. september 2012 Ole Chr. Lingjærde Institutt for informatikk,

Detaljer

Kapittel 13: Unntakshåndtering

Kapittel 13: Unntakshåndtering Kapittel 13: Unntakshåndtering Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler

Detaljer

Ole Christian Lingjærde, 12. september 2013

Ole Christian Lingjærde, 12. september 2013 Ole Chr. Lingjærde Forelesning inf000 - Java 4 Tema: En første titt på metoder Løkker og arrayer Lese fra fil og skrive til fil Ole Christian Lingjærde,. september 03 Ole Chr. Lingjærde Institutt for informatikk,.

Detaljer