Grunnkurs i objektorientert programmering Hjelpehefte for studenter som tar INF101,

Størrelse: px
Begynne med side:

Download "Grunnkurs i objektorientert programmering Hjelpehefte for studenter som tar INF101,"

Transkript

1 Grunnkurs i objektorientert programmering Hjelpehefte for studenter som tar INF101, Institutt for informatikk, Universitetet i Oslo Oslo, 15. august 2001

2 2

3 Innhold Forord... 5 Kapittel 1 - Hva er programmering?... 7 Å kommunisere med en datamaskin... 8 Programmeringsspråk... 9 Mer informasjon... 9 Kapittel 2 - Mitt første javaprogram Kompilering og kjøring Kommentarer Formatering Kapittel 3 - Variabler og tilordninger Hva er en variabel? Deklarasjoner og tilordninger Variabeltyper Mer om identifikatorer Kapittel 4 - Kontrollsetninger Booleske uttrykk If-setninger While-setninger For-setninger do while-setninger Switch-setninger Kapittel 5 - Objekter og klasser Objekter Klasser Referanser (pekere) Klasse/objekt-diagrammer Bruk av static Kapittel 6 - Innlesing fra tastatur Hvordan lese fra tastatur Inn-klassen Kapittel 7 - Metoder Hvordan bruke metoder Hvorfor bruke metoder Enkle metoder Kapittel 8 - Arrayer og hashtabeller Hva er en array? Hvordan lage en array Hvordan bruker vi en array Hvordan gå gjennom en array Et eksempel En spesiell array Arrayer med referanser Todimensjonal array Hva er en hashtabell? Hvordan bruke en hashtabell Hvordan gå gjennom alle elementer i en hashtabell (Iterator) Et stort eksempel

4 Valg mellom bruk av array eller hashtabell Kapittel 9 Klasse/objekt-diagrammer Kapittel 10 - Filbehandling Inn- og Ut-klassene Skrive til fil Formatering av tall for utskrift Lese fra fil Teste om slutten av filen er nådd Om filstruktur Array og filer Hashtabell og filer Kapittel 11 - Unntak (exceptions) Sende unntaket videre Fange unntaket Mer enn ett unntak Exceptions kompilatoren oppdager Exceptions under kjøring Inn- og Ut-klassen Kapittel 12 - Mer om metoder Hva er parametre? Returverdier Eksempel på bruk av metoder Konstruktører Om public og private Kapittel 13 - Subklasser Hva er subklasser? Hvordan lage subklasser Referanser og typekonvertering Alle klasser er subklasser Hvorfor bruke subklasser Eksempel på bruk av subklasser Hvordan tegne subklasser Feil å unngå Subklasser og filer Hva slags objekt har vi (instanceof) Kapittel 14 - Tekststrenger Hva er strenger? Hvordan bruke strenger Hvordan tegne strenger Operasjoner på strenger Et eksempel Kapittel 15 - Bruk av Java-pakker og dokumentasjon Hva er en pakke og import Bruk av dokumentasjonen Hvordan få tak i klassene Inn og Ut, og classpath Hvordan få tak i klassene Inn og Ut, og classpath Appendix A: Klassen Inn Appendix B: Klassen Ut

