Læringsmål for forelesningen

Like dokumenter
TDT4110 IT Grunnkurs Høst 2015

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

TDT4100 Objektorientert programmering

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

Læringsmål for forelesningen

Dagens forelesning. Husk prøveeksamen Fredag 15/3-13 kl 12 i R1. Iterator-teknikken. Eksempel med bruk av Iterator og Iterable-grensesnittene

Leksjon 2. Setninger og uttrykk

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

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

Leksjon 2. Setninger og uttrykk

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

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Generiske mekanismer i statisk typede programmeringsspråk

Del 3: Evaluere uttrykk

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

Kapittel 9: Sortering og søking Kort versjon

Tall. Binære regnestykker. Binære tall positive, negative heltall, flytende tall

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

Læringsmål for forelesningen

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

TDT4110 IT Grunnkurs Høst 2016

Tall. Posisjons-tallsystemer. Representasjon av heltall. Tall positive, negative heltall, flytende tall. Tekst ASCII, UNICODE XML, CSS

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

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

Del 1 En oversikt over C-programmering

2 Om statiske variable/konstanter og statiske metoder.

Læringsmål og pensum. Oversikt

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

Representasjon av tall på datamaskin Kort innføring for MAT-INF1100L

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

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

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

Programmering Høst 2017

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

Reelle tall på datamaskin

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Læringsmål for forelesningen

Repitisjonskurs. Arv, Subklasser og Grensesnitt

6108 Programmering i Java. Leksjon 5. Tabeller. Roy M. Istad 2015

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

Læringsmål for forelesningen

INF1000 : Forelesning 1 (del 2)

Leksjon 2. Setninger og uttrykk

Leksjon 2. Setninger og uttrykk

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

Kapittel 7: Mer om arv

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF Uke 10. Ukesoppgaver oktober 2012

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

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

Å lese tall fra en fil, klassen Scanner

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

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

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

INF1000: Forelesning 7

TDT4110 IT Grunnkurs Høst 2016

UNIVERSITETET I OSLO

INF1000 HashMap. Marit Nybakken 2. november 2003

INF5110. Oblig 2 presentasjon

HØGSKOLEN I SØR-TRØNDELAG

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

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

JAVA Oppsummering for IS-102. Even Åby Larsen

INF1010 Arv. Marit Nybakken 2. februar 2004

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

Øvingsforelesning 1 Python (TDT4110)

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

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

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

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

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

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

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

Dagens tema: Mer av det dere trenger til del 1

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

IN 147 Program og maskinvare

Kapittel 9: Sortering og søking Kort versjon

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

UNIVERSITETET I OSLO

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

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

INF1000: Forelesning 7. Konstruktører Static

Tall. Ulike klasser tall. Læringsmål tall. To måter å representere tall. De naturlige tallene: N = { 1, 2, 3, }

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

INF Oblig 2 semantikksjekk og kodegenerering

MAT-INF 1100: Obligatorisk oppgave 1

UNIVERSITETET I OSLO

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

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

INF1000 Behandling av tekster

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

Transkript:

Læringsmål for forelesningen Java-programmering Tall-klasser i Java Andre wrapper-klasser Eclipse bruk av scrapbook for evaluering og utførelse av kodesnutter 1

Tall i Java (1) Java har støtte for en rekke typer tall, hvorav de vanligste er int og double I motsetning til ideelle matematiske tall, så vil tall representert vha. et fast antall binære siffer, altså 0 og 1, ha uønskede egenskaper Heltall, f.eks. int, har et begrenset tallområde (+-2 ^ 31) Desimaltall, f.eks. double, har begrenset tallområde og nøyaktighet 2

int - heltall int-typen brukes for å representere heltall int-tallene ligger etter hverandre, som på en tallinje i begge retninger?... -2-1 0 1 2...? 3 Av praktiske grunner er verdiområdet begrenset til, f.eks. i Java: Integer.MIN_VALUE.. 0.. Integer.MAX_VALUE Hva skjer dersom en legger 1 til maksimumsverdien? int n = Integer.MAX_VALUE + 1

