Stein Gjessing 11. nov IN-OO1-EVU Dag 3. Stein Gjessing

Størrelse: px
Begynne med side:

Download "Stein Gjessing 11. nov IN-OO1-EVU Dag 3. Stein Gjessing"

Transkript

1 IN-OO1-EVU Dag 3 Stein Gjessing Litt repetisjon Kapittel 4: I/O, if og unntak (exceptions) Kapittel 5: While, switch, mer I/O Kapittel 6: Mengder av objekter Materiale også lånt av Arne Maus og Jens Kaasbøl 1 class Skog {. class Tree {. Tree totalenquiries 0 Skog main() Tree gran; noofenquiries 0 Tree furu; Tree bjerk;... System.out.println("Antall forespørsler " + gran.noofenquiries + " " + furu.noofenquiries + " " + bjerk.noofenquiries);... noofenquiries 0 enquiry() noofenquiries ++; totalenquiries ++; noofenquiries 0 enquiry() noofenquiries ++; totalenquiries ++; enquiry() noofenquiries ++; totalenquiries ++; 2 Universitetet i Oslo 11

2 class Skog main class Tree totalenquiries 0 Skog-objekt Skog gran noofenquiries 0 furu noofenquiries enquiry() bjerk 0 noofenquiries ++; totalenquiries ++; < Her gjør vi det som før ble gjort i main > noofenquiries 0 enquiry() noofenquiries ++; totalenquiries ++; enquiry() noofenquiries ++; totalenquiries ++; 3 Abstraksjon (og innkapsling) BilData-objekt public void lesfrafil (BufferedReader in) public void skrivtilfil (PrintWriter out) public Bil finnbil (String bilnummer) public void lagrebil (Bil bilen) Sort boks Men dette er stort sett bare syntaksen til metodene (grensesnittet). Hva med semantikken (betydningen av kallene)? 4 Universitetet i Oslo 21

3 Innkapsling (og abstraksjon) Information hiding (jfr databaser) public void lesfrafil (BufferedReader in) public void skrivtilfil (PrintWriter out) public Bil finnbil (String bilnummer) public void lagrebil (Bil bilen) Den første prototypen kan inneholde en meget enkel eller ingen datastruktur Datastrukturen kan stadig forenkles/ forbedres/ optimaliseres BilData-objekt 5 Objektorientering Klasser og objekter generelle typer og enkeltforekomster informasjonsskjuling, grensesnitt til systemet Pekere dynamiske datastrukturer uttrykke forhold/forbindelse mellom objekter Arv / subklasser generalisering og spesialisering, klassifisering, deling av kode forholdet mellom klasser Virtuelle metoder - polymorfi redefinering av operasjoner utsatt definering av operasjoner 6 Universitetet i Oslo 31

4 Hvordan finne klassene Kandidater til klasser: Håndfaste ting, andre (del)systemer Mennesker, roller Substantiver generelt Organisasjoner Hendelser, transaksjoner Steder 7 Objekt-egenskaper Et objekt har: Tilstand (verdi på data / variable) Handlinger (ved kall på metoder) Identitet (ett objekt er alltid unikt, forskjellig fra alle andre objekter) (((( identiteten er ofte adressen det er lagret på i RAM)))) Et objekt har intet navn 8 Universitetet i Oslo 41

5 Klasser og objekters ansvar En klasse skal representere en type av ting, en type logisk enhet, et begrep Et objekt representerer ikke bare passivt en slik 'ting' man har også ansvar / tilbyr tjenester (via metoder) overfor andre objekter. Objektet er en tjener (peer to peer vs. klient/tjener) Et objekt samarbeider ofte med andre objekter (av egen eller andre klasser) når det skal utføre en tjeneste. Dvs. objektet kaller metoder i andre objekter for å løse (deler) av oppgaven. Kalles ofte delegering. En klasse kan selv definere alle sine egenskaper/sitt ansvar, eller arve deler av det. 9 Eksempel public class Konto { // ett objekt representerer en bank-konto long kontonr, saldo; String eier ; Konto( int knr, String s) { kontonr = knr; eier = s; saldo = 0; public void settinn(int beløp) { saldo = saldo + beløp; public void taut(int beløp) { saldo = saldo - beløp; public void overfør(int beløp, Konto konto2) { taut(beløp); konto2.settinn(beløp); public int kontonummer ( ); { return kontonr; ; 10 Universitetet i Oslo 51

6 Konto Konto objekt long kontonr, saldo; String eier; Konto( int knr, String s) public void settinn(int beløp) public void taut(int beløp) public void overfør(int beløp, Konto konto2) public int kontonummer ( ); 11 Kapittel 4 Data inn fra tastaturet. BufferedReader mininn = new BufferedReader (new InputStreamReader (System.in)); En metode som leser fra tastaturet må ha besvergelsen throws IOException foran seg (etter overskriften). F.eks.: Hovedklasse main mininn Stein Gjessing BufferedReader String readline() public static void main (String [ ] args) throws IOException { For å lese en linje fra tastaturet: String streng; streng = mininn.readline ( ); Ferdiglaget metode som henter data inn fra tastatur 12 Universitetet i Oslo 61

7 class Greetings // side 97 { public static void main (String [] args) throws IOException { BufferedReader mininn = new BufferedReader (new InputStreamReader(System.in)); System.out.println("What is your name?"); String navn = mininn.readline ( ); System.out.println("Bonjour " + navn + ); Greetings main mininn navn BufferedReader String readline() Dette objektet leser fra tastaturet snidil:>javac Greetings.java snidil:>java Greetings What is your name? Stein Gjessing Bonjour Stein Gjessing snidil:> String 11 konstruktører 47 metoder pluss plass til å lagre en streng (en tekst) Stein Gjessing Et objekt av klassen String 13 Om å lese tall BufferedReader mininn = new BufferedReader (new InputStreamreader (System.in)); // Bruk: main mininn BufferedReader String readline() double tall; tall = Double.valueOf(minInn.readLine().trim()).doubleValue(); Dette objektet leser fra tastaturet Double er en klasse som inneholder mye verktøy som behandler kommatall av typen double. ( Dette har ingen ting med innlesing å gjøre. ) Det finnes andre klasser som bl.a. heter Character, Integer, Long og Boolean og som inneholder metoder for å ta seg av hhv. tegn, heltall (int og long) og logiske verdier. Se i pakken java.lang Double Double valueof ( ) double doublevalue( ) 14 Universitetet i Oslo 71

8 En enkel måte å lese tall på i Java uten Bishops Text-klasse BufferedReader mininn = new BufferedReader (new InputStreamreader (System.in)); int tall; String linje; tall linje = mininn.readline(); // HVIS LINJEN BARE INNEHOLDER ET TALL: tall = Integer.parseInt(linje); linje Integer String 11 konstruktører, 47 metoder pluss plass til å lagre en streng (en tekst) 137 int parseint ( ) Et objekt av klassen String 15 Enkel måte å lese tall - class Text For å gjøre lesing og skriving enklere har Judy Bishop laget en class Text som bl.a. behandler innlesing og utskrift fra tastatur/skjerm. Da kan du si: BufferedReader mininn = Text.open(System.in); String streng; streng = Text.readString (mininn); Mange av egenskapene til klassen Text står på side 98: Text BufferedReader open (...) double readdouble (...) int readint (...) char readchar (...) String readstring (...) class Text { public BufferedReader open (. ) {.. public double readdouble (BufferedReader in) {. public int readint (BufferedReader in) {. public char readchar (BufferedReader in) {. public String readstring (...) {.. Klassen Text leser tekstbiter (engelsk: items) eller tall som er adskilt med blank, tabulator eller komma. 16 Universitetet i Oslo 81

9 import javagently.text; class Sum { Text BufferedReader open (...) String readstring (...) public static void main (String [] args) throws IOException { Greetings main mininn navn BufferedReader String readline() BufferedReader mininn = Text.open(System.in); System.out.println("What is your name?"); String navn = Text.readString(minInn); System.out.println("Bonjour " + name ); snidil:>javac Greetings.java snidil:>java Greetings What is your name? Stein Gjessing Bonjour Stein snidil:> String 11 konstruktører, 47 metoder pluss plass til å lagre en streng (en tekst) Stein Dette objektet leser fra tastaturet Et objekt av klassen String 17 import javagently.text; class SumTast { Text BufferedReader open (...) int readint (...) void prompt (...) SumTast main tastatur tel sum nyttall BufferedReader public static void main (String [ ] args) throws IOException { BufferedReader tastatur = Text.open(System.in); int nyttall = 1; int sum = 0; Text.prompt( Tast inn noen tall, avslutt med 0: ); for (int tel = 0; nyttall!= 0 ; tel ++) { nyttall = Text.readInt(tastatur); sum += nyttall; System. out.println( Du skrev + tel + tall. ); System. out. println( Summen av disse tallene er: + sum); Dette objektet leser fra tastaturet Utføring av dette programmet etter et en feil er rettet opp: snidil: >javac SumTast.java snidil: >java SumTast Tast inn noen tall, avslutt med 0: Du skrev 8 tall. Summen av disse tallene er: 610 snidil: java> 18 Universitetet i Oslo 91

10 Lesing og skriving på filer (platelager) Prosessor f.eks. Pentium Primærlager (Random Access Memory) System-bus (ledninger) Platelager (Disk) I/O-bus f.eks. PCI Nettverksforbindelse 19 Først må vi lage en forbindelse med filen, det gjør vi med enten BufferedReader filinn = new BufferedReader (new FileReader ( minfil.txt )); eller: Innlesing fra fil: filinn Dette objektet leser fra filen minfil.txt BufferedReader BufferedReader filinn = Text.open( minfil.txt ); Nå kan vi bruke filen på samme måte som vi leste data fra tastaturet: minfil.txt Forelesning double dtall; String tekst; dtall = Text.readDouble(filInn); tekst = Text.readString(filInn); tekst dtall Et objekt av klassen String 20 Universitetet i Oslo 101

11 Innlesing fra fil import javagently.text; Text BufferedReader open (...) int readint (...) class SumFil { public static void main (String [] args) throws IOException { int resultat = 0, tall; BufferedReader filinn = Text.open( minfil.txt ); SumFil main filinn tall resultat BufferedReader Dette objektet leser fra filen minfil.txt for (int tel = 1; tel<= 15 ; tel + +) { tall = Text.readInt(filInn); resultat += tall ; System.out.println( Summen er + resultat); snidil: java>javac SumFil.java snidil: java>java SumFil Summen er snidil: java> Filen minfil.txt (laget f.eks. med emacs) Text BufferedReader open (...) int readint (...) Greetings2 main filinn antall import javagently.text; class SumFil2 { public static void main (String [] args) throws IOException { int resultat = 0, tall, antall; tall resultat Objekt av klassen BufferedReader som knytter forbindelse til filen BufferedReader filinn = Text.open( lengdefil.txt ); antall = Text.readInt(filInn) ; for (int tel = 1; tel<= antall ; tel ++) { tall = Text.readInt(filInn); resultat += tall ; System.out.println( Summen er + resultat); snidil: >javac SumFil2.java snidil: >java SumFil2 Summen er snidil: > lengdefil.txt Universitetet i Oslo 11

12 Oppgave. Vi skal lage et bilregister. Vi deler oppgaven i to: kontroll og kontakt med brukeren, og selve datastrukturen som tar seg av lagring av alle bil-dataene Her har vi kontakt med bruker beomnyeordre kall lesfrafil, lagnybil mm. lesfrafil. kall lesfrafil i datastrukt.. skrivtilfil. kall skrivtilfil i datastrukt.. lagnybil. kall lagnybil i datastrukt.. Her lagres alle bildataene lesfrafil Les alle biler fra fil skrivtilfil Skriv alle biler til fil lagnybil Lag en ny bil 23 Oppgave, 15 minutter: Programmer disse tre klassene med lesfrafil metodene (untatt Legg objektet på plass i mengden av alle biler ) objekt av class Bilreg objekt av class BilData objekter av class Bil lesfrafil Be bruker om filnavn Opprett kontakt med filen Kall datastrukturens lesfrafil Lukk filen lesfrafil ZKLOH (mer på filen) {Lag et bilobjekt Kall lesfrafil i dette objektet Legg objektet på plass i mengden av alle biler lesfrafil Les data om meg fra fil lesfrafil Les data om meg fra fil 24 Universitetet i Oslo 121

13 Utskrift til fil PrintWriter filutstrom = new PrintWriter (new FileWriter ( minutfil.txt )); Greetings2 main filut PrintWriter eller: PrintWriter filut = Text.create( minutfil.txt ); // Utskrift skjer som til skjerm: filut.println( utskrift + 17 ): For at innholdet på den nye filen skal bevares må vi til slutt si: filut.close( ); Dette objektet skriverpå filen minutfil.txt dtall void println() minutfil.txt Se eksempel side 105 i Bishop. 25 import javagently.*; class InnUt { Utskrift til fil - eksempel public static void main (String [] args) throws IOException { String tekst1, tekst2; BufferedReader mininn = new BufferedReader (new InputStreamReader(System.in)); PrintWriter filut = Text.create( minutfil.txt ); snidil: java>java InnUt Fornavn: Per Etteranavn: Petersen Gatenavn: Solhellinga Gatenummer: 123 Postnummer: 4990 Poststed: Søndeled Data er skrevet på filen "minutfil.txt" snidil: java> Text.prompt( Fornavn: ); tekst1= Text.readString(minInn); Text.prompt( Etteranavn: ); tekst2= Text.readString(minInn); filut.println( Navn: + tekst1 + + tekst2); Text.prompt( Gatenavn: ); tekst1= Text.readString(minInn); Text.prompt( Gatenummer: ); tekst2= Text.readString(minInn); filut.println( Adresse: + tekst1 + + tekst2); Text.prompt( Postnummer: ); tekst1= Text.readString(minInn); Text.prompt( Poststed: ); tekst2= Text.readString(minInn); filut.println( Poststed: + tekst1 + + tekst2); filut.close( ); System. out.println( Data er skrevet på filen \ minutfil.txt\ ); filut minutfil.txt Dette objektet skriver på filen minutfil.txt Navn: Per Petersen Adresse: Solhellinga 123 Poststed: 4990 Søndeled 26 Universitetet i Oslo 131

14 Valg (med if-else) if ( ORJLVNXWWU\NN) VHWQLQJ else VHWQLQJ Her utfører datamaskinen enten VHWQLQJ eller VHWQLQJ, IKKE begge to. Altså et valg mellom å gjøre EN av setningene EN gang. if (jeg føler meg dårlig) {bli i senga else {gå på på jobb Bare hvis VHWQLQJ eller VHWQLQJ består av flere setninger må vi sette klammeparenteser rundt (som rett over). Setninger inne i klammeparenteser kaller vi en blokk. if ( ORJLVNXWWU\NN) { VHWQLQJHU else { VHWQLQJHU Vi kan også skrive bare eller: if ( ORJLVNXWWU\NN) VHWQLQJ if ( ORJLVNXWWU\NN) { VHWQLQJHU I disse tilfellene utføres enten VHWQLQJHU eller ingenting. 27 Fem løsrevne eksempler: int tel, sum = 0; double gjennomsnitt; int nyttall, boolean fortsett = true; int highest, number; int tall, possum = 0, negsum = 0; if (tel > 0) gjennomsnitt = sum / tel; else gjennomsnitt = 0; tel nytall navn: fortsett type: boolean tall if (nyttall == 0) fortsett = false; else sum += nyttall; if (number > highest) highest = number; if ( tall > 0) { possum += tall ; System. out.println ( tallet var positivt ); else { negsum += tall ; System. out.println ( tallet var negativt ); if (tall > 0) { possum += tall ; System. out.println ( tallet var positivt ); else if (tall < 0 ) { negsum += tall ; System. out.println ( tallet var negativt ); else // tallet er null System. out.println ( tallet telles ikke ); Se side 109 og øvelsen ifb. Summation3-programmet Les også øverste halvdel av side Universitetet i Oslo 141

15 Program som finner gjennomsnittet av tall som brukeren skriver på tastaturet import javagently.*; Text BufferedReader open (...) String readint (...) void prompt (...) SumTast main tastatur tel sum BufferedReader class SumTast public static void main (String [] args) throws IOException { nyttall gjennomsnitt BufferedReader tastatur = Text.open(System.in); int nyttall = 1, tel, sum = 0; double gjennomsnitt; Text.prompt( Tast inn noen tall, avslutt med 0: ); for (tel = 0; nyttall!= 0 ; tel ++) { nyttall = Text.readInt(tastatur); sum += nyttall; tel - -; if (tel > 0) gjennomsnitt = (double) sum / tel; else gjennomsnitt = 0; System. out.println( Du skrev + tel + tall. ); System. out. println( Gjennomsnitt av disse tallene er: + gjennomsnitt ); Dette objektet leser fra tastaturet 29 Her er en variant av det samme programmet. Se på de små forskjellene. Legg spesielt merke til hvordan vi bruker en logisk variabel til å kontrollere når vi skal stoppe (terminere) repetisjonen: import javagently.*; class SumTast2 { public static void main (String [] args) throws IOException { BufferedReader tastatur = Text.open(System.in); int nyttall, sum = 0; double gjennomsnitt; int tel; boolean fortsett = true; Text.prompt( Tast inn noen tall, avslutt med 0: ); for ( tel = -1; fortsett ; tel ++) { nyttall = Text.readInt(tastatur); if (nyttall == 0) fortsett = false; else sum += nyttall; if (tel > 0) gjennomsnitt = (double) sum / tel; else gjennomsnitt = 0; System. out.println( Du skrev + tel + tall. ); System. out. println( Gjennomsnitt av disse tallene er: + gjennomsnitt ); navn: fortsett type: boolean snidil: >javac SumTast2.java snidil: >java SumTast2 Tast inn noen tall, avslutt med 0: Du skrev 5 tall. Gjennomsnitt av disse tallene er: snidil: > 30 Universitetet i Oslo 151

16 import javagently.*; highest number class HighestValue { public static void main(string[] args) throws IOException { BufferedReader in = Text.open(System.in); System.out.println("***** Finding the highest number *****"); Text.prompt("How many numbers (1 or more)?"); int n = Text.readInt(in); System.out.println("Type them in"); Text.prompt("1>"); int highest = Text.readInt(in); int number; for (int i = 2; i <= n; i++) { Text.prompt( i + > ); number = Text.readInt(in); if (number > highest) highest = number; // slutt for System.out.println("That's enough, thanks"); System.out.println("The highest number was +highest); // slutt main // slutt hovedklasse Variablen highest inneholder høyeste verdi til nå snidil: >javac HighestValue.java snidil: >java HighestValue ***** Finding the highest number ***** How many numbers (1 or more)? 4 Type them in 1> 234 2> > fem Error in number, try again. 5 4> 2463 That's enough, thanks The highest number was 6321 snidil: > 31 // side 108, meget lett modifisert. Sammenlign! import javagently.*; number class Summation3 { public static void main(string[] args) throws IOException { BufferedReader in = Text.open(System.in); int count; double total = 0; double postotal = 0; double negtotal = 0; double number; Text.prompt("How many numbers?"); count = Text.readInt(in); for (int i = 1; i <= count; i++) { Text.prompt(i+">"); number = Text.readDouble(in); total = total + number; if (number > 0) { postotal += number; System.out.println ( Tallet var positivt ); else { negtotal += number; System.out.println ( Tallet var negativt ); // end if // end for Øvelse: Rett programmet slik at det ikke skriver at null er et negativt (eller et positivt) tall snidil: >javac Summation3.java snidil: >java Summation3 How many numbers? 6 1> 34 Tallet var positivt 2> 56 Tallet var positivt 3> -2 Tallet var negativt 4> 0 Tallet var negativt 5> 34 Tallet var positivt 6> -23 Tallet var negativt That s enough, thanks. The total is 99.0 The positive total is The negative total is snidil: > System.out.println("That's enough, thanks."); System.out.println("The total is + total); System.out.println("The positive total is +postotal); System.out.println("The negative total is +negtotal); // end main // end class 32 Universitetet i Oslo 161

17 Oppgave, 15 minutter: Programmer disse tre klassene med skrivtilfil metodene (untatt flere biler og Hent neste objekt ) objekt av class Bilreg objekt av class BilData objekter av class Bil skrivtilfil Be bruker om filnavn Opprett kontakt med filen Kall datastrukturens skrivtilfil Lukk filen skrivtilfil ZKLOH (flere biler) { Hent neste objekt Kall skrivtilfil i dette objektet skrivtilfil Skriv data om meg selv på fil skrivtilfil Skriv data om meg selv på fil 33 Introduksjon til unntaksbehandling Vi har allerede sett at de unntakene som kan oppstå, og som programmet ikke vil behandle, de må programmet kaste videre (til Javas kjøresystem): public static void main(string[] args) throws IOException { BufferedReader filinn = Text.open( minfil.txt );. For eksempel hvis filen ikke finnes (her tok jeg bare å skiftet ut filanevnet minfil.txt med navnet minfil2.txt i programmet SumFil): snidil: >javac SumFil.java snidil: >java SumFil java.io.filenotfoundexception: minfil2.txt at java.lang.throwable.<init>(compiled Code) at java.lang.exception.<init>(compiled Code) at java.io.ioexception.<init>(compiled Code) at java.io.filenotfoundexception.<init>(compiled Code) at java.io.fileinputstream.<init>(compiled Code) at java.io.filereader.<init>(compiled Code) at javagently.text.open(compiled Code) at SumFil.main(Compiled Code) snidil: > 34 Universitetet i Oslo 171

18 Eksempel fra Judy Bishops Text-klasse: package javagently; Integer import java.util.*; import java.text.*; public class Text {.. public static int readint (BufferedReader in) throws IOException { if (T==null) refresh(in); while (true) { try { return Integer.parseInt(T.nextToken()); catch (NumberFormatException e2) { System.out.println("Error in number, try again."); // end class Text parseint <og så hvis feil:> throw new NumberFormatException( ); Skisse av unntaksbehandling A try { A kaller B B catch (Untaksklasse unt) { < Unntaksbehandling. Dette hoppes over når intet unormalt har hendt > < her fortsetter vanligvis programmet både etter normal utføring og etter behandling av eventuelle unntak > Figur 4.6 B oppdager en feil: throw new Untaksklasse ( ) ; Normal retur fra B til A Untaksklasse er en forhåndsdeklarert subklasse av klassen Exception. 36 Universitetet i Oslo 181

19 import javagently.*; Eksempel side 120, lett modifisert class Olympics { public static void main(string[] args) throws IOException { System.out.println("** Olympic medals **"); System.out.println(); BufferedReader in = Text.open(System.in); BufferedReader fin = null; String filename = null; boolean fortsett = true; while ( fortsett ) { // i boka: for ( ; ; ) try { System.out.print("What file for the + medals statistics?"); filename = Text.readString(in); fin = Text.open(filename); // Success, so break out of the loop fortsett = false; // i boka: break; catch (FileNotFoundException e) { System.out.println(filename+ " does not exist."); System.out.println("Try again"); String country; int gold, silver, bronze, total, all = 0; System.out.println("\nCountry\t\tGold\tSilver + \tbronze\ttotal"); try { while ( true ) { // i boka: for ( ; ; ) country = Text.readString(fin); gold = Text.readInt(fin); silver = Text.readInt(fin); bronze = Text.readInt(fin); total = gold + silver + bronze; System.out.print(country); if (country.length() < 8) System.out.print("\t"); System.out.println("\t"+gold+"\t"+silver+ "\t"+bronze+ "\t"+total); all += total; catch (EOFException e) { System.out.println(all+" medals won."); 37 I Olympics -programmet legger vi merke til hvordan den første try-catch-setningen ligger inne i løkka, mens den andre try-catch-setning ligger utenfor løkka (løkka ligger inne i try-setningen). Når det skjer en feil i det første tilfellet (vi får et filnavn som ikke finnes), skal vi bare fortsette repetisjonen for å be om et nytt filnavn. Får vi derimot et riktig filnavn må repetisjonen avsluttes. I boka gjøres det med setningen break; Denne setningen avslutter den omliggende repetisjons-setning (for og whilesetning, samt switch-setning som vi går igjennom senere). Jeg har valgt å avslutte repetisjonen ved hjelp av en boolsk variabel isteden. Når det skjer en feil inne i den siste løkka (filen er slutt), avsluttes repetisjonen og programmet går ut og behandler unntaket utenfor repetisjonen. Det er greit, for da er også programmet ferdig med å lese filen, og alt som står igjen er å skrive ut resultater. 38 Universitetet i Oslo 191

20 Unntak - oppsummering Brukes til å fange feil - eller uvanlige situasjoner Metoden må si fra hvilke feil-typer som kan oppstå inni seg og som den kaster:...main(...) throws IOException Når en slik feilsituasjon oppstår: Lages det et objekt Det sendes til den metoden hvor feilen oppstod Vi må ikke (men kan) behandle feil av typen: RunTimeException Artimetriske feil andre normale feil under utregninger Error Grusomme systemfeil vi ikke kan gjøre noe særlig med Behandler vi LNNHslike feil, avsluttes programmet 39 Unntak - oppsummering, forts. Alle de feil vi kan behandle er av typen Exception (eller subklasser av denne) Flere måter å behandle unntak/avbrudd: 1) Ignorere dem hvis de er av typen RunTime eller Error kommer de, terminerer programmet 2) Kaste dem videre SXEOLFVWDWLFYRLGPDLQWKURZV,2([FHSWLRQ programmet terminerer 40 Universitetet i Oslo 201

21 Unntak - oppsummering, forts. 3) Ta imot dem / fange dem: try{... farlig kode. catch ( Exception e) {... gjør noe fornuftig fordi feil har oppstått.. 4) Ta imot dem, gjøre noe og så kaste dem videre: try{... farlig kode. catch ( Exception e) {... gjør noe fornuftig fordi feil har oppstått.. throw e; 41 Feil - divisjon med 0 public class TryTest { public static void main ( String [ ] args) { int i=1; for (int j=0; j < 5; j++) try{ i = 10/j; System.out.println("Det gikk OK, i:" + i + ", j:" + j); // end TryTest catch (Exception e) { System.out.println("Feil i uttrykk: "+ e.getmessage()); e.printstacktrace(); VQLGLO>@MDYD7U\7HVW )HLOLXWWU\NNE\]HUR MDYDODQJ$ULWKPHWLF([FHSWLRQE\]HUR DW7U\7HVWPDLQ&RPSLOHG&RGH 'HWJLNN2.LM 'HWJLNN2.LM 'HWJLNN2.LM 'HWJLNN2.LM 42 Universitetet i Oslo 21

22 Oppgave (10 minutter) a) Modifiser lesfrafil i brukergrensesnittet slik at brukeren får en mulighet til å skrive nytt filnavn om filen ikke finnes. b) Modifiser lesfrafil i bilene slik at innlesingen stopper når det ikke er mer igjen på filen. 43 Om pakker En pakke er en samling (Java)filer som ligger i en katalog. Katalogens navn er pakkens navn, og alle.java-filene må starte med: package <katalognavn>; Hver fil kan gjerne inneholde flere klasser, men hver fil kan bare ha en klasse som er synlig utenfra (public). Navnet på den synlige klassen må også være navnet på filen. De andre klassene på filen er bare hjelpeklasser for filens hovedklasse. Fra en fil til en annen i samme pakke kan man imidlertid få tak i alle klasser, metoder og variable (untatt når disse er deklarert private). En pakke må ligge i stien (path - classpath) som Java-systemet leter i for å finne pakker som skal brukes (importeres) inn i programmet ditt. En enkel måte å få Java til å finne en pakke du lager er å legge den samme sted som programmet ditt (Java-filen din). 44 Universitetet i Oslo 221

23 snidil: java>mkdir myutilities 0HURPSDNNHU snidil: java>cd myutilities/ snidil: myutilities>copy ~in105/javapakker/myutilities/*.java. snidil: myutilities>ls -l -rw steing 1392 Feb 15 14:16 Dates.java -rw steing 626 Feb 15 14:16 FileMan.java -rw steing 1800 Feb 15 14:16 List.java -rw steing 696 Feb 15 14:16 Sort.java -rw steing 95 Feb 15 14:16 Sortable.java snidil: myutilities> NDWDORJHQ P\XWLOLWLHV Filen Dates.java package myutilities; Filen FileMan.java package myutilities; Filen Sortable.java package myutilities; class Dates { class FileMan { open ( ). interface Sortable { 45 package myutilities; import javagently.*; public class FileMan { public FileMan () { ; public class Text {..... public static BufferedReader open (String filename) throws FileNotFoundException { return new BufferedReader (new FileReader (filename));.... public static BufferedReader open ( ) throws IOException { BufferedReader in = Text.open(System.in); String filename = ""; for (int count = 0; count < 5; count ++) { try { filename = Text.readString(in); return Text.open(filename); catch (FileNotFoundException e) { System.out.println(filename+" does not exist."); if (count < 4) System.out.println("Try again"); // slutt på for-løkka throw new FileNotFoundException (); I Java-biblioteket: om class FileReader Konstruktør: public FileReader(String filename) throws FileNotFoundException 46 Universitetet i Oslo 231

24 import javagently.*; import myutilities.*; public class Olympics2 { public static void main(string[] args) throws IOException { System.out.println("** Olympic medals **"); System.out.println(); try { System.out.print("What file for the + medals statistics?"); BufferedReader fin = FileMan.open(); String country; int gold, silver, bronze, total, all = 0; System.out.println("\nCountry\t + \tgold\tsilver\tbronze\ttotal"); try { while (true) { country = Text.readString(fin); gold = Text.readInt(fin); silver = Text.readInt(fin); bronze = Text.readInt(fin); total = gold + silver + bronze; System.out.print(country); if (country.length() < 8) System.out.print("\t"); System.out.println("\t"+gold+"\t"+silver+ "\t"+bronze+ "\t"+total); all += total; // slutt while (true) // slutt innerste try catch (EOFException e) { System.out.println(all+" medals won."); // slutt innerste catch // slutt ytterste try catch (FileNotFoundException e) { System.out.println ("Check the file name + and run the program again."); // slutt ytterste catch // slutt main // slutt klasse 47 While-løkker ZKLOHEHWLQJHOVH ^VHWQLQJHU ` *MHQWDVHWQLQJHUVnOHQJHEHWLQJHOVHHUVDQQ JM UHVHOOHUIOHUHJDQJHUHNV while ( i > 0 ) ^L 7H[WUHDG,QWLQQ 6\VWHPRXWSULQWOQ³,QQWDVWHW L ` Universitetet i Oslo 241

25 Do-while-løkker GR ^VHWQLQJHU; `ZKLOH EHWLQJHOVH *M UVHWQLQJHU WHVWVnRPEHWLQJHOVHHUVDQQKYLVVDQQJMHQWDVHWQLQJHU JMHQWDKHOWWLOEHWLQJHOVHHUXVDQQ VHWQLQJHUJM UHVHOOHUIOHUHJDQJHUHNV int i = 1 do ^6\VWHPRXWSULQWOQ³HUSRWHQVHU L L L `while ( i < );V 49 Switch brukes til å velge mellom et lite antall muligheter (ikke bare to muligheter som med if-testen) kan teste på heltall og verdien av et tegn (character) Har setninger for de ulike case ene + at ingen av dem slår til (default) 50 Universitetet i Oslo 251

26 Switch VZLWFKLQWHOOHUFKDUUHJQHXWWU\NN^ FDVHYHUGL 6HWQLQJHU EUHDN FDVHYHUGL 6HWQLQJHU EUHDN FDVHYHUGL N 6HWQLQJHU N EUHDN GHIDXOW6HWQLQJHU G ` 51 import javagently.*; // class Text public class Switch Test på tegn (store og små) { public static void main ( String [ ] args) throws IOException { BufferedReader inn = Text.open(System.in); char svar; System.out.print("Gi tegn (j/n): "); svar = Text.readChar(inn); switch (svar) { case j : case J : System.out.println("Du svarte JA"); break; case n : case N : System.out.println("Du svarte NEI") ; break; default: System.out.println("Du svarte FEIL") ; break; // end Switch 52 Universitetet i Oslo 261

27 Oppgave - 10 minutter Lag metoden beomordre som leser nye ordre til bilregisteret og kaller de riktige metodene (- list alle biler, - sett inn ny bil, - avslutt) 53 Kap 6.2 Flere-dimensjonale tabeller, matriser Vi kan lage tabeller av tabeller, og dermed få to-dimensjonale tabeller, som figuren. double [ ] [ ] minmatrise; minmatrise = new double [5] [4]; navn: minmatrise type: double [ ] [ ] Vi kan nå omtale hver enkelt variabel, for eksempel minmatrise [3] [2] Legg merke til at den første indeksen går nedover (på denne figuren), den andre indeksen går bortover. I mange tilfeller lønner det seg å variere den som går bortover (den siste, den som følger samme endimensjonale tabell) fortest. Dette er fordi variablene i en endimensjonal tabell ligger tett inntil hverandre. 54 Universitetet i Oslo 271

28 Mangedimensjonale tabeller Vi kan også lage tabeller av tabeller av tabeller, og så videre i så mange dimensjoner vi vil: char [ ] linje; linje = new char [80]; linje[39] er det 39. tegnet på linjen char [ ] [ ] side; side = new char [60] [80]; side[13] [39] er det 39. tegnet på den 13. linjen char [ ] [ ] [ ] bok; bok = new char [250] [60] [80]; bok[222] [13] [39] er det 39. tegnet på den 13. linjen på den 222. siden char [ ] [ ] [ ] [ ] bokhylle; bokhylle = new char [400] [250] [60] [80]; bokhylle [380] [222] [13] [39] er det 39. tegnet på den 13. linjen på den 222. siden i den 380. boken char [ ] [ ] [ ] [ ] [ ] bibliotek; bibliotek = new char [20] [400] [250] [60] [80]; bibliotek [17 ] [380] [222] [13] [39] er det 39. tegnet på den 13. linjen på den 222. siden i den 380. boken i den 17. bokhyllen mjollnir: >java TestBok java.lang.outofmemoryerror at TestBok.main(Compiled Code) mjollnir: > mjollnir: >java TestBok java.lang.arrayindexoutofboundsexception: 38 at TestBok.main(Compiled Code) mjollnir: > 55 import minutilities.*; import javagently.*; class Explore { public static void main(string[] args) throws IOException { System.out.println("******* Savanna Exploration Inc. *****"); System.out.print("Where is the gold map? "); BufferedReader fin; try { fin = FileMan.open(); catch (FileNotFoundException e) { fin = Text.open("gold.dat"); System.out.println("Using my own test map gold.dat"); System.out.println("We shall find gold!\n"); Gold mine = new Gold(8,8); mine.readin(fin); mine.assess(); mine.print(); / / slutt main // slutt Explore mine Datastruktur for 8 x 8 felt readin assess print 56 Universitetet i Oslo 281

29 import javagently.*; public class Gold { static int rowmax, colmax; class Gold rowmax colmax Konstruktør: Gold (int r, int c) char [ ] [ ] map; double [ ] [ ] data; static final char blank = ; static final char cover = * ; public Gold(int r, int c) { rowmax = r; colmax = c; data = new double[rowmax][colmax]; map = new char[rowmax][colmax]; data map readin assess print 57 public void readin(bufferedreader in) throws IOException { for (int i = 0; i < rowmax; i++) for (int j = 0; j < colmax; j++) data[i][j] = Text.readDouble(in); public void assess( ) { double point, average; for (int i = 0; i < rowmax; i++) for (int j = 0; j < colmax; j++) map[i][j] = blank; for (int i = 1; i < rowmax-1; i++) for (int j = 1; j < colmax-1; j++) { point = data[i][j]; average = (data[i-1][j] + data[i+1][j] + data[i][j-1] + data[i][j+1]) / 4; if (point > average) map[i][j] = cover; // slutt assess class Gold forts. og en datafil Universitetet i Oslo 291

30 public void print() { System.out.println("Map of possible boundaries of the gold reef"); System.out.println("==============================="); System.out.println(); System.out.print(" "); for (int j = 0; j < colmax; j++) System.out.print(j + " "); System.out.println(); for (int i = 0; i < rowmax; i++) { System.out.print(i + " "); for (int j = 0; j < colmax; j++) System.out.print(map[i][j]+" "); System.out.println(); System.out.println("Good luck prospecting!"); // slutt print // slutt class Gold class Gold forts. og en kjøring mjollnir: >java Explore ******* Savanna Exploration Inc. ***** Where is the gold map? gold.dat We shall find gold! Map of possible boundaries of the gold reef =============================== * * 2 * * * * 3 * * 4 * * * * 5 * * 6 7 Good luck prospecting! mjollnir: > Om å lagre og finne igjen objekter Mengder av objekter (side 185 Envelopes er helt feilplassert her) 60 Universitetet i Oslo 301

31 Repetisjon: Mange objekter 0 Anta at class Person finnes: Person [ ] persontabell; persontabell = new Person [30]; navn: persontabell type: Person [ ] for (int ind=0; ind <= 29; ind++) persontabell[ind] = new Person( ); persontabell Tabell (array) av student-objekter tabell name marks John Botha i ind name marks Mary Brown funnet s null null null name Jean Barkhuizen marks En Vector kan også brukes null null 62 Universitetet i Oslo 31

32 class Student (lett modifisert fra side 187) import javagently.*; class Student { et objekt av klassen Students name marks Mary Brown static final int nmarks = 6; static final int [ ] weights = { 5, 10, 5, 15, 15, 50 ; String name; int [ ] marks = new int[nmarks]; void setmarks(bufferedreader in) throws IOException { for (int i = 0; i < nmarks; i++) marks[i] = Text.readInt(in); // slutt setmarks void setname(bufferedreader in) throws IOException { name = Text.readString(in) + +Text.readString(in); // slutt setname int calculatefinal () { int finalmark = 0; for (int i = 0; i < nmarks; i++) finalmark += marks[i] * weights[i]; finalmark = finalmark/100; return(finalmark); // slutt calculatefinal // slutt class Student 63 class Student nmarks 6 weights et objekt av klassen Student name marks Mary Brown setmarks setname calclulatefinal 64 Universitetet i Oslo 321

33 import java.util.*; import javagently.*; class MarkerA { public static void main(string[] args) throws IOException { BufferedReader fin = Text.open("marks.dat"); BufferedReader in = Text.open(System.in); Student [ ] table = new Student [20]; Student student; for (int i = 0; i < 10; i++) { student = new Student(); student.setname(fin); student.setmarks(fin); table[i] = student; System.out.println("In the table"); for (int i = 0; table[i]!= null; i++) { student = table[i]; System.out.println(student.name); while (true) { try { System.out.print("Whose mark would + you like to know? "); String s = Text.readString(in)+ + Text.readString(in); int ind = 0; boolean funnet = false; while (! funnet & table[ind]!= null) if ( s.equals( table[ind].name )) { System.out.println(table[ind]. calculatefinal()); funnet = true; else ind ++; if (!funnet) System.out.println("Sorry, try again"); catch (EOFException exp) { break; // slutt while (true) // slutt main // slutt MarkerA 65 Mengder av objekter Vi har sett at en tabell (array) med pekere, for eksempel til student-objekter, kan brukes til å lagre (og finne igjen) slike objekter. Men vi ønsker oss noe bedre. Vi ønsker oss en mengde : sett inn et objekt ta ut et objekt Datastruktur som tar vare på alle lagrede objekter: finn et objekt rams opp alle objektene Vi trenger en måte å identifisere objekter på. Til hvert objekt som skal lagres lager vi en nøkkel, en tekst, som er unik for dette objektet. 66 Universitetet i Oslo 331

34 Mer om å lagre og gjenfinne objekter I Javas ferdiglagde bibliotek er det en klasse som tar seg av alt dette for oss. Denne klassen heter Hashtable. Når vi lagrer et objekt må vi samtidig oppgi en nøkkel (engelsk: key), som vanligvis er en tekst (String). Hvorfor navnet Hash-tabell? Svar: Når et objekt skal lagres regnes det ut et heltall ut fra nøkkel-teksten, og Hashtable lagrer objektet ( og nøkkelen) basert på dette heltallet. Den funksjonen som regner ut et tall fra en tekst kaller vi en hash-funksjon. (Kanskje er heltallet en indeks i en tabell (array), men dette er implementasjonsdetaljer som vi ikke behøver bry oss om (en av fordelene ved objektorientering)). Hvis vi ønsker å få listet opp alle objektene som vi har lagret, kan vi ikke bruke bare Hashtable. Da må vi i tillegg bruke Enumeration. Dette er ikke en klasse men en Interface. Foreløpig er ikke denne forskjellen viktig, men legg merke til at vi IKKE bare kan si QHZ <Interface-navn>. 67 Prinsippet bak en hash -tabell /DJUHRJV NHNULWHULXPQ NNHO (tekst) Mary Brown 'HWVRPODJUHV(student-objekter) Mary Brown Carol Steele Carol Steele 68 Universitetet i Oslo 341

35 Metodene i en hash-tabell hashtabell Hashtable hashtabell = new Hashtable( ); void put (Object nøkkel, Object obj) Object get (Object nøkkel) void remove (Object nøkkel) boolean containskey (Object nøkkel) boolean contains (Object obj) Men husk at datastrukturen er hemmelig 69 Prinsippet bak en enumeration (oppramsing) For å få fatt i alle objektene i en hashtabell i rekkefølge, lager vi en egen oppramsing av alle nøklene i hashtabellen. Så bruker vi metoden nextelement mange ganger for å få fatt i alle nøklene i rekkefølge. Vi lager en ny oppramsingsobjekt med: Enumeration opprams = hashtabell.keys ( ); (OHPHQWHQH (har f.eks. vært nøkler i en hash-tabell) Vi bruker et oppramsingsobjekt ca. slik: while (opprams.hasmoreelements( ) ) { s = opprams.nextelement( ); obj = hashtabell.get(s); opprams Mary Brown Object nextelement ( ) Carol Steele boolean hasmoreelements ( ) 70 Universitetet i Oslo 351

36 class Object Om class Object Datastrukturen i Hashtable vet ikke hva slags objekter som skal lagres, så alle pekere er deklarert som pekere til objekter av klassen Object, f.eks: Object peker; class Object er en klasse som alle andre klasser arver egenskapene til. Hvis vi deklarerer en peker til et object av class Object, kan denne pekeren peke på alle slags objekter: Object enpeker; enpeker = new Student(); navn: enpeker class Student type: peker til Object Mary Brown 71 Mer om class Object og klasse-konvertering Vi må konvertere (engelsk: casting) fra Object til Student for å få lov til å snakke om egenskapene til studentobjektet; class Object Object enpeker; Student studpeker: enpeker = new Student(); studpeker = (Student) enpeker; studpeker.name = Mary Brown ; class Student navn: enpeker type: peker til Object navn: studpeker type: peker til Student Mary Brown 72 Universitetet i Oslo 361

37 import ; class Marker { class Marker (modifisert fra side 188) (glem programmet på side 188) public static void main(string[] args) throws IOException { BufferedReader fin = Text.open("marks.dat"); BufferedReader in = Text.open(System.in); Hashtable table = new Hashtable( ); Student stud; String name; for (int i = 0; i < 10; i++) { stud = new Student(); stud.setname(fin); stud.setmarks(fin); table.put(stud.name, stud); // slutt for med innlesing av alle fra fil System.out.println("In the table"); Enumeration e = table.keys (); while ( e.hasmoreelements() ) { name = (String) e.nextelement(); stud = (Student) table.get(name); System.out.println(stud.name); // slutt for med utskrift av alle while (true) { try { System.out.print("Whose mark would + you like to know? "); String s = Text.readString(in)+" +Text.readString(in); if (table.containskey(s)) { stud = (Student) table.get(s); System.out.println(stud.calculateFinal()); else { System.out.println("Sorry, try again."); catch (EOFException exp) { break; // slutt while (true) med spørsmål om navn // slutt main // slutt class Marker 73 Oppgave - 20 minutter Lag det fullstendige bilregister-programmet 74 Universitetet i Oslo 371

38 class Bil { String regnummer, merke; double vekt; boolean lesfrafil (BufferedReader in) throws IOException{ try { regnummer = Text.readString(in); merke = Text.readString (in); vekt = Text.readDouble(in); return true; catch (EOFException e) {return (false); // slutt lesfrafil void skrivtilfil(printwriter out) throws IOException { out.println(regnummer); out.println(merke); out.println(vekt); void lesfratastatur(bufferedreader in) throws IOException { Text.prompt(" Registreringsnummer :"); regnummer = Text.readString(in); Text.prompt(" Bilmerke :"); merke = Text.readString (in); Text.prompt(" Vekt :"); vekt = Text.readDouble(in); // slutt lesfratastatur void skrivskjerm() { System.out.print(" Registreringsnummer: + regnummer ); System.out.print(" Bilmerke: " + merke); System.out.println(" Bilens vekt: " + vekt); // slutt class Bil 75 class BilData { Hashtable bilsamling = new Hashtable(); public void lesfrafil (BufferedReader fin) throws IOException { boolean flerebiler = true; while (flerebiler) { Bil nybil = new Bil(); flerebiler = nybil.lesfrafil(fin); if (flerebiler) bilsamling.put (nybil.regnummer, nybil); // slutt while // slutt lesfrafil public void skrivtilfil (PrintWriter out) throws IOException { Bil nestebil; Enumeration e = bilsamling.keys(); while (e.hasmoreelements()) { String name = (String)e.nextElement(); nestebil= (Bil) bilsamling.get(name); nestebil.skrivtilfil(out); // slutt skrivtilfil public void lagnybil (BufferedReader in) throws IOException { Bil nybil = new Bil(); nybil.lesfratastatur(in); bilsamling.put (nybil.regnummer, nybil); // slutt lagnybil public void listbiler(){ Bil nestebil; System.out.println(); System.out.println("Alle bilene i registeret:"); Enumeration e = bilsamling.keys(); while (e.hasmoreelements()) { String name = (String)e.nextElement(); nestebil= (Bil) bilsamling.get(name); nestebil.skrivskjerm(); System.out.println(); // slutt Bilreg 76 Universitetet i Oslo 381

39 class Bilreg { BilData bildatastruktur; public static void main(string[] args) throws IOException { new Bilreg(); // slutt main Bilreg ( ) throws IOException { bildatastruktur = new BilData(); BufferedReader in = Text.open(System.in); System.out.println("Bilregistrering"); Text.prompt ("Skal du lese biler fra fil: J eller N: "); char c = lesjaellernei(in); if (c == J ) lesfrafil( ); System.out.println("Data er lest fra fil"); System.out.println( ); System.out.println ("Registrering av nye biler kan foretas"); beomordre(in); skrivtilfil(in); System.out.println ("Registreringsprogram avsluttes"); System.out.println(); // slutt Bilreg konstruktør public void beomordre (BufferedReader in) throws IOException { boolean slutt = false; while (!slutt) { System.out.println ("Ett av tre alternativer: "); System.out.println (" B: Vil du registrere flere biler?"); System.out.println (" L: Vil du liste alle registrert biler?"); System.out.println (" S: Vil du savslutte programmet? "); Text.prompt ("Oppgi valg (B, L eller S):"); char s = lesbls(in); if (s == S ) slutt = true; else if (s == B ) bildatastruktur.lagnybil(in); else bildatastruktur.listbiler(); // slutt while // slutt beomnyeordre 77 public void lesfrafil () throws IOException { System.out.print ("På hvilken fil er bilene: "); BufferedReader fin; try { fin = FileMan.open(); catch (FileNotFoundException e) { System.out.println ("Fant ingen bil-fil"); throw new IOException(); bildatastruktur.lesfrafil(fin); fin.close ( ); // slutt lesfrafil public void skrivtilfil (BufferedReader in) throws IOException { System.out.println(); Text.prompt ("På hvilken fil skal vi skrive bilene: "); String s = Text.readString(in); PrintWriter out = Text.create (s); bildatastruktur.skrivtilfil(out); out.close ( ); System.out.println(); System.out.println("Data er skrevet til fil"); System.out.println(); // slutt skrivtilfil 78 Universitetet i Oslo 391

40 private static char lesbls(bufferedreader in) throws IOException{ char c = Text.readChar(in) ; while (!(c == b c == l c == s c == B c == L c == S )) { Text.prompt("Svar bare B, L eller S: "); c = Text.readChar(in) ; if (c == b c == B ) return B ; else if (c == l c == L ) return L ; else return S ; private static char lesjaellernei(bufferedreader in) throws IOException{ char c = Text.readChar(in) ; while (!(c == n c == N c == j c == J )) { Text.prompt("Svar bare J eller N: "); c = Text.readChar(in) ; if (c == j c == J ) return J ; else return N ; // slutt lesjaellernei 79 Kap 7: Tekster (class String), tekstbehandling og litt annet Vi kaller det tekster, strenger og tekststrenger om hverandre String navn; navn = Stein Gjessing Den fulle og hele sannhet er noe omtrent slik: navn String Men vanligvis tegner og tenker vi ikke mer komplisert enn slik: navn Objekt av klassen String Stein Gjessing Objekt av klassen String 11 konstruktører 47 metoder pluss plass til å lagre en streng Stein Gjessing 80 Universitetet i Oslo 401

41 Tekst-streng-konstanter. Det viktigste tekstobjektet (String-objektet) er det som skrives mellom doble gåseøyne, for eksempel slik: Dette er en streng Når vi deklarerer: String navn får vi en peker som ikke peker på noe: navn null Så kan vi sette den til å peke på et konstant-tekst-objekt, slik: navn= Dette er en tekststreng navn Dette er en tekststreng Men husk: Alle streng-objekter er konstante, dvs. de kan ikke forandres. 81 Konstruktører i klassen String Vi kan lage en streng: - fra en annen streng, - fra en array med tegn - fra en StringBuffer (og etter at de er laget, kan de altså ikke forandres) class String String ( ); String ( String strengpeker); String (char[] tegntabellpeker); String (char[] tegntabellpeker, int forskyvning, int antall); String ( StringBuffer bufferpeker); 82 Universitetet i Oslo 41

42 Objekt-metoder i klassen String Objekt-metodene i klassen String observerer teksten som er lagret. Det er ikke lov å forandre teksten (Da må du bruke TekstBuffer) objekt av class String Skjult datastruktur som lagrer teksten: Dette er en tekststreng char charat (int indeks); Tegnet på plass indeks i teksten int compareto (String s); Sammenligner s med teksten, returnerer -1, 0 eller 1 boolean equals (String s); Returnerer true bare hvis de to strengende er like int indexof (String s, int fra); Leter etter strengen s fom. plassen fra, og returnerer med den funnede indeks (eller -1); int length ( ); Gir lengden av teksten String substring (int start, int slutt); Gir subteksten fom. start til (ikke med) slutt String trim (); char[ ] tochararray (); Gir en tekst der blanke i begge ender er fjernet Lager en tegn-tabell av teksten 83 Klasse-metoder i klassen String Klassen String er også en verktøykasse som inneholder en del metoder for å manipulere og lage strenger: class String String valueof( int i); Denne metoden lager en strengrepresentasjon av heltallet i. String valueof( double d); Denne metoden lager en strengrepresentasjon av det reelle tallet d. String valueof( char [] data); Denne metoden lager en strengrepresentasjon av tegn-tabellen data. String valueof( char [] data, int start, int antall); Denne metoden lager en strengrepresentasjon av tegn-tabellen data fom. indeks start og antall tegn. 84 Universitetet i Oslo 421

43 import javagently.*; Eksempel på tekst-behandling class Spaces2 { public static void main (String args []) throws IOException { System.out.println( Program som konverterer"); System.out.println( doble blanke til enkle."); System.out.print( Skriv tekst, slutt ); System.out.print( med CTR-D"); BufferedReader fin = Text.open(System.in); String s; int spaceat, startingfrom; s = fin.readline(); while (s!= null) { startingfrom = 0; spaceat = s.indexof(" ",startingfrom); while (spaceat!= -1) { s = s.substring(0,spaceat+1) + s.substring(spaceat+2,s.length()); startingfrom = spaceat + 1; spaceat = s.indexof(" ",startingfrom); // slutt while (lete på en linje) System.out.println(s); s = fin.readline(); // slutt while (det tastes flere tall) // slutt main // slutt Spaces2 s s s Dette er en tekststreng med en del doble blanke i Dette er en tekststreng med en del doble blanke i Dette er en tekststreng med en del doble blanke i 85 Klassen StringBuffer Tekstene i objekter av klassen StringBuffer kan forandres. Vi kan lage et StringBuffer-objekt fra et String-objekt. Vi merker oss en konstruktør i klassen StringBuffer: class StringBuffer StringBuffer ( String tekst); Denne konstruktøren lager et StringBufferobjekt som inneholder den samme teksten som parameteren. 86 Universitetet i Oslo 431

44 Objekter av klassen StringBuffer Tekstene i objekter av klassen StringBuffer kan forandres. Vi kan forandre et tegn på en gitt plass, skyte inn en tekst, reversere rekkefølgen på alle tegnene i strengen, lage et String-objekt, med mer. Objekt av klassen StringBuffer Skjult datastruktur som lagrer teksten: Dette er en tekststreng void setcharat ( int indeks, char tegn); Putter tegnet tegn ned på plassen indeks i teksten. Det tegnet som stod der fra før blir skrevet over. void insert ( int indeks, String s); Kiler strengen s ned på plassen indeks i teksten. Tekstens lengde økes tilsvarende. String tostring ( ); Gjør teksten om til et objekt av klassen String. StringBuffer reverse ( ); Reverserer teksten i objektet og returnerer en peker til det samme objektet. 87 Klassen StringTokenizer Objekter av denne klassen inneholder en tekst (for eksempel en linje), og bl.a. en metode nexttoken som henter ut neste token (tekstbiter) fra teksten. class StringTokenizer StringTokenizer ( String tekst); Denne konstruktøren lager et StringTokenizerobjekt som inneholder den samme teksten som parameteren. Skilletegnene mellom symbolsekvensene er standard (blank, komma, ) StringTokenizer ( String tekst, String skilletegn); Denne konstruktøren lager et StringTokenizer-objekt som inneholder den samme teksten som den første parameteren. Skilletegnene mellom symbolsekvensene er angitt av den andre parameteren. 88 Universitetet i Oslo 441

IN-OO1-EVU Dag 3. Stein Gjessing. Kapittel 4: I/O, if og unntak (exceptions) Kapittel 5: While, switch, mer I/O Kapittel 6: Mengder av objekter

IN-OO1-EVU Dag 3. Stein Gjessing. Kapittel 4: I/O, if og unntak (exceptions) Kapittel 5: While, switch, mer I/O Kapittel 6: Mengder av objekter IN-OO1-EVU Dag 3 Stein Gjessing Litt repetisjon Kapittel 4: I/O, if og unntak (exceptions) Kapittel 5: While, switch, mer I/O Kapittel 6: Mengder av objekter Kapittel 7: Tekster Materiale også lånt av

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

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

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

Oversikt. Array indeks utenfor sine grenser. Feil i programmet hva skjer?

Oversikt. Array indeks utenfor sine grenser. Feil i programmet hva skjer? Inf1010 Våren 2007 Tirsdagene 6. mars (bare 1. time) og 10. april 2007 Feilsituasjoner og unntak i Java (og litt ekte Java I/O) Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Oversikt

Detaljer

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo INF1010 Våren 2015 Feilsituasjoner og unntak i Java (Engelsk: Exception) Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Jeg prøvde å bestille billett med Air France:

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

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

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

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Inf1010 Våren 2009 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Oversikt Hva er en feil (er det ikke mulig å unngå feil?) Hva skjer når et program feiler

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

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

Å 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

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

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java Oversikt Inf1010 Våren 2009 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Hva er en feil (er det ikke mulig å unngå feil?) Hva skjer når et program feiler

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

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

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Inf1010 Våren 2008 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Oversikt Hva er en feil (er det ikke mulig å unngå feil?) Hva skjer når et program feiler

Detaljer

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012 INF1000 - Uke 10 Ukesoppgaver 10 24. oktober 2012 Vanlige ukesoppgaver De første 4 oppgavene (Oppgave 1-4) handler om HashMap og bør absolutt gjøres før du starter på Oblig 4. Deretter er det en del repetisjonsoppgaver

Detaljer

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

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java Oversikt Inf1010 Våren 2008 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Hva er en feil (er det ikke mulig å unngå feil?) Hva skjer når et program feiler

Detaljer

Repetisjon. INF1000 - gruppe 13

Repetisjon. INF1000 - gruppe 13 Repetisjon INF1000 - gruppe 13 Lese fra fil Scanner import java.util.*; void lesfrafil() { try { Scanner innfil = new Scanner(new File( fugleobservasjoner.txt )); while (innfil.hasnext()) { String linje

Detaljer

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

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Inf1010 Våren 2010 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Jeg prøvde å bestille billett med Air France:

Detaljer

INF1000 Behandling av tekster

INF1000 Behandling av tekster INF1000 Behandling av tekster Marit Nybakken marnybak@ifi.uio.no 23. februar 2004 Tekster Vi kommer nesten aldri utenom å bruke tekststrenger i programmene våre, ikke minst fordi det nesten alltid skal

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

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

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.

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

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

IN1010 våren januar. Objektorientering i Java

IN1010 våren januar. Objektorientering i Java IN1010 våren 2018 23. januar Objektorientering i Java Om enhetstesting Om arrayer og noen klasser som kan ta vare på objekter Stein Gjessing Hva er objektorientert programmering? F.eks: En sort boks som

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

INF1010 våren 2016. Arv og subklasser - del 2

INF1010 våren 2016. Arv og subklasser - del 2 INF1010 våren 2016 Onsdag 10. februar Arv og subklasser - del 2 pluss litt om feil og unntak hvis tid Stein Gjessing Institutt for informatikk Dagens tema Virtuelle metoder som er det samme som Polymorfi

Detaljer

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

Uke 5, 27. januar Arv og subklasser del I. Stein Gjessing Institutt for informatikk 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

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

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

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

INF1010 våren 2010 Torsdag 4. februar. Arv og subklasser del I. Emneoversikt subklasser (2 uker) Hva er en subklasse? Eksempel: Universitetsregister

INF1010 våren 2010 Torsdag 4. februar. Arv og subklasser del I. Emneoversikt subklasser (2 uker) Hva er en subklasse? Eksempel: Universitetsregister INF1010 våren 2010 Torsdag 4. februar Arv og subklasser del I Stein Gjessing Institutt for informatikk 1 Emneoversikt subklasser (2 uker) Generalisering - spesialisering Gjenbruk av klasser Ved sammensetning

Detaljer

INF1010 våren januar. Objektorientering i Java

INF1010 våren januar. Objektorientering i Java INF1010 våren 2017 25. januar Objektorientering i Java Om enhetstesting (Repetisjon av INF1000 og lær deg Java for INF1001 og INF1100) Stein Gjessing Hva er objektorientert programmering? F.eks: En sort

Detaljer

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK INF1000: Forelesning 6 Klasser og objekter del 1 OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK Motivasjon Anta at vi ønsker å lage et studentregister hvor vi for hver student lagrer, bruker og telefonnummer Med

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

INF1000: Forelesning 7

INF1000: Forelesning 7 INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Repetisjon forts. Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en

Detaljer

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004 Oppgave 1 Prøveeksamen i INF1000 Ole Christian og Arne 23. november 2004 Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI int i; int k = i; int i, j = 4; int k = j; double[] x = new

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

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

INF1000: Forelesning 7. Konstruktører Static

INF1000: Forelesning 7. Konstruktører Static INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en bestemt type. Objekter

Detaljer

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004 Prøveeksamen i INF1000 Ole Christian og Arne 23. november 2004 Oppgave 1 Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI int i; int k = i; int i, j = 4; int k = j; double[] x = new

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Onsdag 4. juni 2014 Tid for eksamen: 9:00-15:00 Oppgavesettet er på

Detaljer

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

INF1000 (Uke 4) Mer om forgreninger, While-løkker INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen I dag Repetisjon easyio Enkle if-setninger

Detaljer

INF1000: Forelesning 6. Klasser og objekter del 1

INF1000: Forelesning 6. Klasser og objekter del 1 INF1000: Forelesning 6 Klasser og objekter del 1 OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK 2 Motivasjon Anta at vi ønsker å lage et studentregister hvor vi for hver student lagrer navn, brukernavn og telefonnummer.

Detaljer

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI Oppgave 1 INF1000 Uke 13 Gjennomgang av prøveeksamen fra høsten 2004 Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI int i; int k = i; int i, j = 4; int k = j; double[] x = new double[1];

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Eksamen i : Eksamensdag : Torsdag 2. desember 2004 Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler

Detaljer

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

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal. I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Repetisjon easyio Enkle if-setninger Mer om forgrening While-løkker Are Magnus

Detaljer

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 dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Repetisjon easyio Enkle if-setninger Mer om forgrening While-løkker Are Magnus

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

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster Oversikt INF1000 Uke 6 Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster Litt om objekter, filer med easyio, tekst Arne Maus 1 2 Objekter, pekere og null Vi lager pekere og objekter

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

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

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

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag til oppgave 7, 8, og 9 mangler Klasser og objekter (kap. 8.1-8.14 i "Rett på Java" 3. utg.) NB! Legg merke til at disse

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

INF1000 : Forelesning 4

INF1000 : Forelesning 4 INF1000 : Forelesning 4 Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet

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

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

INF1000 (Uke 5) Mer om løkker, arrayer og metoder INF1000 (Uke 5) Mer om løkker, arrayer og metoder Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset Praktisk informasjon Når disse

Detaljer

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

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 Repetisjon: nesting av løkker Kort repetisjon av doble (nestede) løkker Mer om D-arrayer Introduksjon til D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk

Detaljer

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Gaustadbekkdalen, januar 22 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår i primærlageret når

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

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

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

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

Videregående programmering 6

Videregående programmering 6 Videregående programmering 6 1. Feilkontroll i klasser uten unntaksobjekter Klasser skal lages sikre. Argumentverdier skal kontrolleres, og eventuelle feil skal rapporteres til klienten. I praksis har

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

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

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller. Dagens forelesning Java 13 Design av større programmer : fordeling av roller INF 101-13. mars 2003 Flere eksempler på bruk av objekter MVC-prinsippet MVC-prinsippet Flere eksempler på programmer med objekter

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

Jentetreff INF1000 Debugging i Java

Jentetreff INF1000 Debugging i Java Jentetreff INF1000 Debugging i Java Ingrid Grønlie Guren ingridgg@student.matnat.uio.no 11. november 2013 Kort om feilmeldinger i Java Java har to ulike type feilmeldinger som man kan få når man skriver

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO FASIT UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen :

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

Forelesning inf Java 5

Forelesning inf Java 5 Ole Chr. Lingjærde 1 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen til et Java-program

Detaljer

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012 INF1000 - Uke 10 Løsningsforslag ukesoppgaver 10 24. oktober 2012 Løsningsforlag Oppgave 1 Array vs. HashMap a) Følgende program viser et enkelt banksystem med en array kontoer[], og metoder for å finne

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

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

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006 Husk å melde deg på prøveeksamen i INF1000! INF1000: Forelesning 11 Ole Christian Lingjærde 7.november 2006 Frist påmelding: 16. november Arrangementet er torsdag 23. november kl 1420 og omfatter: Oppgaven

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet er på

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

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

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER .9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,

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

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

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

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder INF1000 : Forelesning 4 Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet

Detaljer

Forelesning inf Java 4

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

Detaljer

Seminaroppgaver IN1010, uke 2

Seminaroppgaver IN1010, uke 2 Seminaroppgaver IN1010, uke 2 1.a: Skriv en klasse HeiVerden.java. Klassen skal inneholde en main- metode (se på notatet fra tidligere). Inne i main -metoden skal programmet først la brukeren oppgi en

Detaljer

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser Emneoversikt subklasser INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser Stein Gjessing Institutt for informatikk Mange flere eksempler på fellesøvelsene og neste forelesning 1 Generalisering - spesialisering

Detaljer

Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011)

Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011) Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011) HashMap, innstikksortering, javadoc (kap. 9.1-9.11, m.m. i "Rett på Java" 3. utg.) NB! Legg merke til at disse er løsningsforslag. Løsningene

Detaljer

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten. Oppgave 1: RPJ, kapittel 4, oppg. 2 INF1000 Plenumsgruppe 1, 22.09.02 Hvis en person har inntekt < 10 000, så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første 10 000 og 30% på

Detaljer

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten. Oppgave 1: RPJ, kapittel 4, oppg. 2 INF1000 Plenumsgruppe 1, 22.09.02 Hvis en person har inntekt < 10 000, så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første 10 000 og 30% på

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

"Nelsons kaffebutikk"

Nelsons kaffebutikk "Nelsons kaffebutikk" et eksempel på systemutvikling med objekter Originale lysark av Jens Kaasbøll - mindre endringer av G. Skagestein og Knut Hegna IN105-javaNelson-1 Nelsons kaffebutikk Området som

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

Introduksjon til objektorientert programmering

Introduksjon til objektorientert programmering Introduksjon til objektorientert programmering Samt litt mer om strenger og variable INF1000, uke6 Ragnhild Kobro Runde Grunnkurs i objektorientert programmering Strategi: Splitt og hersk Metoder kan brukes

Detaljer

INF1010 våren Arv og subklasser del I

INF1010 våren Arv og subklasser del I INF1010 våren 2010 Torsdag 4. februar Arv og subklasser del I Stein Gjessing Institutt for informatikk 1 Emneoversikt subklasser (2 uker) 2 Hva er en subklasse? En klasse, K, beskriver objekter med visse

Detaljer

Gjennomgang av eksamen H99

Gjennomgang av eksamen H99 Gjennomgang av eksamen H99 Administrasjon av kurser, studenter og påmeldinger Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for Informatikk Universitetet i Oslo Oppgave 1 (15 %) (Besvares

Detaljer

(MVC - Model, View, Control)

(MVC - Model, View, Control) INF1010 - våren 2008 Modell - Utsyn - Kontroll (MVC - Model, View, Control) Stein Gjessing Inst. for informatikk Et bankprogram Vi skal lage et program som håndterer kontoene i en bank. En konto eies av

Detaljer

Enkle generiske klasser i Java

Enkle generiske klasser i Java Enkle generiske klasser i Java Oslo, 7/1-13 Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Del 1: Enkle pekere Før vi tar fatt på det som er nytt i dette notatet, skal vi repetere litt

Detaljer