5 Forord Velkommen til INF101 - grunnkurset i objektorientert programmering ved Institutt for Informatikk ved Universitetet i Oslo. I løpet av kurset skal du lære om programmering, og det programmeringsspråket vi kommer til å benytte oss av heter Java. Hensikten med dette heftet er å gi en kortfattet innføring i endel sentrale begreper i kurset, samt å vise gjennom en rekke eksempler hvordan man kan gjøre ting i Java. Heftet kan forhåpentlig også fungere som et oppslagsverk for endel av de viktigste elementene i Java som undervises i kurset. Heftet er imidlertid ikke ment å være noen fullstendig lærebok, og dekker ikke alle sider av pensum. Det programmeringsspråket vi benytter i kurset - Java kan brukes på alle datamaskinene vi benytter her ved instituttet og kan dessuten installeres på enhver PC (Java 1.3 ligger på Ifi-CD'en som deles ut til alle fjernundervisningsstudentene og som øvrige INF101-studenter kan få på forespørsel; du kan også hente Java 1.3 over nettet fra De første versjonene av dette hjelpeheftet ble skrevet av Anders Brunland og Steinar Eliassen som et hjelpemiddel i et tidligere kurs i objektorientert programmering. Det er siden foretatt en omfattende restrukturering og revidering av teksten og nye avsnitt er føyet til. Ferdig blir vi aldri, og kommentarer mottas med takk. Kommentarer kan sendes til epostadressen: inf101@ifi.uio.no. August, 2001 Knut Hegna, Arne Maus, Ole Christian Lingjærde 5

6 6

7 Kapittel 1 - Hva er programmering? INF101 er et kurs i objektorientert programmering. Et program er et instruksjonssett (en oppskrift) som forteller en datamaskin hva den skal gjøre. Å programmere vil si å lage slike instruksjonssett for å få datamaskinen til å løse oppgaver for oss. Å programmere er noe de fleste av oss gjør fra tid til annen nesten uten å tenke over det, f.eks. når man programmerer en videospiller til å ta opp et bestemt tv-program neste dag, eller når man programmerer en vekkerklokke til å ringe en bestemt tid neste morgen. Noen har sikkert også programmert en kalkulator ved å få kalkulatoren til å huske en hel sekvens av tastetrykk, slik at man senere kan få utført alle tastetrykkene bare ved å trykke på en enkelt knapp. De programmene du skal lære å lage i INF101 skiller seg fra disse eksemplene ved at de ikke skal utføres av f.eks. en videospiller eller en vekkerklokke - de skal istedet utføres av en PC eller liknende (f.eks. en arbeidsstasjon, slik de fleste av maskinene på Institutt for Informatikk er). En PC eller en arbeidsstasjon består typisk av fire komponenter: en skjerm, selve maskinen (en boks som står under eller ved siden av skjermen), et tastatur og et redskap for å peke på skjermen (en "mus"). Ofte refererer vi til alle komponentene under ett som en datamaskin eller (av historiske årsaker) en terminal. Den siste betegnelsen skyldes at datamaskiner veldig ofte er knyttet sammen i store nettverk (dette gjelder også datamaskinene ved Institutt for Informatikk), og da danner hver enkelt datamaskin et endepunkt eller et terminalpunkt i dette nettverket. Personen som bruker datamaskinen kalles ofte brukeren. Det er lett å forstå hvorfor man skal programmere en videospiller (for å ta opp et program) eller en vekkerklokke (for å bli vekket). Men hva kan vi få en datamaskin til å gjøre for oss (det er jo f.eks. ikke særlig praktisk å bruke en datamaskin som vekkerklokke)? Noen eksempler på bruk er å programmere datamaskinen slik at den kan brukes som en avansert skrivemaskin (tekstbehandlingsprogram) som en avansert kalkulator (regnearkprogram) til å surfe på internett (nettleserprogram = web browser) for å holde orden på flyavganger og passasjerer (til bruk for et flyselskap) for å holde orden på kinoforestillinger og solgte/reserverte billetter for å holde orden på vareutvalg, varebeholdning og priser i en butikk for å beregne været imorgen (til bruk for meteorologer) 7

8 I løpet av kurset skal du lære nok om programmering til at du kan gå løs på mange av problemene i listen ovenfor (men mange av problemene forutsetter at du også kan mye annet - f.eks. må du kunne endel om meteorologi for å være i stand til å lage et program som beregner været imorgen med noenlunde presisjon og pålitelighet). Men i virkeligheten vil et godt program for å beregne været imorgen eller for å surfe på internett være mye større enn det vi har mulighet til å rekke i løpet av kurset, og derfor kommer vi i stor utstrekning til å se på problemer av enklere natur eller grove forenklinger av noen av problemene i listen ovenfor. Et eksempel på et veldig enkelt problem er å programmere datamaskinen slik at den skriver ut på skjermen følgende: "jeg er et javaprogram". Hvordan programmerer vi datamaskinen til å gjøre noe slikt (ønsker du svaret med en gang kan du gå til kapittel 2)? Vi kunne prøve å skrive setningen ovenfor på tastaturet og håpe det beste, men da oppdager vi fort at datamaskinen ikke forstår norsk (eller andre naturlige språk for den saks skyld). Vi er nødt til å formulere oss i et språk som datamaskinen behersker. Å kommunisere med en datamaskin For å kunne gjøre noe som helst nyttig med en datamaskin er vi nødt til å kommunisere med den, og en vanlig måte å gjøre dette på er å bruke tastaturet og musen når vi skal fortelle datamaskinen noe skjermen når datamaskinen skal fortelle oss noe I tillegg er det ofte mulig å kommunisere med en datamaskin via et nettverk, f.eks. via internett, men det ser vi bort fra her. Hvordan kommuniserer vi så med datamaskinen ved hjelp av tastaturet og musen? Hvilke ord og tastetrykk forstår datamaskinen? Faktisk er det ikke noe entydig svar på det - det kommer helt an på hvilket program som kjører på datamaskinen, for: Når vi kommuniserer med datamaskinen så skjer det alltid via et program som kjører på datamaskinen, og det er dette programmet som bestemmer hvilke tastetrykk og musebevegelser som er meningsfylte og hvilken mening de skal ha. En datamaskin inneholder vanligvis mange (tusenvis av) forskjellige programmer, og vanligvis er det flere av disse som kjører samtidig. Et program som alltid kjører når datamaskinen er på, er det såkalte operativsystemet. På de fleste maskinene ved Institutt for Informatikk heter dette operativsystem-programmet Unix, mens de fleste hjemme-pc'er har et av operativsystemprogrammene Windows (f.eks. Win98) eller Linux. Operativsystemet utfører en rekke oppgaver, og en av de er å gjøre datamaskinen istand til å kommunisere med en bruker via tastatur, mus og skjerm. Enten du sitter ved en av instituttets maskiner eller din egen PC, er operativsystemet typisk det første du kommer i kontakt med når du har logget inn (eller for hjemme-pc: slått på maskinen). Noen av tingene du kan fortelle operativsystemet ved å bruke tastatur eller mus er å: starte å kjøre et annet program (kanskje et dataspill, eller et program du har laget selv) skrive ut noe på en skriver ("printer") vise fram noe på skjermen logge ut (eller for hjemme-pc: slå av maskinen) Hvis vi ønsker mer avansert kommunikasjon med datamaskinen enn dette (f.eks. fortelle datamaskinen nøyaktig hvordan den skal oppføre seg slik at den kan brukes av en kino til å holde orden på kinoforestillinger og solgte/reserverte billetter) så må vi kommunisere med datamaskinen ved hjelp av et programmeringsspråk. 8

9 Programmeringsspråk Et programmeringsspråk er et språk som kan brukes til å gi datamaskinen detaljerte instruksjoner om hvordan den skal oppføre seg, f.eks. hva den skal vise på skjermen, hva det skal bety når man trykker på bestemte taster, osv. Behersker du et programmeringsspråk kan du i praksis få datamaskinen til å gjøre hva som helst (innenfor rammen av hva datamaskiner kan få til, naturligvis). Programmeringsspråk skiller seg fra naturlige språk (som norsk, engelsk og spansk) ved at de har et veldig lite ordforråd (kanskje ord) og en veldig enkel og veldefinert grammatikk. Mens det i naturlige språk er mange ord for å uttrykke f.eks. følelser, har ordene i et programmeringsspråk kun én hensikt: å fortelle datamaskinen hva den skal gjøre. Det finnes mange programmeringsspråk; det som benyttes i INF101 heter Java og er utviklet av firmaet Sun Microsystems (som også har laget endel av de datamaskinene vi bruker på Institutt for Informatikk). Den versjonen av Java vi benytter nå heter Java 1.3. For å kunne benytte Java, må datamaskinen først installere en programpakke som kalles Java 2 SDK Standard Edition, v 1.3. Denne programpakken (som allerede er installert på maskinene på Institutt for Informatikk, og som kan installeres på PC'er fra Ifi-CD'en som du kan få gratis ved å henvende deg i institutt-ekspedisjonen i 2. etg i Informatikkbygningen) inneholder blant annet programmer som må brukes hver gang du har laget et Java-program og ønsker å kjøre (utføre) det på datamaskinen. Mer informasjon INF101 er i første rekke et kurs i programmering, og vi kommer ikke til å si mer enn nødvendig om hvordan en datamaskin ser ut inni. Dersom du har lyst å lære mer om det, anbefaler vi at du bruker en nettleser (f.eks. netscape eller internet explorer) og går inn på Universitetets Senter for Informasjonsteknologi (USIT) sine informasjonssider om PC'er. Der finner du masse nyttig informasjon om datamaskiner, operativsystemer, internett, osv. Prøv f.eks. adressene 9

10 10

11 Kapittel 2 - Mitt første javaprogram Nedenfor ser du et av de aller enkleste programmer som det er mulig å lage i Java. Vi skal her forklare noen aspekter ved dette programmet, men ikke alle (resten kommer senere i kurset). class MittProgram { public static void main (String[] argv) { System.out.println("Jeg er et javaprogram"); Når programmet blir kjørt, vil teksten «Jeg er et javaprogram» komme fram på skjermen. Dette programmet kan virke ubegripelig når man nettopp har begynt å lære programmering, men man trenger ikke forstå alle detaljene nå i starten. La oss ta for oss det viktigste. Vi ser først på rammen rundt programmet: class MittProgram {... Dette kalles en klassedeklarasjon (hele programmet er altså en klassedeklarasjon i dette tilfellet). Legg merke til at det brukes krøllparenteser her som viser begynnelsen og slutten på programmet. Hva class betyr, kommer vi tilbake til senere i heftet - foreløpig kan du bare tenke på det som en innpakning av programinstruksjonene, hvor innpakningen i dette tilfellet heter MittProgram. Hele programmet omtales derfor noen ganger som «klassen MittProgram». Navnet er valgfritt, men det kan være greit å følge disse normene: Ikke bruk de særnorske bokstavene («æ, ø, å») i klassenavn. Bruk av disse kan skape problemer når programmet skal kjøres, selv om programmet blir kompilert uten problemer. Bruk gjerne tall, men du kan ikke starte navnet med et tall. Begynn programnavnet med stor bokstav. Dersom navnet består av flere ord, skiller du mellom ordene ved å starte hvert ord med en stor bokstav slik som i «MittProgram». Du kan ikke ha mellomrom i programnavnet. Programmet skal lagres i en fil som heter det samme som programnavnet, og ha «.java» bak seg. Det betyr at programmet vårt skal lagres i en fil med navn «MittProgram.java». Det er viktig å få med seg de store og små bokstavene også i filnavnet. La oss se videre på programmet. Inne i klassen MittProgram ligger public static void main( String[] argv ) { System.out.println("Jeg er et javaprogram"); Ved å skrive public static void main(string[] argv) 11

12 lager vi startpunktet for javaprogrammet 1. Dette er også en deklarasjon (og er samtidig - som påpekt ovenfor - en del av deklarasjonen av hele klassen). Når vi starter et javaprogram, vil utføringen av programmet begynne her. Hva programmet skal gjøre, skrives mellom krøllparentesene { og. System.out.println("Jeg er et javaprogram"); fører til at setningen «Jeg er et javaprogram» skrives ut til skjerm. Denne type setninger kalles for handlingssetninger eller bare setninger. Setninger utføres i den rekkefølgen de står dvs. ovenfra og nedover. System.out.println er en standard javametode som brukes for å skrive tekst på skjermen. Inne i parentesen finner vi teksten som skal skrives ut på skjerm. Selve teksten står i anførselstegn. I Java avsluttes alle programsetninger med semikolon ( ; ). Det gjøres for at kompilatoren (et oversetterprogram, se nedenfor) skal kunne finne hvor en programsetning slutter og den neste begynner. Byggesteinene i et javaprogram er deklarasjoner og setninger. Ved å sette sammen ulike typer deklarasjoner og setninger kan vi få programmet til å gjøre (nesten) hva det skal være. I det første programeksemplet vårt var det to deklarasjoner (class MittProgram og public static void main(string[]argv) ) og én handlingssetning (System.out.println("Jeg er et javaprogram"); ). Foreløpig må du slå deg til ro med de to deklarasjonene. De må være med. I det neste kapitlet skal vi se på andre typer deklarasjoner og lære flere handlingssetninger. Kompilering og kjøring Før programmet kan kjøres, slik at vi kan se resultatet på skjermen, må det oversettes til et språk som er mer maskinnært. I programspråket Javas tilfelle, til et språk som kan forstås av den kunstige maskinen som kjører java-programmer (Java Virtual Machine, JVM). Denne oversettingen kalles kompilering, og oversetterprogrammet kalles kompilatoren. Kompilering av javaprogrammet over gjøres med kommandoen javac, slik: > javac MittProgram.java Kommandoen gis til unix, dos eller på annen måte, avhengig av programmerings-omgivelsene. Går kompileringen bra, vil du få en ny fil i filkatalogen : MittProgram.class. Denne filen er klar til å bli kjørt av JVM. Dette gjøres ved kommandoen java : > java MittProgram Legg merke til at man her ikke tar med filens etternavn (.class). En fullstendig sesjon med kompilering og kjøring vil da se slik ut: > javac MittProgram.java > java MittProgram Jeg er et javaprogram > Kommentarer Når vi kompilerer et javaprogram, vil kompilatoren prøve å oversette det vi har skrevet til kode som datamaskinen kan utføre, men ofte vil vi legge inn kommentarer i programkoden som kompilatoren ikke tar hensyn til. Disse kommentarene står der for at koden skal bli enklere å forstå for dem som leser den. Tekst som skrives mellom «/*» og «*/», og tekst som skrives på en linje etter «//» vil ikke bli kompilert, den blir oversett av kompilatoren. public static void main(string[] argv) { 1 argv er et navn du finner på selv, men det er vanlig å bruke enten argv eller args 12

13 // Skriv ut en tekst på skjermen. System.out.println("Jeg er et javaprogram"); /* * System.out.println("Denne teksten blir ikke skrevet ut * når programmet kjøres."); */ Formatering Kompilatoren bryr seg stort sett ikke om linjeskift og mellomrom. Det er derfor lovlig å skrive programeksemplet vårt slik: class MittProgram {public static void main(string[] argv) { System.out.println( "Jeg er et javaprogram"); Det er imidlertid vanlig å bruke innrykk og linjeskift for å gjøre koden oversiktlig. Emacs gir deg god hjelp til dette. Hvis du trykker tab-tasten vil linjen automatisk få «riktig» innrykk. Har du f.eks. glemt semikolon på slutten av en linje, vil du med en gang se det pga. innrykkene. Firmaet Sun har utarbeidet en standard for hvordan et javaprogram bør se ut 2. Noen steder i dette kompendiet avviker vi fra denne standarden. Som oftest er det av plasshensyn. Vi anbefaler på det sterkeste at du benytter deg av denne standarden (eller en annen)

14 14

15 Kapittel 3 - Variabler og tilordninger For at et program skal kunne gjøre noe særlig fornuftig, trenger vi en måte å ta vare på forskjellige verdier. I første omgang skal vi se på verdier som enten er tall eller tekster. For å ta vare på en verdi, må vi ha et navn på verdien. I lærebøker kalles dette navnet for en identifikator. Dette navnet finner du på selv, men det er noen begrensninger på hva du kan kalle den. Disse begrensningene kommer vi tilbake til mot slutten av kapitlet. Hva er en variabel? Du kan tenke på identifikatoren eller navnet som en adresse til en bestemt lagerplass i maskinens minne. På denne lagerplassen kan vi legge en verdi som vi siden kan hente fram ved å oppgi adressen. Det som er spesielt, er at du på forhånd må si hva slags type verdier du har tenkt å legge på lagerplassen (tall, tekst, e.l.). 1. Den har et navn (identifikator) som du finner på selv. 2. Den har en type. 3. Den har en verdi som stemmer overens med typen. Verdien kan endres underveis i programmet (derav navnet variabel). Deklarasjoner og tilordninger Å deklarere en variabel vil si å sette av lagerplass i maskinens minne og gi denne lagerplassen et navn. Typen forteller maskinen hvor mye plass som skal settes av. int er en type som forteller at det skal settes av plass til et heltall. La oss ta et eksempel: class VariabelEksempel { public static void main(string[] args) { /*Først deklareres en variabel. Den er av typen * int. Vi kaller den for «lengde». */ int lengde; // Så gir vi variabelen «lengde» en verdi (et heltall) lengde = 3; /* Tilslutt skriver vi litt tekst og verdien i * variabelen «lengde» på skjermen. */ System.out.println("Verdien i variabelen lengde er " + lengde); Når vi skal lage en variabel, gjør vi det altså i to skritt: int lengde; Dette er deklarasjonen. Her sier vi hva navnet på variabelen skal være («lengde»), og hva slags type den er (int). lengde = 3; Dette er en tilordning. Vi gir variabelen en verdi (lagrer en verdi på lagerplassen). Tegnet for tilordning er altså =. Likhetstegnet betyr altså ikke det samme i Java som vi er vant til fra 15

16 matematikken. Det må her forstås og leses som "settes lik". Altså : verdien av variabelen lengde settes lik 3. Det er mulig å gjøre både deklarasjonen og en tilordning samtidig: int lengde = 3; Det er også mulig å gjøre flere deklarasjoner samtidig: eller int lengde, bredde; int lengde = 3, bredde; Når vi ønsker å skrive ut verdien av innholdet i en variabel, gjør vi det på samme måte som vi skriver ut tekst: System.out.println(lengde); For enkelhets skyld sier vi at vi «skriver ut (variabelen) lengde». For å skjøte tekst sammen med annen tekst eller variabler brukes + -operatoren. Når denne står i sammenheng med tekst, får den betydningen: «Slå sammen og lag en tekst.». Til nå har vi vist deg et eksempel der vi deklarerte en variabel og gjorde én tilordning, men det er mulig å gjøre flere tilordninger til samme variabel i løpet av programmet, dvs. at det legges en ny verdi på lagerplassen med den bestemte adressen (variabelnavnet). Den gamle verdien blir borte. class VariabelEksempel2 { public static void main(string[] args) { int lengde; lengde = 3; // tilordning nr. 1 System.out.println("Verdien i variabelen lengde er " + lengde); lengde = 7; // tilordning nr. 2 System.out.println("Nå er verdien " + lengde); lengde = lengde - 2; // tilordning nr. 3 System.out.println("Den siste verdien av lengde er " + lengde); Den andre tilordningen skulle være grei å forstå. Hvis du tenker tilbake på lagerplassen, så putter vi nå tallet 7 der. Den gamle verdien som lå der, blir borte. La oss nå se på den tredje tilordningen: lengde = lengde 2; Når denne utføres, regner maskinen først ut høyresiden lengde 2 Variabelen lengde har verdien 7 (fra forrige tilordning). Dermed regnes det ut hva 7 2 er. Neste skritt er tilordningen: lengde = Her legges resultatet av regnestykket på høyre side av = inn som ny verdi av variabelen på venstre side (som i dette tilfellet er lengde). Resultatet blir at verdien 5 tilordnes variabelen lengde. 16

17 Variabeltyper Som sagt må man bestemme hvilken type en variabel skal ha. Hittil har vi sett på heltall, men det finnes mange flere typer. Her kommer en liste over noen av de vanligste typene: int Eks: int i = 5; Brukes til å lagre etheltall (fra tom ). char Eks: char tegn = A ; Brukes til å lagre et enkelt tegn. double Eks: double pi = ; Brukes til å lagre et desimaltall (flytende tall). String Eks: String tekst = "To be or not to be"; Brukes til å lagre en tekst 3. Legg merke til den store S-en i String. boolean Eks: boolean ferdig = true; Brukes til å lagre en sannhetsverdi. Kan enten ha verdien sann (true) eller usann (false). Mer om identifikatorer Vi har sagt at du selv velger navn på variabler, og at disse navnene kalles identifikatorer. Selv om du velger navnet selv, er ikke alle navn tillatt. De viktigste begrensningene kommer her: variabelnavn kan ikke begynne med et tall variabelnavn kan ikke inneholde andre tegn enn bokstaver og tall 4 Det er også noen ord som har en spesiell betydning i Java, vi har allerede vært borti noen av dem (int, boolean, osv.). Disse ordene kan du heller ikke bruke som identifikatorer. Her kommer hele listen over de reserverte ordene: abstract default goto new synchronized boolean do if package this break double implements private throw byte else import protected throws case extends instanceof public transient catch false int return true char final interface short try class finally long static void const float native super volatile continue for null switch while Tabell 2.1: Reserverte ord i Java 3 Egentlig er ikke String en type i Java, men siden den er så vanlig og brukes så ofte, har vi tatt den med her likevel. 4 I tillegg kan man bruke enkelte spesialtegn. 17

18 Hva slags navn bør du velge Selv om vi nå har sagt at du står (nesten) fritt til å velge navn på variabler, er det likevel noen retningslinjer du bør merke deg. navn på variabler bør begynne med liten bokstav. navnet bør si noe om hva variabelen brukes til i programmet. Hvis variabelen bare brukes midlertidig, får den ofte et kort navn (f.eks. ni, x). dersom navnet består av flere ord, skiller du ordene ved bruk av stor bokstav på andre, tredje osv., ord slik som i «minvariabel». Dette er vanlig på engelsk som ikke har noen språklig tradisjon for å sette sammen ord. På norsk bør man ikke overdrive dette. Vi kan sette sammen ord helt naturlig: brannbil, ikke brannbil. navn på klasser skal alltid begynne med stor bokstav. 18

19 Kapittel 4 - Kontrollsetninger I dette kapitlet skal vi fortelle deg hvordan du kan kontrollere programflyten, f.eks. hvordan du kan hoppe over, eller gjenta, enkelte linjer i programmet. Før vi begynner å se på de enkelte kontrollsetningene må du kjenne til noe som heter booleske uttrykk 5. Booleske uttrykk Som du husker fra kapittelet om typer og variable finnes det en type som heter boolean. Det er en type som kan ha to verdier: sann eller usann (true eller false). Som du kanskje allerede har gjettet, likner booleske uttrykk svært på booleske typer. Et boolesk uttrykk er et utsagn ( en påstand eller en betingelse) som enten er sant eller usant (true eller false). For å finne ut om et gitt utsagn er sant eller usant, må det beregnes. Til denne type regning trenger vi noen operatorer: < og > «mindre» og «større enn» <= og >= «mindre eller lik» og «større eller lik» == «er lik»!= «er ulik» Legg merke til == - operatoren. I Java (og mange andre språk) har denne betydningen er lik. Grunnen til at det ikke brukes et enkelt likhetstegn, er at det betyr noe annet i Java (nemlig tilordning). La oss se på noen eksempler: int i, j; char c; i < 5 // i er mindre enn 5 c == B // c inneholder tegnet B j!= 5 // j er forskjellig fra 5; Felles for disse uttrykkene er at de enten er sanne eller usanne. Det er enten sant eller usant at i er mindre enn 5. Typen på høyre side av operatoren må stemme overens med typen på venstre. Det er ikke mulig å sammenlikne f.eks. en double med en int. Ofte vil det være behov for å teste flere betingelser. Det gjør man ved å slå sammen de enkelte betingelsene. Til dette har vi følgende operatorer 6 : && «OG» (på engelsk: «AND»). Hvis uttrykkene på høyre og venstre side av tegnet begge er sanne, blir verdien sann. Dvs uttrykket betingelse1 && betingelse2 er sant hvis både betingelse1 og betingelse2 er sanne. Hvis derimot minst én av dem er usann, får hele uttrykket ovenfor verdien usant. «ELLER» («OR») Hvis minst ett av uttrykkene på høyre og venstre side er sanne, blir verdien sann. Dvs uttrykket betingelse1 betingelse2 5 George Boole ( ), engelsk matematiker som grunnla utsagnsregning som matematisk disiplin. 6 Det finnes flere, men i dette kurset klarer du deg med disse. 19

20 er sant hvis minst en av betingelse1 og betingelse2 er sann. Hvis derimot begge betingelser er usanne, får hele uttrykket verdien usant. Så langt har vi vist deg operatorer som trenger to verdier for å virke en på høyre og venstre side. Tilslutt bør du kjenne til! -operatoren («not»). Den skiller seg fra de andre ved at den kun tar en verdi på høyre side. Resultatet er den motsatte verdien av verdien som beregnes. Altså:!true!false //gir verdien usann. //gir verdien sann. If-setninger En if-setning brukes til å utføre en eller flere setninger under gitte betingelser. Formen på setningen er som følger: if ( betingelse ){ Setninger som utføres hvis betingelsen er sann... ; Her er betingelse et boolesk uttrykk (en påstand), eller en boolesk variabel, som kan beregnes til sant eller usant. Slik bruker du if-setningen: class Hvis { public static void main(string[] args) { Inn stdin = new Inn ( ); // Innlesing fra tastatur int i = stdin.inint( ); // forklares nærmere i kap.5 if (i < 5 ) { // Skrives ut hvis i «er mindre enn» 5 System.out.println("Tallet er mindre enn 5"); System.out.println("Takk for nå."); Setningen «Tallet er mindre enn 5» skal bare skrives ut hvis det er sant. Det avgjøres av hvilken verdi brukeren oppgir til programmet. if else Ofte vil man ha behov for å gjøre én ting hvis betingelsen er sann og noe annet hvis den er usann. Til det brukes setningskonstruksjonen if else. Formen er som følger: if ( betingelse ){ gjør noe; else { gjør noe annet; Det vil også være situasjoner hvor man har behov for å gjøre en ny if-test hvis den foregående if-testen var usann. if ( betingelse1 ){ gjør ditt ; else if ( betingelse2 ){ gjør datt ; else if ( betingelse3 ){ 20

21 gjør dette... ; else if... Et eksempel class Hvis { public static void main(string[] args) { Inn stdin = new Inn ( ); int i = stdin.inint ( ); if (i < 5) { System.out.println("Tallet er mindre enn 5"); else if (i == 5) { System.out.println("Tallet er 5"); else { System.out.println("Tallet er større enn 5"); Dette programmet har følgende algoritme: 1. Hvis i er mindre enn fem så Skriv ut «Tallet er mindre enn 5» og hopp til nr Hvis i er lik 5 så Skriv ut «Tallet er 5» og hopp til nr Skriv ut «Tallet er større enn 5» 6. Ferdig med testen - fortsett videre i programmet. Resultatet er avhengig av hva brukeren oppgir. While-setninger Vi kan få maskinen til å repetere en handling så mange ganger vi vil. Ofte kan vi ikke vite hvor mange ganger vi ønsker å repetere en eller flere setninger. Derimot vet vi at den skal repeteres så lenge en betingelse er sann. Til dette brukes en while-løkke. En while-løkke har følgende form: while ( betingelse ){ setninger; betingelse setninger er et boolesk uttrykk eller en boolesk variabel som er true eller false. er den eller de setningene du ønsker utført så lenge betingelsen er sann. Det er viktig å oppdatere betingelsen inne i løkka. Hvis vi glemmer dette, vil betingelsen alltid være sann og programmet havner i en evig løkke. Hvis det skjer, må du avbryte programmet ved å trykke ctrl-c. Et eksempel på bruk av en while-løkke: class Kvadrattall { public static void main(string[] args) { int i = 1; int kvadrat = i * i; 21

22 while ( kvadrat < 1000 ){ System.out.println("Kvadratet av " + i + " er " + kvadrat ); i = i + 1; kvadrat = i * i; System.out.println("Takk for nå."); Dette programmet beregner alle kvadrattall under 1000, fra 1 og oppover. Vi vet i utgangspunktet ikke hvor hvor langt vi må gå med variablen i. Vi setter bare betingelsen at vi skal stoppe når kvadratet av i er blitt 1000 eller mer. For-setninger En for-løkke brukes når du ønsker å repetere en eller flere setninger et bestemt antall ganger. Formen på en for-løkke er: for ( startpunkt for teller ; betingelse; økning/minskning ){ setninger; La oss ta et eksempel som skriver ut kvadrattallene fra 1 tom 50 (jfr. eksemplet på while-løkke ovenfor): class Kvadrat { public static void main(string[] args) { for (int n=1; n<=50; n = n + 1) { int kvadrat = n * n; System.out.println("Kvadratet av " + n + " er " + kvadrat); For-setningen består av tre deler atskilt med ;. La oss ta dem en for en. int n = 1; Dette er initialiseringsdelen av for-løkken. Her deklarerer vi et heltall n og tilordner det verdien 1. n fungerer som teller i løkken. n <= 50; Denne delen kalles en betingelse. Den kan du lese som: «Hvis n er mindre eller lik 50 så...». n = n + 1 Denne delen utføres helt til slutt i løkken, og forteller at vi skal øke telleren med 1 for hvert gjennomløp. Hvis vi skulle si for-løkken med ord, ville vi altså få: 1) La en teller, kalt n, være lik 1 2) Hvis n er mindre eller lik 50 så 3) Beregn kvadratet av n og skriv ut verdien av kvadrat 4) Øk n med 1 5) Gå tilbake til punkt 2 22

23 Det er også mulig å øke telleren med mer enn 1 eller vi kan velge at den skal minke for hvert gjennomløp. Om vi, f.eks. ville beregne kvadratet av alle ulike tall (1, 3, 5,...), måtte vi skrive n=n+2 i for-setningen. do while-setninger Om vi vet at vi skal gjennomløpe en løkke minst én gang, kan vi velge å bruke do - while setningen. Formen på do - while løkken er: do { setninger ; while ( betingelse ); do - while løkken likner altså svært på en while-løkke. Forskjellen ligger i at innholdet i løkken utføres før betingelsen regnes ut og testes. Hvis betingelsen er sann, utføres løkken en gang til. Husk at betingelsen må oppdateres i do-delen ellers kan du få en evig løkke. Legg også merke til semikolonet på siste linje. Denne konstruksjonen brukes ofte i sammenheng med innlesing fra tastatur. Her er et eksempel: import inf101.*; class Repetisjon2 { public static void main(string[] args){ Inn stdin = new Inn( ); int n; do { System.out.println("Skriv inn heltall. "); System.out.println("Avslutt med et negativt tall."); n = stdin.inint( ); System.out.println("Du skrev: " + n); while (n >= 0); // end do while System.out.println("Takk for nå."); Switch-setninger Vi har tidligere sett på if og if-else setningen. Hvis vi for et gitt uttrykk har mange mulige handlinger, kan vi isteden bruke switch-setningen. Formen på switch-setningen er: switch ( uttrykk ){ case verdi1 : 1. setninger ; break; // valgfritt case verdi2 : 2. setninger; // break utelatt case...; default: setninger... ; break; Først beregnes verdien av uttrykket. Verdien som beregnes, må være av typen int eller char. case verdi: Så prøver programmet å «matche» verdien av uttrykket med en av verdiene etter case. Ved det tilfellet (case) hvor verdien av uttrykket stemmer, begynner programmet å utføre de setningene som følger. break; 23

24 Setningene utføres fram til programmet kommer til break.da er switch-setningen ferdig. Hvis et tilfelle (case) ikke avsluttes med en break vil setningene i de påfølgende tilfellene også bli utført fram til første break. Hvis break utelates bør du skrive en kommentar. default Hvis verdien av uttrykk ikke er listet opp som en av mulighetene, blir setningene etter default utført. Denne delen er valgfri, men bør i regelen være med. Et eksempel Switch-setningen er særlig anvendelig når brukeren av programmet taster inn et valg, og eksemplet under kan brukes som en mal for dette. import inf101.*; class Meny { public static void main(string[] args) { Inn stdin = new Inn( ); char valg; // brukers valg lagres her. do { System.out.print("Skriv inn en bokstav. Avslutt med x : "); valg = stdin.inchar( ); switch (Character.toLowerCase(valg)) { case a : System.out.println("Du skrev tegnet a "); System.out.println("Det er første bokstav i alfabetet."); break; case b : System.out.println("Du skrev tegnet b "); System.out.println("Det er andre bokstav i alfabetet."); break; case c : System.out.println("Du skrev tegnet c "); // ikke stopp her, men utfør neste setning også. default: System.out.println("Det kommer etter b i alfabetet."); break; // slutt switch while (valg!= x ); // slutt do while slutt main I eksemplet over er break utelatt i det siste tilfellet (case c ). Hvis brukeren av programmet taster inn c, vil altså følgende bli skrevet ut: Du skrev tegnet c Det kommer etter b i alfabetet. Det er svært fort gjort å få uventede resultater når man utelater break. Derfor anbefales det ikke. 24

25 Kapittel 5 - Objekter og klasser Ett av ordene som brukes, når man skal beskrive programmeringspråket Java, er objektorientert. I dette kapitlet skal vi se på hva som skjuler seg bak begrepet, og du vil få vite hva nøkkelordene class og static betyr. Objekter Vi har allerede vært inne på at en variabel kan tenkes på som en lagerplass - for eksempel kan en variabel av typen double tenkes på som en lagerplass for et desimaltall. Når vi lager store programmer er det ofte veldig mange variable (ofte tusenvis), og i mange tilfeller er det naturlig å tenke på hver variabel som tilhørende et objekt. Hvis vi f.eks. lager et program for universitetet som skal holde orden på opplysninger om alle studentene, så ønsker vi kanskje å lagre f.eks. navn, fødselsnummer og studentnummer for hver enkelt student (i tillegg til mange andre ting). Det kunne vi få til ved å bruke tre variable for hver student: String navn; int fnr; int studnr; Det er naturlig å gruppere sammen disse tre variablene siden de tilhører samme student. Vi kan tenke på hver student som et objekt med visse karakteristika, i vårt tilfelle begrenset til navn, fødselsnummer og studentnummer (virkelige studenter har naturligvis et utall forskjellige karakteristika som skiller dem fra andre studenter!). Allerede som små barn lærer vi å tenke på verden som bestående av atskilte objekter (selv om vi kanskje ikke kaller dem for det): hver bil, hver bok, hver person, hvert hus osv er et eget objekt. Hvert objekt har visse karakteristika; f.eks. har en bok en tittel, en eller flere forfattere, osv, mens en bil har et merke, et registreringsnummer, osv. Noe av filosofien bak objektorientert programmering går ut på at man i programmering kan dra nytte av at verden for oss mennesker oppfattes som bestående av atskilte objekter. Dersom vi lager et program som skal holde orden på opplysninger om biler, så er det naturlig at vi også i programmet (og ikke bare i det virkelige liv) tenker på hver bil som et objekt. Det kan vi få til ved å holde samlet alle dataene om en bil ett sted i programmet, dvs ved å legge alle dataene om en bil i samme objekt. Men hva mener vi med et objekt i Java? Når vi i Java snakker om et objekt så mener vi rett og slett en samling av variabler og metoder 7 som vi har bestemt skal høre sammen i en enhet. Det er helt opp til oss som programmerere å bestemme hvilke variable og metoder som skal høre sammen - her har vi full frihet. Vi vil imidlertid nesten alltid forsøke å lage disse enhetene slik at de avspeiler best mulig de virkelige objektene som vi prøver å modellere/representere i datamaskinen. For å forklare hvordan man lager objekter i Java, må vi først innom et annet begrep: klasser. Klasser Hvordan forteller vi Java at visse variable skal høre sammen i en enhet, f.eks. at variablene navn, fnr og studnr i eksemplet ovenfor skal danne en enhet? Svaret er at vi gjør det ved å deklarere en klasse som inneholder de tre variabeldeklarasjonene: class Student { String navn; int fnr; 7 metoder blir forklart i kap.6 og kap.11 25

26 int studnr; Navnet på klassen (i dette tilfellet: Student) er et navn vi selv velger. En klasse er en angivelse av (dvs en oppskrift for) hvordan en bestemt type objekter skal se ut. Klassen Student vil derfor inneholde variablene vi trenger for å lagre data om hver enkelt student, og metodene som beskriver hva slags operasjoner student-objektet kan gjøre. Det er viktig å få med seg at klassen Student ikke i seg selv utgjør et student-objekt; den beskriver bare hvordan student-objekter skal se ut i datamaskinen. For å få laget et objekt av typen (klassen) Student må vi skrive new Student(); Det som skjer når denne setningen eksekveres er at det settes av lagerplass i datamaskinen til tre nye variable som heter navn, fnr og studnr (det skjer også en ting til: Java gir tilbake adressen til det stedet i hukommelsen hvor objektet ligger; se neste seksjon). I den virkelige verden vil du som regel finne flere objekter av samme type. Det finnes mange studenter og mange biler. Vi kan tenke oss at alle studenter er del av en samlebetegnelse: Student. Denne samlebetegnelsen er det vi kaller en klasse. Vi sier at «studenter er objekter av klassen Student». Alle studentene har samme mulige handlinger og samme type data, men innholdet i dataene skiller dem fra hverandre. Klassen Student beskriver altså egenskaper og handlinger for alle studenter. For å lage flere objekter at klassen Student kan vi bruke new flere ganger: new Student(); new Student(); Når disse eksekveres settes det av lagerplass til to objekter som hver holder tre variable som heter navn, fnr og studnr. Normalt ønsker vi å ta vare på adressen til objektene vi lager (ellers kan vi ikke få tak i variabler og eventuelle metoder inne i objektene); vi skal nå se hvordan det gjøres. Referanser (pekere) Dersom vi ikke tar vare på adressen til et objekt vi har laget, har vi for alltid mistet kontakten med objektet (dvs muligheten til å få tak i variabler og kalle på eventuelle metoder inne i objektet). Adressen kan vi få tak i når objektet blir til, f.eks. ved å skrive Student stud = new Student(); Det som skjer her er først at det lages et objekt av klassen Student, og deretter settes variabelen stud lik adressen til det nye objektet. Variable av denne typen kalles referanser eller pekere i Java. Når vi først har en referanse til et objekt, kan vi lett få tak i variablene og metodene inne i objektet, f.eks. stud.navn = "Nina Alsgård"; stud.fnr = ; stud.studnr = ; System.out.println("Studentens navn er " + stud.navn); Punktumet etter stud uttales «sin» eller «sitt», slik at første linje ovenfor uttales «student sitt navn settes lik Nina Alsgård». Med stud.navn mener vi altså den variabelen navn som ligger inni det objektet som stud refererer til. Vi kan godt ha flere referanser til samme objekt, slik som i følgende eksempel: Student stud2 = stud; 26

27 Nå refererer (peker) både stud og stud2 på samme objekt av klassen Student. Derfor gir følgende to setninger nøyaktig samme resultat: System.out.println("Studentens navn er " + stud.navn); System.out.println("Studentens navn er " + stud2.navn); Vi deklarerer referanser akkurat på samme måte som vi deklarerer variabler, men i stedet for typen (f.eks. int), skriver vi klassenavnet (f.eks. Student). En referanse kan ikke peke på et objekt av en annen klasse enn den er deklarert til å peke på. Retningslinjene for navn på referanser er de samme som for navn på variable. I alle objekter er det en svært nyttig peker som refererer til objektet selv. Denne pekeren heter this og er innebygd i objektet; denne pekeren trenger ikke (og skal ikke) deklareres av deg (du kan tenke deg at Java gjør det automatisk, bak kulissene). Klasse/objekt-diagrammer En sentral del av det å lage et program er å danne seg en mental modell for hva som skal skje når programmet eksekverer. Man kan tenke seg forskjellige detaljnivåer på en slik mental modell; i INF101 konsentrerer vi oss om såkalte klasse/objekt-diagrammer som viser grafisk hvilke klasser programmet består av, hvilke objekter vi har, og hvilke objekter som refererer til hvilke objekter (vi sier at et objekt refererer til et annet objekt dersom det første objektet inneholder en referansevariabel som peker på det andre objektet). Slike diagrammer kan være svært nyttige når vi prøver å forstå hva et komplisert program med mange klasser og objekter gjør, og ikke minst når vi holder på å lage et slikt program. La oss se på et eksempel. Anta at vi har følgende program: class BilRegister { public static void main (String [] args) { Bil bil1, bil2, bil3; bil1 = new Bil(); bil2 = new Bil(); bil3 = new Bil(); bil1.chassisnr = ; bil1.årsmodell = 95;... class Bil { int chassisnr; int årsmodell; Dette (ufullstendige) programmet består av to klasser: class BilRegister og class Bil. I klassen BilRegister er metoden main deklarert, og inne i denne metoden er det først deklarert tre referanser til objekter av klassen Bil. Deretter lager vi tre objekter av klassen Bil og gir deretter verdier til variablene i disse objektene. Et klasse/objekt-diagram for dette programmet vil se ut som i figur

28 chassisnr BilRegister main bil1 bil2 bil3 årsmodell chassisnr årsmodell Bil chassisnr årsmodell Figur 6.1: Mental modell (=klasse/objekt-diagram) for BilRegister-programmet. Mange vil nok føle seg fristet til å «hoppe over» modelleringen og gå rett på programmeringen, men hensikten med tegningen er å lage en modell som danner grunnlag for programmet. Derfor skal tegningen lages før programmeringen tar til. Når man lager større programmer, opplever man fort at man har mange objekter som alle inneholder flere metoder og variabler. Hvis man i tillegg har mange pekere, blir tegningen fort uoversiktlig, og virker ikke etter hensikten. Hvis det er tilfellet, kan det være lurt å dele tegningen opp i flere deler. En del kan vise forholdene mellom objektene, en annen del kan vise innholdet i de forskjellige objektene. Bruk av static I de fleste tilfeller ønsker vi at variable og metoder skal tilhøre det enkelte objekt av en klasse. Det at en metode tilhører objektet betyr at metoden har direkte adgang til alle variable og metoder i objektet. For å få tak i slike variabler og metoder i et objekt, må vi enten befinne oss i objektet eller vi må bruke en sin-konstruksjon med en peker som peker på objektet (p.metode( ) ). Innimellom vil det være behov for å ha data som ikke er knyttet til de enkelte objektene, men til hele klassen. F.eks. er det unødvendig å lagre data om antall gir på biler i hvert enkelt bil-objekt. Dette er ikke data som skiller biler fra hverandre (vi later som om det bare er en type bil i hele verden), men data som beskriver egenskaper felles for alle biler. Hvis vi skulle ønske å forandre antall gir, vil vi at dette skal kunne gjøres ett sted og virke for alle objekter. Slike variabler kalles klassevariable (eng. fields) og har modifikatoren static. En static metode har bare tilgang til static variable og andre static metoder i klassen. dersom en static metode forsøker å få tilgang til en variabel eller metode som tilhører et objekt, får vi følgende feilmelding når vi kompilerer: Can t make a static reference to nonstatic variable <var. navn> in class klassenavn. Denne feilen oppstår fordi man prøver å få tilgang til en variabel eller metode som tilhører et objekt uten å ha laget objektet. Vanligvis er det i tilknytning til klassen som inneholder main-metoden at 28

29 feilen oppstår. En måte å løse problemet på er å lage et objekt av klassen. Når du lager objekter, får du tilgang til alle variable og metoder, og feilmeldingen blir borte. Mer om dette senere. 29

30 30

31 Kapittel 6 - Innlesing fra tastatur I svært mange programmer skal brukeren av programmet gi opplysninger som programmet deretter behandler. Normalt foregår denne kommunikasjonen via tastaturet. Når programmet forventer «input» fra brukeren, venter programmet på dette helt til brukeren taster [Enter]. Da først overføres det brukeren skrev, til programmet, som så fortsetter med behandlingen av teksten som brukeren skrev inn. Hvordan lese fra tastatur Siden innlesning fra tastatur er ganske tungvint i Java, har vi laget en egen verktøykasse for skriving og lesing, som er enklere i bruk: For å lese fra tastatur er det noen få kommandoer som må gjøres hver gang. La oss ta et eksempel: import inf101.*; class Innlesning { public static void main(string[] args) { Inn stdin = new Inn( ); int i; System.out.print("Skriv et tall: "); i = stdin.inint( ); System.out.println("Du skrev: " + i); For å lese fra tastatur må følgende være med: import inf101.*; Denne linja importerer verktøyet (eller hjelpeprogrammene) vi bruker i innlesingen. Inn stdin = new Inn( ); Her lages koplingen (eller referansen) til tastaturet som en peker til et objekt av klassen Inn. Koplingen kalles for stdin. Dette navnet velger du selv, men det er vanlig å kalle den for stdin (Standard in), eller bare in. Senere i programmet, når vi skal lese fra tastaturet, er det denne referansen vi bruker. Selve innlesingen skjer på linjen i = stdin.inint( ); Som du ser, er det en tilordning. Vi leser inn et tall og tilordner verdien til variabelen med navnet i. Hvis brukeren skulle taste noe annet enn et heltall, får hun automatisk en feilmelding fra Inn-objektet. Legg også merke til at det må være samsvar mellom hva vi leser inn, og tilordningen til variabelen der vi tar vare på den innleste verdien. Variabelen i må altså være av typen heltall (int). 31

32 Inn-klassen Verktøyene som importeres (inf101.*) er ikke en del av standardpakken til Java, men er laget ved IFI. Pakken inneholder bl.a. klassen Inn som bl.a. har følgende metoder for innlesing 8 : inint( ) - brukes for å lese inn et heltall. indouble( ) - brukes for å lese inn et desimaltall. inchar( ) - brukes for å lese inn et enkelt tegn. instring( ) - brukes for å lese inn et ord. Et ord, i denne sammenhengen, er en gruppe tegn uten blanke tegn mellom. Det er altså mulig å lese inn tall med denne metoden, men tallet er da representert som tekst (String), og må tilordnes til en String-variabel. Felles for disse metodene er at de hører til en kopling mot tastaturet (eller som vi senere skal se en fil). Denne koplingen oppnår vi ved å skrive navnet på koplingen, stdin, etterfulgt av punktum og tilslutt navnet på metoden. Hvis vi skal lese ett tegn, skriver vi altså: stdin.inchar( ); instringln( ) Denne metoden vil lese en hel linje, eller resten av linja dersom noe av den allerede er lest med noen av de andre metodene. Et eksempel der vi har bruk for å lese både hele linjer med mange ord og linjer med enkeltopplysninger (f.eks. et tall), kan se slik ut: import inf101.*; class Hei { public static void main(string[] args) { Inn stdin = new Inn( ); String navn; int alder; System.out.print("Skriv inn hele navnet ditt: "); navn = stdin.instringln( ); System.out.print("Skriv inn alder: "); alder = stdin.inint( ); System.out.println("Hei " + navn + ". Du er " + alder + " år gammel"); Inn-klassen kan også brukes til å lese fra filer. Det kommer vi tilbake til. Store og små bokstaver Ved innlesning fra tastatur vil det ofte være behov for å gjøre om fra store til små bokstaver (eller omvendt). Slik gjøres det for tegn: char u = A ; 8 En fullstendig beskrivelse av alle metodene til klassen Inn, fins bakerst i dette heftet. 32

33 char l = Character.toLowerCase(u); Dette vil føre til at variabelen l inneholder a. Hvis man ønsker det motsatte: char l = a ; char u = Character.toUpperCase(l); For tekster er notasjonen en litt annen: String low = "navn"; String up = low.touppercase( ); Vil føre til at teksten up inneholder «NAVN». Hvis man ønsker det motsatte: String up = "NAVN"; String low = up.tolowercase( ); 33

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

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

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

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

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

Detaljer

INF1000 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

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

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

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon Kort om meg INF1000 Uke 2 Variable, enkle datatyper og tilordning Fredrik Sørensen Kontor: Rom 4311-NR, Informatikkbygget Brukernavn/e-post: fredrso@ifi.uio.no Utdanning: Dataingeniør, 2000 Cand.Scient,

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

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

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

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

INF1000 : Forelesning 1 (del 2)

INF1000 : Forelesning 1 (del 2) INF1000 : Forelesning 1 (del 2) Java Variable og tilordninger Heltall, desimaltall og sannhetsverdier Utskrift på skjerm Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet

Detaljer

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

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

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

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

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

Detaljer

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

INF 1000 (uke 2) Variabler, tilordninger og uttrykk INF 1000 (uke 2) Variabler, tilordninger og uttrykk Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset I dag skal vi se på Flere praktiske

Detaljer

Forelesning inf Java 4

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

Detaljer

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

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4 Forelesning inf - Java 4 Repetisjon: arrayer Tema: Løkker Arrayer Metoder Ole Christian Lingjærde,. september Deklarere og opprette array - eksempler: int[] a = new int[]; String[] a = new String[]; I

Detaljer

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

I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter denne uken! Klart for første oblig INF 1000 (uke 2) Variabler, tilordninger og uttrykk Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo I dag skal vi se på Flere praktiske opplysninger Litt repetisjon Hva er en variabel

Detaljer

INF1000 Uke 4. Innlesning fra terminal. Uttrykk og presedens. Oversikt

INF1000 Uke 4. Innlesning fra terminal. Uttrykk og presedens. Oversikt Oversikt INF1000 Uke 4 Forgreininger, løkker og arrayer Litt repetisjon Blokker og forgreininger if-setninger if-else-setninger switch-setninger Løkker while-løkker do-while-løkker for-løkker Arrayer Opprette,

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

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

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

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

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

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

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

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing. The Green Team Litt Java-historikk I 1991 opprettet Sun Microsystems en arbeidsgruppe som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

Detaljer

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team The Green Team Litt Java-historikk I 1991 opprettet Sun Microsystems en arbeidsgruppe som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

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

Forelesning inf Java 3

Forelesning inf Java 3 Forelesning inf1000 - Java 3 Tema: Forgreninger Løkker Arrayer Ole Christian Lingjærde, 5. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 5. september 2013 1 Eksempel: Body Mass Index (BMI)

Detaljer

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

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

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

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

Kapittel 1 En oversikt over C-språket

Kapittel 1 En oversikt over C-språket Kapittel 1 En oversikt over C-språket RR 2015 1 Skal se på hvordan man En innføring i C Skriver data til skjermen Lese data fra tastaturet Benytter de grunnleggende datatypene Foretar enkle matematiske

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

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

Velkommen til. INF våren 2016

Velkommen til. INF våren 2016 Velkommen til INF1010 - våren 2016 Denne uken (onsdag og torsdag): Om INF1010 Java datastrukturer Klasser med parametre i Java Stein Gjessing Institutt for informatikk Universitetet i Oslo 1 1 INF1010

Detaljer

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder Praktisk informasjon INF (Uke 5) Mer om løkker, arrayer og metoder Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Når disse timene er over har du lært nok til å løse oblig Frist.

Detaljer

Eksempel: Body Mass Index (BMI)

Eksempel: Body Mass Index (BMI) Ole Chr. Lingjærde 1 Forelesning inf1000 - Java 3 Tema: Forgreninger Løkker Arrayer Ole Christian Lingjærde, 5. september 2013 1 Eksempel: Body Mass Index (BMI) Vi skal lage et program som beregner BMI

Detaljer

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut Praktisk informasjon INF (Uke 5) Mer om løkker, arrayer og metoder Oblig er lagt ut Frist 8. februar Kan løses etter denne forelesningen Grunnkurs i programmering Institutt for Informatikk Universitetet

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

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

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering Kapittel 1 Datamaskiner og programmeringsspråk Dette kapitlet er en kort introduksjon til programmering. Vi vil se på hvordan man skriver, bygger og kjører programmer, samt illustrere noen sentrale programmeringsbegrep

Detaljer

Del 1 En oversikt over C-programmering

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

Detaljer

Programmeringsspråket C

Programmeringsspråket C Programmeringsspråket C Bakgrunn Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI standard i 1988; omtrent alle følger

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

INF 1000 høsten 2011 Uke 3 6. september

INF 1000 høsten 2011 Uke 3 6. september INF 1000 høsten 2011 Uke 3 6. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 Innhold uke 3 Rep: variable og uttrykk Konvertering

Detaljer

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

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49 Innhold Forord...5 1 Det første programmet...15 1.1 Å kommunisere med en datamaskin 16 1.2 Programmeringsspråk 17 1.3 Et program som skriver på skjermen 18 1.4 Kompilering og kjøring 19 1.5 Kommentarer

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

UNIVERSITETET I OSLO

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

Detaljer

Innhold uke 3. INF 1000 høsten 2011 Uke 3 6. september. Uttrykk. Variabel: En plass i hukommelsen

Innhold uke 3. INF 1000 høsten 2011 Uke 3 6. september. Uttrykk. Variabel: En plass i hukommelsen høsten 20 Uke 3 6. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Innhold uke 3 Rep: variable og uttrykk Konvertering Å

Detaljer

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

I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter i dag! Klart for første oblig INF 1000 (uke 2) Variabler, tilordninger og uttrykk Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo I dag skal vi se på Flere praktiske opplysninger Litt repetisjon Hva er en variabel

Detaljer

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

INF 1000 (uke 2) Variabler, tilordninger og uttrykk INF 1000 (uke 2) Variabler, tilordninger og uttrykk Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen I dag skal vi se på Flere praktiske

Detaljer

Forelesning inf Java 1

Forelesning inf Java 1 Forelesning inf1000 - Java 1 Tema: Javas historie Bestanddelene i et Java-program Programvariabler Ole Christian Lingjærde, 22. august 2012 Litt Java-historikk The Green Team I 1991 opprettet Sun Microsystems

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

Forelesning inf1000 - Java 1

Forelesning inf1000 - Java 1 Litt Java-historikk Forelesning inf1000 - Java 1 Tema: Javas historie Bestanddelene i et Java-program Programvariabler Ole Christian Lingjærde, 22. august 2012 The Green Team I 1991 opprettet Sun Microsystems

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

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : INF 101 - Grunnkurs i objektorientert programmering Eksamensdag : Tirsdag 4. juni 2002 Tid for eksamen : 09.00-15.00 Oppgavesettet

Detaljer

INF1000 Uke 3. Innlesning fra terminal. Uttrykk og presedens. Oversikt. Litt repetisjon Blokker og forgreininger

INF1000 Uke 3. Innlesning fra terminal. Uttrykk og presedens. Oversikt. Litt repetisjon Blokker og forgreininger Oversikt INF1000 Uke 3 Forgreininger, løkker og arrayer Litt repetisjon Blokker og forgreininger if-setninger if-else-setninger switch-setninger Løkker while-løkker do-while-løkker for-løkker Arrayer Opprette

Detaljer

Argumenter fra kommandolinjen

Argumenter fra kommandolinjen Argumenter fra kommandolinjen Denne veiledningen er laget for å vise hvordan man kan overføre argumenter fra kommandolinjen til et program. Hvordan transportere data fra en kommandolinje slik at dataene

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

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

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS Løkker og if-tester Gløer Olav Langslet Sandvika VGS 29.08.2011 Informasjonsteknologi 2 Funksjoner, løkker og iftester Læreplansmål Eleven skal kunne programmere med enkle og indekserte variabler eller

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

Blokker og metoder INF1000 (Uke 6) Metoder

Blokker og metoder INF1000 (Uke 6) Metoder Blokker og metoder INF1000 (Uke 6) Metoder Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Are Magnus Bruaset og Arild Waaler En blokk er en samling instruksjoner omgitt av krøllparenteser:

Detaljer

Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner

Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner Oversikt INF1000 Uke 3 Innlesing fra terminal, formatert utskrift og forgreininger Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner Innlesing Formatert utskrift Repetisjon

Detaljer

TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, 08.09.02. -formatert utskrift

TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, 08.09.02. -formatert utskrift TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, 08.09.02 - terminal-i/o (bruker-i/o) - innlesing av ulike typer data - pakken easyio - klassene In og Out In in = new In(); Out ut = new Out(); int

Detaljer

TDT4100 Objektorientert programmering

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

Detaljer

Mer om uttrykk, terminal I/O, forgreninger. Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo

Mer om uttrykk, terminal I/O, forgreninger. Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen I dag Litt repetisjon Mer om

Detaljer

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

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være

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

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

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

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println(); Repetisjon: nesting av løkker 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

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

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 INF1000 Metoder Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 Motivasjon Når man begynner å skrive store programmer, vil man fort oppleve at programmene blir uoversiktlige. Det blir vanskeligere

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

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011) Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF1000 - Høst 2011) Variabler, uttrykk, fogreninger (if-else) (kapittel 2 og 4.1-4.2 i læreboka, "Rett på Java" 3. utg.) Mål Få trening i teorien du trenger

Detaljer

Forelesning inf Java 3

Forelesning inf Java 3 Forelesning inf1000 - Java 3 Tema: Mer om forgreninger Løkker Arrayer Litt om easyio Ole Christian Lingjærde, 5. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1 Eksempel:

Detaljer

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator Litt mer om løkker Arrayer le Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i slo Java Repetisjon: operatorene ++ og -- Instruksjon i = i + i = i - Alternativ Prefiks-operator

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

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

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap Læringsmål og pensum Mål Vite hva et

Detaljer

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Programmering i C++ Løsningsforslag Eksamen høsten 2005 Programmering i C++ Eksamen høsten 2005 Simen Hagen Høgskolen i Oslo, Avdeling for Ingeniørutdanning 7. desember 2005 Generelt Denne eksamensoppgaven består av tre oppgaver, pluss en ekstraoppgave. Det

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

INF1000: noen avsluttende ord

INF1000: noen avsluttende ord Pensum Det som er gjennomgått på forelesningene INF1000: noen avsluttende ord Arne og Fredrik Stoff som er behandlet i oppgaver/obliger Notat om Informasjonsteknologi, vitenskap og samfunnsmessige virkninger

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

Blokker. Uke 4, INF 1000, 13 sept Løkker og arrayer. Eksempel. Deklarasjoner inne i blokker. Institutt for Informatikk Universitet i Oslo

Blokker. Uke 4, INF 1000, 13 sept Løkker og arrayer. Eksempel. Deklarasjoner inne i blokker. Institutt for Informatikk Universitet i Oslo Blokker Uke 4, INF, 3 sept. 5 - Løkker og arrayer. Institutt for Informatikk Universitet i Oslo Arild Waaler En blokk er en samling instruksjoner omgitt av krøllparenteser: { instruksjon ; instruksjon

Detaljer

Feilmeldinger, brukerinput og kontrollflyt

Feilmeldinger, brukerinput og kontrollflyt Feilmeldinger, brukerinput og kontrollflyt Skjønne hvordan et program presist utføres og forberede seg på håndtering av feil INF1000, uke2 Ragnhild Kobro Runde Programmeringskrøll Programmet vil ikke kjøre

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

Løse reelle problemer

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

Detaljer

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

Hva er en metode. Hva skjer når vi kaller en metode

Hva er en metode. Hva skjer når vi kaller en metode Hva er en metode Uke 9 - Repetisjon av metoder, klasser og objekter Innkapsling: private og public Statisk programmering vs. programmering med objeker 18 okt. 2005, Arild Waaler Inst. for informatikk,

Detaljer

Oversikt. Hva er programmering & Java forkurset til INF1000. Hva er en datamaskin. Arne Maus Inst for Informatikk Univ. i Oslo

Oversikt. Hva er programmering & Java forkurset til INF1000. Hva er en datamaskin. Arne Maus Inst for Informatikk Univ. i Oslo Oversikt Hva er programmering & Java forkurset til INF1000 Arne Maus Inst for Informatikk Univ i Oslo I) Hva er en datamaskin Hvordan får vi den til å gjøre det vi vil Et program er en oppskrift til maskinen

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

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