Tall i Java (2) Når en bruker tall, kan en velge mellom flere typer enn int og double, med ulike begrensninger byte, short, int og long er heltall med tallområde begrenset av antall bit: byte bruker 8 bit, short 16, int 32 og long 64. Det er sjelden grunn til å bruke noe annet enn int,som dekker +-(2^31) Men, en bør være bevisst begrensningene, f.eks. når en teller sekunder... float og double er såkalte flyttall, som gir mulighet for både større tall og desimaltall. Nøyaktigheten er imidlertid begrenset og dess større tallet er, dess mindre nøyaktig blir det: n = s*i * 2^e hvor s er fortegnet, i er et heltall og e en eksponent. Til hverdags er det sjelden grunn til å bruke noe annet enn double, men profesjonelle beregninger krever ofte litt mer omtanke 4

Tall i Java (3) Hva skjer når en blander talltyper? f.eks. byte + int, float + double eller int + double Merk at tall i koden er av typen int og at det finnes egen syntaks for andre tall. Java konverterer automatisk til int eller double, slik at en ikke mister tallområde eller nøyaktiget under beregningen. byte + int blir til int + int int + double og float + double blir til double + double Hva skjer når svaret skal konverteres tilbake? Vi må tvinge frem en konverting vha. casting, noe som kan gi feil resultat! 5

Bit-representasjon av heltall byte-typen bruker 1 byte = 8 bit 00000000 = 0, 00000001 = 1, 00000010 = 2,... 01111111 = 127, 10000000 = -128 11111111 = -1, 11111110 = -2, 11111101 = -3,... short-typen bruker 2 byte = 16 bit 0000000000000000 = 0, 0000000000000001 = 1,... 0111111111111111 = 2 ^ 15 1 = 32767 1000000000000000 = -(2 ^ 15) = -32768 1111111111111111 = -1, 1111111111111110 = -2,... int bruker 4 byte/32 bit og long 8 byte/64 bit 6

Konvertering Ved konvertering klippes de øverste bit ene bort (int)256 = 100000000 => (byte)0 (int)255 = 011111111 => (byte)-1 Fordel: tall innenfor gyldig tallområde ser like ut: (int)-1 == (byte)-1 Java har forøvrig egne bit-orienterte operaratorer <<, >>, &,, ^ og ~ 7

Tall som verdier int heltall = 3 double desimaltall = 3.14 8 Tall-typer som int og double er såkalte primitive typer Det er stort sett dette vi har brukt så langt! Primitive typer skiller seg fra referansetyper (som peker til objekter) ingen identitet, metoder eller felter for primitive typer bare en verdi som variabelen inneholder Begrensninger ved tall-typer Tall-typene har ingen supertype tilsvarende Object, slik at en alltid må deklarere tall-variabler som en spesifikk talltype Collection-objekter kan ikke inneholde vanlige tall, nettopp fordi de ikke er objekter

Tall som objekter Integer heltall = Double desimaltall = 3 3.14 Java har egne objektvarianter av tall, tegn og logiske verdier, slik at de kan tilordnes variabler av typen Object (og Object-tabeller) og håndteres av Collection-objekter int har sin Integer-klasse, boolean sin Boolean-klasse, char sin Character-klasse, osv. List<int> er ikke lov, en må bruke List<Integer> En kan lage nye tall-objekter på essensielt tre måter: Integer intobjekt1 = new Integer(4); // new-operatoren Integer intobjekt2 = Integer.valueOf(4); // statisk metode som tar int-parameter Integer intobjekt3 = Integer.valueOf( 4 ); // (overlagret) statisk metode som tar String-parameter Et tall-objekt er såkalt immutable, dvs. ikke mulig å endre. Dermed er det ikke noe farlig å dele referanser til tallobjekter. 9

Tall vs. tallobjekter En int er verdien til attributtet #1: MinKlasse int i = 3 En Integer er et eget object, og det er referansen #1: MinKlasse Integer i 3 til objektet som er attributtets verdi #2: Integer Hvorfor trenger en noen ganger å bruke Integer-attributter (og ikke int)? 10

