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

Save this PDF as:
 WORD  PNG  TXT  JPG

Størrelse: px
Begynne med side:

Download "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"

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 Kapittel 7: Tekster Materiale også lånt av Arne Maus og Jens Kaasbøll Stein Gjessing, Universitetet i Oslo 1

2 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 ++; Stein Gjessing, Universitetet i Oslo 2

3 class Skog main class Tree totalenquiries 0 Skog-objekt gran furu noofenquiries 0 enquiry() noofenquiries bjerk 0 noofenquiries ++; totalenquiries ++; Skog < Her gjør vi det som før ble gjort i main > noofenquiries 0 enquiry() noofenquiries ++; totalenquiries ++; enquiry() noofenquiries ++; totalenquiries ++; Stein Gjessing, Universitetet i Oslo 3

4 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)? Stein Gjessing, Universitetet i Oslo 4

5 Innkapsling (og abstraksjon) Information hiding (jfr databaser) public void lesfrafil (BufferedReader in) public void skrivtilfil (PrintWriter out) Den første prototypen kan inneholde en meget enkel eller ingen datastruktur public Bil finnbil (String bilnummer) public void lagrebil (Bil bilen) Datastrukturen kan stadig forenkles/ forbedres/ optimaliseres BilData-objekt Stein Gjessing, Universitetet i Oslo 5

6 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 Stein Gjessing, Universitetet i Oslo 6

7 Hvordan finne klassene Kandidater til klasser: Håndfaste ting, andre (del)systemer Mennesker, roller Substantiver generelt Organisasjoner Hendelser, transaksjoner Steder Stein Gjessing, Universitetet i Oslo 7

8 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 Stein Gjessing, Universitetet i Oslo 8

9 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. Stein Gjessing, Universitetet i Oslo 9

10 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; Stein Gjessing, Universitetet i Oslo 10

11 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 ( ); Stein Gjessing, Universitetet i Oslo 11

12 Kapittel 4 Stein Gjessing Data inn fra tastaturet import java.io.*;. BufferedReader mininn = new BufferedReader (new InputStreamReader (System.in)); Hovedklasse main mininn BufferedReader En metode som leser fra tastaturet må ha besvergelsen throws IOException foran seg (etter overskriften). F.eks.: 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 Stein Gjessing, Universitetet i Oslo 12

13 import java.io.*; class Greetings // side 97 { public static void main (String [] args) throws IOException { BufferedReader mininn = new BufferedReader (new InputStreamReader(System.in)); Greetings main mininn navn BufferedReader String readline() System.out.println("What is your name?"); String navn = mininn.readline ( ); System.out.println("Bonjour " + navn + ); 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 Stein Gjessing, Universitetet i Oslo 13

14 Om å lese tall import java.io.*; BufferedReader main mininn BufferedReader mininn = new BufferedReader (new InputStreamreader (System.in)); // Bruk: 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( ) Stein Gjessing, Universitetet i Oslo 14

15 En enkel måte å lese tall på i Java uten Bishops Text-klasse import java.io.*; 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) int parseint ( ) 137 Et objekt av klassen String Stein Gjessing, Universitetet i Oslo 15

16 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: Text BufferedReader open (...) double readdouble (...) BufferedReader mininn = Text.open(System.in); String streng; streng = Text.readString (mininn); int readint (...) char readchar (...) Mange av egenskapene til klassen Text står på side 98: 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. Stein Gjessing, Universitetet i Oslo 16