Tall-objekter og identitet Like tall-objekter kan være forskjellige objekter: new Integer(4)!= new Integer(4) new Integer(4)!= Integer.valueOf(4) Integer.valueOf(4) == Integer.valueOf(4) Integer.valueOf(4)!= Integer.valueOf( 4 ) Integer.valueOf(12345)!= Integer.valueOf(12345) new Integer(i) lager alltid et nytt objekt Integer.valueOf(i) lager noen ganger et nytt objekt og returnerer noen ganger et eksisterende et Integer.valueOf(s) ser ut til å lage et nytt objekt 11 Ikke regn med at to like tall er identiske eller omvendt! Merk at String oppfører seg på en lignende måte! f.eks. Hall + vard == Hallvard gir true

Eclipse sin scrapbookmekanisme Sakset fra Hjelpesystemet til Eclipse: The Java Development Toolkit (JDT) contributes a scrapbook facility that can be used to experiment and evaluate Java code snippets before building a complete Java program En scrapbook er en jpage-fil, med tilhørende Eclipse-editor. Snutter med Java-kode kan kjøres og enkeltuttrykk kan evalueres, uten å måtte lage en klasse med en main-metode. 12

Opprette en scrapbook Høyreklikk på mappe/pakke, velg New->Other... og deretter Scrapbook Page 13

Evaluere kode i en scrapbook (1) Velg kodesnutten og deretter Evaluate -knappen Resultatet legges inn bak snutten 14

Evaluere kode i en scrapbook (2) Velg kodesnutten og deretter Inspect -knappen Resultatet vises i et eget popup-vindu 15

Utføre kode i en scrapbook Velg kodesnutten og deretter Execute -knappen Resultatet vises implisitt i konsollet 16

Number-klassen Number-klassen er superklassen til alle de spesifikke tallklassene (Byte, Short, Integer, Long, Float, Double) Number (er en abstrakt klasse som) spesifiserer (abstrakte) metoder for å konvertere til spesifikke talltyper: bytevalue(), shortvalue(), intvalue(), longvalue(), floatvalue(), doublevalue() Hver heltallsklasse har nyttige attributter og metoder Integer.toString(int) lager en String av en int, tilsvarende Integer.valueOf(int).toString(), men uten å lage et Integer-objekt Integer.MIN_VALUE og Integer.MAX_VALUE er statiske attributter som er satt til hhv. minste og største mulige int-verdier Alle tall-klassene (altså Number-subklasser) implementerer Comparable og dermed comparetometoden, slik at tall kan sorteres. 17

Konvertering mellom tall og tall-objekter (1) For å lagre tall i Collection-objekter (og generelt når en trenger en Object eller Number-referanse), må tall gjøres om til tall-objekter // kan ikke alltid bruke int[] List<Integer> list = ArrayList<Integer>(); list.add(integer.valueof(13)); list.get(0) gir en Integer Java 1.5 har støtte for automatisk konvertering mellom tall-objekter og tilsvarende talltype (både frem og tilbake) 18

Konvertering mellom tall og tall-objekter (2) Konvertering skjer automatisk når deklarasjonene gjør det helt tydelig hva slags type vi har og forventer Når intobjekt er deklarert som en Integer vil intobjekt = 1 oversettes til intobjekt = Integer.valueOf(1) int n = intobjekt * 2 oversettes til int n = intobject.intvalue() * 2 Når list er deklarert som List<Integer> vil list.add(n) oversettes til list.add(integer.valueof(n)) og list.get(i) oversettes til list.get(i).intvalue() 19

Konvertering mellom tall og tall-objekter (3) Kan en bruke List<int> og unngå konverteringen? <type>-deklarasjoner gjelder kun for subklasser av Object Kan en bruke List<Number>, når en ikke vet spesifikt hva slags talltyper en har? Nei, konvertering skjer kun for spesifikke tall-klasser, som Integer og Double. 20

Ikke bruk tall-objekter ukritisk Tall-objekter brukes i tre tilfeller når en må blande ulike talltyper eller talltyper og andre objekt-typer når en ønsker å bruke Collection-rammeverket sammen med tall (både Collection- og Map-subklasser) når en ønsker å skille mellom ikke-noe-tall (null) og en gyldig tall-verdi Automatisk konvertering (såkalt autoboxing) har en kostnad automatisk generert konverteringskode tar tid tall-objekter tar også plass og tid å opprette og kaste: List<Integer> talliste = new ArrayList<Integer>(); talliste.add(1); talliste.add(1); for (int i = 2; i < 100; i++) { talliste.add(i, talliste.get(i-2) + talliste.get(i-1)); } 21

boolean/boolean og char/character Objekt-motstykket til boolean er Boolean brukes typisk når en skal lagre logiske verdier blant andre typer objekter Siden en kun trenger to slike objekter, tilsvarende true og false, har Boolean to statiske attributter TRUE og FALSE Boolean.TRUE == true og Boolean.valueOf(true) == Boolean.TRUE Boolean. FALSE == false og Boolean.valueOf(false) == Boolean.FALSE Det meste av det som er sagt om konvertering mellom tall og tall-objekter, gjelder også for boolean/boolean og char/character konvertering skjer automatisk når deklarasjonene er der, f.eks. gitt List<Boolean> bs = new ArrayList<Boolean>(); bs.add(2 == 0) oversettes til bs.add(boolean.valueof(2 == 0)) if (Boolean.TRUE) {... } oversettes til if (Boolean.TRUE.booleanValue()) {... } List<Character> cs = new ArrayList<Character>(); cs.add( # ) oversettes til cs.add(character.valueof( # )) 22

Desimaltallsberegninger Tre merkelige desimaltall NaN (not a number), resultatet av umulige beregninger Math.sqrt(-1.0) returnerer NaN Merk at NaN!= NaN, f.eks. Math.sqrt(-1.0)!= Math.sqrt(-1.0) Alle operasjoner med NaN som operand gir NaN, dvs. har du først fått NaN, så får du aldri noe annet Infinity (uendelig) og -Infinity (negativ uendelig) 1.0 / 0.0 gir Infinity, 1.0 / -0.0 gir Infinity (1.0 / -0.0) + (1.0 / 0.0) gir NaN 23

Desimaltallsberegninger Unøyaktigheter i tallrepresentasjonen gjør at beregninger blir unøyaktige, så ikke bruk == ved sammenligning av desimaltall, men sjekk om tallet er innenfor et lite interval (d1 epsilon < d2) && (d2 < d1+epsilon) hvor epsilon er et veldig lite tall, jfr. assertequals(double, double, double) 24

Flere tallklasser I tillegg til Integer, Double osv. som har motstykkene int, double osv., så har Java to tallklasser med ubegrenset tallområde java.math.biginteger er heltall med ubegrenset størrelse java.math.bigdecimal er tilsvarende for flyttall Begge er subklasser av java.lang.number, som de andre tall-klassene Disse klassene lar en jobbe med kjempestore tall (som kan ta mye plass og tid å operere på) Noen typer tallteoretiske og numeriske anvendelser kan dra nytt av disse, f.eks. leting etter store primtall ifm. kryptering. 25

BigInteger-eksempel List<Integer> tall = new ArrayList<Integer>(); tall.add(1); tall.add(1); for (int i = 2; i < 100; i++) { tall.add(i, tall.get(i-2) + tall.get(i-1)); } Konverteres til: List<BigInteger> tall = new ArrayList<BigInteger>(); tall.add(biginteger.valueof(1)); tall.add(biginteger.one); for (int i = 2; i < 100; i++) { tall.add(i, tall.get(i-2).add(tall.get(i-1))); } 26

String-objekter ligner på tall-objekter Et String-objekt kan ikke endres, dvs. det finnes ingen endringsmetoder String-objekter lages som regel implisitt, fra konstanter eller uttrykk Sammenligning med == kan være uforutsigbart, bruk equals Ved ukritisk bruk kan en lage fryktelig mange String-objekter uten at en er klar over det: BufferedReader reader = String result = ""; while (reader.ready()) { result = result + reader.readline(); } Ved trinnvis bygging av String-objekter er det bedre å bruke StringBuffer (<1.5) eller StringBuilder (>=1.5), f.eks. slik: BufferedReader reader = StringBuilder result = new StringBuilder(); while (reader.ready()) { result.append(reader.readline()); } 27

Læringsmål for forelesningen Java-programmering Tall-klasser i Java Andre wrapper-klasser Eclipse bruk av scrapbook for evaluering og utførelse av kodesnutter 28