17 import java.io.*; import javagently.text; Text BufferedReader open (...) String readstring (...) Greetings main mininn navn BufferedReader class Sum { public static void main (String [] args) throws IOException { 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 Stein Gjessing, Universitetet i Oslo 17

18 Text BufferedReader open (...) main tastatur int readint (...) SumTast BufferedReader tel import java.io.*; import javagently.text; void prompt (...) sum nyttall class SumTast { 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> Stein Gjessing, Universitetet i Oslo 18

19 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 Stein Gjessing, Universitetet i Oslo 19

20 Innlesing fra fil: Først må vi lage en forbindelse med filen, det gjør vi med enten filinn BufferedReader BufferedReader filinn = new BufferedReader (new FileReader ( minfil.txt )); Dette objektet leser fra filen minfil.txt eller: 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 dtall tekst = Text.readString(filInn); Et objekt av klassen String Stein Gjessing, Universitetet i Oslo 20

21 Innlesing fra fil import java.io.*; import javagently.text; Text SumFil BufferedReader open (...) main filinn int readint (...) tall class SumFil { public static void main (String [] args) throws IOException { int resultat = 0, tall; resultat BufferedReader Dette objektet leser fra filen minfil.txt BufferedReader filinn = Text.open( 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) Stein Gjessing, Universitetet i Oslo 21

22 import java.io.*; import javagently.text; Text BufferedReader open (...) int readint (...) class SumFil2 { public static void main (String [] args) throws IOException { int resultat = 0, tall, antall; Greetings2 main filinn 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 Stein Gjessing, Universitetet i Oslo 22

23 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 Her lagres alle bildataene beomnyeordre kall lesfrafil, lagnybil mm. lesfrafil. kall lesfrafil i datastrukt.. lesfrafil Les alle biler fra fil skrivtilfil skrivtilfil. kall skrivtilfil i datastrukt.. lagnybil. kall lagnybil i datastrukt.. Skriv alle biler til fil lagnybil Lag en ny bil Stein Gjessing, Universitetet i Oslo 23

24 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 Les data om meg fra fil ZKLOH (mer på filen) {Lag et bilobjekt Kall lesfrafil i dette objektet Legg objektet på plass i mengden av alle biler lesfrafil lesfrafil Les data om meg fra fil Stein Gjessing, Universitetet i Oslo 24

25 Utskrift til fil PrintWriter filutstrom = new PrintWriter (new FileWriter ( minutfil.txt )); Greetings2 main filut PrintWriter eller: PrintWriter filut = Text.create( minutfil.txt ); void println() // Utskrift skjer som til skjerm: filut.println( utskrift + 17 ): Dette objektet skriverpå filen minutfil.txt For at innholdet på den nye filen skal bevares må vi til slutt si: minutfil.txt filut.close( ); dtall Se eksempel side 105 i Bishop. Stein Gjessing, Universitetet i Oslo 25

26 import java.io.*; 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\ ); minutfil.txt Navn: Per Petersen Adresse: Solhellinga 123 Poststed: 4990 Søndeled Stein Gjessing, Universitetet i Oslo 26 filut Dette objektet skriver på filen minutfil.txt

27 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 if ( ORJLVNXWWU\NN) VHWQLQJ eller: if ( ORJLVNXWWU\NN) { VHWQLQJHU I disse tilfellene utføres enten VHWQLQJHU eller ingenting. Stein Gjessing, Universitetet i Oslo 27

28 Fem løsrevne eksempler: tel nytall int tel, sum = 0; double gjennomsnitt; int nyttall, boolean fortsett = true; int highest, number; int tall, possum = 0, negsum = 0; navn: fortsett type: boolean if (tel > 0) gjennomsnitt = sum / tel; else gjennomsnitt = 0; 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 110. Stein Gjessing, Universitetet i Oslo 28

29 Program som finner gjennomsnittet av tall som brukeren skriver på tastaturet import java.io.*; import javagently.*; Text SumTast BufferedReader open (...) main tastatur String readint (...) void prompt (...) tel sum BufferedReader class SumTast nyttall public static void main (String [] args) throws IOException { 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 Stein Gjessing, Universitetet i Oslo 29

30 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 java.io.*; import javagently.*; snidil: >javac SumTast2.java class SumTast2 { snidil: >java SumTast2 Tast inn noen tall, avslutt med 0: public static void main (String [] args) throws IOException { BufferedReader tastatur = Text.open(System.in); Du skrev 5 tall. int nyttall, sum = 0; double gjennomsnitt; Gjennomsnitt av disse tallene er: int tel; boolean fortsett = true; snidil: > 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 Stein Gjessing, Universitetet i Oslo 30

31 import java.io.*; 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: > Stein Gjessing, Universitetet i Oslo 31

32 import java.io.*; // side 108, meget lett modifisert. Sammenlign! import javagently.*; 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 number Ø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 Stein Gjessing, Universitetet i Oslo 32

33 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 skrivtilfil Skriv data om meg selv på fil ZKLOH (flere biler) { Hent neste objekt Kall skrivtilfil i dette objektet skrivtilfil Skriv data om meg selv på fil Stein Gjessing, Universitetet i Oslo 33

34 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: > Stein Gjessing, Universitetet i Oslo 34

35 Eksempel fra Judy Bishops Text-klasse: package javagently; Integer import java.io.*; 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( );... Stein Gjessing, Universitetet i Oslo 35

36 Skisse av unntaksbehandling A try { B A kaller B B oppdager en feil: throw new Untaksklasse ( ) ; 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 Figur 4.6 eventuelle unntak > Normal retur fra B til A Untaksklasse er en forhåndsdeklarert subklasse av klassen Exception. Stein Gjessing, Universitetet i Oslo 36

37 import java.io.*; 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."); Stein Gjessing, Universitetet i Oslo 37

38 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. Stein Gjessing, Universitetet i Oslo 38

39 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 Stein Gjessing, Universitetet i Oslo 39

40 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 Stein Gjessing, Universitetet i Oslo 40

41 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; Stein Gjessing, Universitetet i Oslo 41

42 Feil - divisjon med 0 import java.io.*; 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(); )HLOLXWWU\NNE\]HUR MDYDODQJ$ULWKPHWLF([FHSWLRQE\]HUR DW7U\7HVWPDLQ&RPSLOHG&RGH 'HWJLNN2.LM 'HWJLNN2.LM 'HWJLNN2.LM 'HWJLNN2.LM Stein Gjessing, Universitetet i Oslo 42

43 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. Stein Gjessing, Universitetet i Oslo 43

44 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). Stein Gjessing, Universitetet i Oslo 44

45 0HURPSDNNHU snidil: java>mkdir myutilities 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 { interface Sortable { open ( ). Stein Gjessing, Universitetet i Oslo 45

46 package myutilities; import java.io.*; 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 = ""; I Java-biblioteket: 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 om class FileReader Konstruktør: public FileReader(String filename) throws FileNotFoundException throw new FileNotFoundException (); Stein Gjessing, Universitetet i Oslo 46

47 import java.io.*; 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 Stein Gjessing, Universitetet i Oslo 47

48 While-løkker ZKLOHEHWLQJHOVH ^VHWQLQJHU ` *MHQWDVHWQLQJHUVnOHQJHEHWLQJHOVHHUVDQQ JM UHVHOOHUIOHUHJDQJHUHNV while ( i > 0 ) ^L 7H[WUHDG,QWLQQ 6\VWHPRXWSULQWOQ³,QQWDVWHW L `

49 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 Stein Gjessing, Universitetet i Oslo 49

50 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) Stein Gjessing, Universitetet i Oslo 50

51 Switch VZLWFKLQWHOOHUFKDUUHJQHXWWU\NN^ FDVHYHUGL 6HWQLQJHU EUHDN FDVHYHUGL 6HWQLQJHU EUHDN FDVHYHUGL N 6HWQLQJHU N EUHDN GHIDXOW6HWQLQJHU G ` Stein Gjessing, Universitetet i Oslo 51

52 import java.io.*; import javagently.*; // class Text Test på tegn (store og små) public class Switch { 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); // end Switch 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; Stein Gjessing, Universitetet i Oslo 52

53 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) Stein Gjessing, Universitetet i Oslo 53

54 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. Stein Gjessing, Universitetet i Oslo 54

55 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: > Stein Gjessing, Universitetet i Oslo 55

56 import java.io.*; 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 Stein Gjessing, Universitetet i Oslo 56

57 class Gold import java.io.*; import javagently.*; rowmax colmax public class Gold { static int rowmax, colmax; Konstruktør: Gold (int r, int c) char [ ] [ ] map; double [ ] [ ] data; static final char blank = ; static final char cover = * ; data public Gold(int r, int c) { rowmax = r; colmax = c; data = new double[rowmax][colmax]; map = new char[rowmax][colmax]; map readin assess print Stein Gjessing, Universitetet i Oslo 57

58 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 Stein Gjessing, Universitetet i Oslo 58

59 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: > Stein Gjessing, Universitetet i Oslo 59

60 6.4 Om å lagre og finne igjen objekter Mengder av objekter (side 185 Envelopes er helt feilplassert her) Stein Gjessing, Universitetet i Oslo 60

61 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 Stein Gjessing, Universitetet i Oslo 61

62 Tabell (array) av student-objekter name John Botha tabell marks i name Mary Brown ind marks funnet s null null null name Jean Barkhuizen marks En Vector kan også brukes null null Stein Gjessing, Universitetet i Oslo 62

63 class Student (lett modifisert fra side 187) import java.io.*; 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 Stein Gjessing, Universitetet i Oslo 63

64 class Student nmarks 6 weights et objekt av klassen Student name marks Mary Brown setmarks setname calclulatefinal Stein Gjessing, Universitetet i Oslo 64

65 import java.io.*; 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 Stein Gjessing, Universitetet i Oslo 65

66 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. Stein Gjessing, Universitetet i Oslo 66

67 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>. Stein Gjessing, Universitetet i Oslo 67

68 Prinsippet bak en hash -tabell /DJUHRJV NHNULWHULXPQ NNHO (tekst) 'HWVRPODJUHV(student-objekter) Mary Brown Mary Brown Carol Steele Carol Steele Stein Gjessing, Universitetet i Oslo 68

69 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 Stein Gjessing, Universitetet i Oslo 69

70 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 ( ) Stein Gjessing, Universitetet i Oslo 70

71 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(); class Object navn: enpeker class Student type: peker til Object Mary Brown Stein Gjessing, Universitetet i Oslo 71

72 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 ; navn: enpeker navn: studpeker type: peker til Object type: peker til Student class Student Mary Brown Stein Gjessing, Universitetet i Oslo 72

73 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 Stein Gjessing, Universitetet i Oslo 73

74 Oppgave - 20 minutter Lag det fullstendige bilregister-programmet Stein Gjessing, Universitetet i Oslo 74

75 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 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 skrivtilfil(printwriter out) throws IOException { out.println(regnummer); out.println(merke); out.println(vekt); void skrivskjerm() { System.out.print(" Registreringsnummer: + regnummer ); System.out.print(" Bilmerke: " + merke); System.out.println(" Bilens vekt: " + vekt); // slutt class Bil Stein Gjessing, Universitetet i Oslo 75

76 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 Stein Gjessing, Universitetet i Oslo 76

77 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 Stein Gjessing, Universitetet i Oslo 77

78 public void lesfrafil () throws IOException { public void skrivtilfil (BufferedReader in) 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 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 Stein Gjessing, Universitetet i Oslo 78

79 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 Stein Gjessing, Universitetet i Oslo 79

80 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 Stein Gjessing, Universitetet i Oslo 80

81 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. Stein Gjessing, Universitetet i Oslo 81

82 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); Stein Gjessing, Universitetet i Oslo 82

83 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 (); Gir en tekst der blanke i begge ender er fjernet char[ ] tochararray (); Lager en tegn-tabell av teksten Stein Gjessing, Universitetet i Oslo 83

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

Stein Gjessing 11. nov IN-OO1-EVU Dag 3. Stein Gjessing 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

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

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

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

Å 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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. 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 : 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

INF2100. Oppgaver 26. september til 1. oktober 2007

INF2100. Oppgaver 26. september til 1. oktober 2007 INF2100 Oppgaver 26. september til 1. oktober 2007 1 Språket Denne uken skal vi implementere en utvidelse av språket fra forrige ukes oppgave. Syntaksen er vist i figur 1 på neste side og betydning er

Detaljer

Innlesning fra tastatur med easyio. INF1000 høst 2010. Vi må først skrive i toppen av programmet: import easyio.*;

Innlesning fra tastatur med easyio. INF1000 høst 2010. Vi må først skrive i toppen av programmet: import easyio.*; Innlesning fra tastatur med easyio INF1000 høst 2010 Forelesning 2: Innlesning fra terminal Boolean-variable if-setninger Løkker Litt mer om heltall: divisjon og modulo Vi må først skrive i toppen av programmet:

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

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

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

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

"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

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

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

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

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

EKSAMEN I INF244: OBJEKTORIENTERT PROGRAMVAREUTVIKLING I BACHELORSTUDIET I IT OG INFORMASJONSSYSTEMER BACHELORSTUDIET I IT OG ENTREPRENØRSKAP

EKSAMEN I INF244: OBJEKTORIENTERT PROGRAMVAREUTVIKLING I BACHELORSTUDIET I IT OG INFORMASJONSSYSTEMER BACHELORSTUDIET I IT OG ENTREPRENØRSKAP Høgskolen i Buskerud Avdeling for økonomi og samfunnsvitenskap 3502 Hønefoss EKSAMEN I INF244: OBJEKTORIENTERT PROGRAMVAREUTVIKLING I BACHELORSTUDIET I IT OG INFORMASJONSSYSTEMER BACHELORSTUDIET I IT OG

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

INF1000 oppgaver til uke 38 (17 sep 23 sep)

INF1000 oppgaver til uke 38 (17 sep 23 sep) INF1000 oppgaver til uke 38 (17 sep 23 sep) Formål: Øve på programmering med forgreninger, løkker og arrayer. Teoritimer (plenumsøvinger): 1. Oppgave 4 og 6 i kapittel 4 i læreboka. 2. En blokk er en samling

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

INF1000 : Forelesning 3

INF1000 : Forelesning 3 INF1000 : Forelesning 3 Programeksempler Løkker Arrayer Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet i Oslo 1 Body Mass Index (BMI) Vi skal lage et program

Detaljer

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator Litt mer om uttrykk: ++ og -- INF : Forelesning Løkker og arrayer Mye og viktig stoff. Du MÅ løse oppgaver selv for å lære!. september 6 Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for

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

23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert. Grunnkurs i objektorientert programmering Introduksjon til objektorientert programmering INF1000 Høst 2015 Siri Moe Jensen INF1000 - Høst 2015 uke 5 1 Siri Moe Jensen INF1000 - Høst 2015 uke 5 2 Kristen

Detaljer

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger I dag INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Litt repetisjon Mer om uttrykk Lesing og skriving til terminal Forgreninger

Detaljer