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

Like dokumenter
Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

Jentetreff INF1000 Debugging i Java

INF1000: Forelesning 7

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

INF1000: Forelesning 7. Konstruktører Static

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

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 Langmyhr

UNIVERSITETET I OSLO

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

INF Uke 10. Ukesoppgaver oktober 2012

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

INF våren 2017

INF1000: noen avsluttende ord

Forelesning inf Java 5

Forelesning inf Java 5

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

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

INF 1000 høsten 2011 Uke september

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

UNIVERSITETET I OSLO

Seminaroppgaver IN1010, uke 2

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

IN våren 2019 Onsdag 16. januar

IN våren 2018 Tirsdag 16. januar

To måter å programmere på. Java 12. Programmering med objekter. Statisk programmering

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

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

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

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

UNIVERSITETET I OSLO

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

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

INF1000 : Forelesning 4

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

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

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

Klasser, objekter, pekere og UML. INF gruppe 13

Velkommen til. INF våren 2016

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

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

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

UNIVERSITETET I OSLO

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

Feilmeldinger, brukerinput og kontrollflyt

IN Notat om I/O i Java

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

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

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

2 Om statiske variable/konstanter og statiske metoder.

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

Dagens tema Kapittel 8: Objekter og klasser

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

INF1000. Marit Nybakken 10. februar 2004

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

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 7: okt (INF Høst 2010)

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

Blokker og metoder INF1000 (Uke 6) Metoder

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

INF1000 Forelesning 8. Litt repetisjon: Metoder og klasser Innkapsling av variable og metoder Hvordan gripe an et stort problem?

Hva er en metode? INF1000 Forelesning 8. Hva skjer når vi kaller en metode? Hvorfor bruke metoder?

Uke 7 - Objekter, klasser og pekere (+ litt først om args[])

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

INF1000: Forelesning 6. Klasser og objekter del 1

Ukeoppgaver 1: 30. aug 3. sep (INF Høst 2010)

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Kapittel 8: Programutvikling

INF1000: Forelesning 4. Mer om arrayer Metoder

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

Objekter. Uke 8 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

Oblig4 - forklaringer. Arne og Ole Christian

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

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

INF Notat om I/O i Java

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Java. INF1000 : Forelesning 2. Ulike varianter for ulike behov. Java Standard Edition (Java SE) Java:

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

INF1000: noen avsluttende ord

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

INF1000 Klasser og objekter

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

2 Om statiske variable/konstanter og statiske metoder.

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. Tre måter å lese fra terminal.

Transkript:

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

Forkurs INF1010 - dag 2 Feilmeldinger 2

Forkurs INF1010 - dag 2 Feilmeldinger Klasser og pekere Klasser Pekere 2

Forkurs INF1010 - dag 2 Feilmeldinger Klasser og pekere Klasser Pekere Metoder 2

3

Innhold Feilmeldinger Klasser og pekere Klasser Pekere Metoder 4

Feilmeldinger 5

Feilmeldinger Det er to typer feil som kan oppstå under programmering: 5

Feilmeldinger Det er to typer feil som kan oppstå under programmering: Syntaksfeil 5

Feilmeldinger Det er to typer feil som kan oppstå under programmering: Syntaksfeil Kjørefeil 5

Feilmeldinger Det er to typer feil som kan oppstå under programmering: Syntaksfeil Kjørefeil Logiske feil 5

Syntaks og kjørefeil Disse går på det syntaktiske. Det vil si det er disse som gjør java "strengt"og for eksempel passer på at du ikke endrer type på en variabel eller prøver deg på int a = "tallet 2". 6

Python vs. Java De kan minne om feil som oppstår under kjøring i Python: $ python runtimeerror.py Traceback (most recent call last): File "runtimeerror.py", line 1, in <module> print "tallet er " + 2 TypeError: cannot concatenate str and int objects 7

Python vs. Java De oppstår oftest under kompilering i Java: $ javac Feilskaping.java Feilskaping.java:4: error: incompatible types: String cannot be converted to int int a = "tallet 2"; ^ 1 error 8

Python vs. Java Men kan oppstå under kjøring i java også: Exception in thread "main" java.lang.numberformatexception: For input string: "rr" at java.lang.numberformatexception.forinputstring( at java.lang.integer.parseint(integer.java:580) at java.lang.integer.parseint(integer.java:615) at Feilskaping.main(Feilskaping.java:6) 9

Vanlige syntaks og kjørefeil 1. Kompilering: incompatible types 10

Vanlige syntaks og kjørefeil 1. Kompilering: incompatible types variable might not have been initialized 10

Vanlige syntaks og kjørefeil 1. Kompilering: incompatible types variable might not have been initialized cannot find symbol 10

Vanlige syntaks og kjørefeil 1. Kompilering: incompatible types variable might not have been initialized cannot find symbol 2. Under kjøring: NumberFormatException 10

Vanlige syntaks og kjørefeil 1. Kompilering: incompatible types variable might not have been initialized cannot find symbol 2. Under kjøring: NumberFormatException NullPointerException 10

Vanlige syntaks og kjørefeil 1. Kompilering: incompatible types variable might not have been initialized cannot find symbol 2. Under kjøring: NumberFormatException NullPointerException ArrayIndexOutOfBoundsException 10

Logiske feil Feil som ikke kan oppdages under kompilering eller kjøring. Det er altså feil i programmets oppførsel og hvordan det håndterer data/input med tanke på programmets hensikt. 11

Oppgave Hva er den logiske feilen? int min = 0; if (a < b && a < c) { min = a; } else if (b < a && b < c) { min = b; } else { min = c; } System.out.println("min=%d", min); 12

Oppgave int min = 0; if (a <= b && a <= c) { min = a; } else if (b <= a && b <= c) { min = b; } else { min = c; } System.out.println("min=%d", min); 13

Innhold Feilmeldinger Klasser og pekere Klasser Pekere Metoder 14

Objektorientert programmering Vi modellerer virkelige objekter. Objekter har to typer egenskaper: 15

Objektorientert programmering Vi modellerer virkelige objekter. Objekter har to typer egenskaper: Data som beskriver objektet. 15

Objektorientert programmering Vi modellerer virkelige objekter. Objekter har to typer egenskaper: Data som beskriver objektet. Handlinger som objektet kan utføre. 15

Spørsmål 16

Spørsmål Hvilke data og handlinger er nyttige for en bil å ha? 16

Klasse Definisjon En klasse er mønsteret (oppskriften) til et objekt. Klassen beskriver en mengde objekter med lik oppførsel. 17

Klasse Definisjon En klasse er mønsteret (oppskriften) til et objekt. Klassen beskriver en mengde objekter med lik oppførsel. I klassen bruker vi ulike variable for å representere objektets data, og metoder for å representere handlingene objektet kan utføre. 17

Spørsmål 18

Spørsmål Hvilke variabler og metoder er nyttige for en bil-klasse? 18

En klasse for en sirkel I INF1100 møtte dere på følgende klasse: class Circle: def init (self, x0, y0, R): self.x0, self.y0, self.r = x0, y0, R def area(self): return pi*self.r**2 def circumference(self): return 2*pi*self.R 19

En klasse for en sirkel I Java ser denne slik ut: class Circle { private double x0; private double y0; private double R; public Circle(double x0, double y0, double R) { this.x0 = x0; this.y0 = y0; this.r = R; } 20

En klasse for en sirkel (fortsettelse) public double area() { return 2*Math.PI*R*R; } public double circumference() { return 2*Math.PI*R; } 21

En klasse for en sirkel (fortsettelse) public double getr() { return R; } public double getx0() { return x0; } } public double gety0() { return y0; } 22

Bruk av klassen Python: c = Circle(2, -1, 5); print A circle with radius %g at (%g, %g) has area %g % (c.r, c.x0, c.y0, c.area()) 23

Bruk av klassen Python: c = Circle(2, -1, 5); print A circle with radius %g at (%g, %g) has area %g % (c.r, c.x0, c.y0, c.area()) Java: class Main { public static void main(string[] args) { Circle c = new Circle(2, -1, 5); System.out.printf("A circle with radius %g at (%g, %g) has area %g\n", c.getr(), c.getx0(), c.gety0(), c.area()); } } 23

Spørsmål 24

Spørsmål Gitt følgende klasse: class Person { private String navn; public Person(String navn) { this.navn = navn; }} Hvilke av setningene under er lovlige? 1. Person p = new Person(); 2. p.navn = Gard ; 3. Person p = new Person( Andreas ); 24

Spørsmål Gitt følgende klasse: class Person { private String navn; public Person(String navn) { this.navn = navn; }} Hvilke av setningene under er lovlige? 1. Person p = new Person(); 2. p.navn = Gard ; 3. Person p = new Person( Andreas ); 24

Bruk av klasser 25

26

Oppgave 27

Oppgave Lag klasser for trekanter og firkanter. De skal ha nyttige variabler og metoder som regner ut areal og omkrets. 27

Oppgave Lag klasser for trekanter og firkanter. De skal ha nyttige variabler og metoder som regner ut areal og omkrets. 27

Pekere Circle c = new Circle(0,0,5); c er en peker til Circle-objektet. 28

Pekere Circle c = new Circle(0,0,5); c er en peker til Circle-objektet. Pekeren er en minneadresse som forteller oss hvor objektet er lagret. 28

Pekere Circle c = new Circle(0,0,5); c er en peker til Circle-objektet. Pekeren er en minneadresse som forteller oss hvor objektet er lagret. En peker som ikke peker på noe har verdien null. 28

Pekere Circle c = new Circle(0,0,5); c er en peker til Circle-objektet. Pekeren er en minneadresse som forteller oss hvor objektet er lagret. En peker som ikke peker på noe har verdien null. Typisk feil: NullPointerException. 28

Spørsmål 29

Spørsmål NullPointerException får vi når 1. Vi deklarerer en peker uten å gi den verdi: Person p; 2. Vi prøver å aksessere data i en peker som ikke har fått noen verdi: Person p; p.hentnavn(); 3. Vi prøver å konvertere en tom tekst til et tall: int a = Integer.parseInt( ); 29

Spørsmål NullPointerException får vi når 1. Vi deklarerer en peker uten å gi den verdi: Person p; 2. Vi prøver å aksessere data i en peker som ikke har fått noen verdi: Person p; p.hentnavn(); 3. Vi prøver å konvertere en tom tekst til et tall: int a = Integer.parseInt( ); 29

Innhold Feilmeldinger Klasser og pekere Klasser Pekere Metoder 30

Metoder En metode er en funksjon knyttet til en klasse. En metode definerer hvilke handlinger som kan utføres i en klasse. En samling programsetninger knyttet til et navn. 31

En metode Python: def f2c(self, f): return (5.0/9)*(f-32); 32

En metode Python: def f2c(self, f): return (5.0/9)*(f-32); Java: public double f2c(double f) { return (5.0/9)*(f-32); } 32

Bruk av metoden Alle metoder i Java må legges inn i en klasse: class TempConverter { public double f2c(double f) { return (5.0/9)*(f-32); } } 33

Bruk av metoden Alle metoder i Java må legges inn i en klasse: class TempConverter { public double f2c(double f) { return (5.0/9)*(f-32); } } Kall på metoden fra main: class Main { public static void main(string[] args) { TempConverter tempconv = new TempConverter(); double celsius = tempconv.f2c(20); System.out.println(celsius + " C"); } } 33

Oppgave 34

Oppgave Hva mangler? [returverdi] sum(){ double a = 2.0; int b = 3; return a + b; } 1. int 2. double 3. void 34

Oppgave Hva mangler? [returverdi] sum(){ double a = 2.0; int b = 3; return a + b; } 1. int 2. double 3. void 34

Oppgave 35

Oppgave Finn feilene i følgende metode: public void sum(int[] array) { int sum = 0; for(int i = 0; i < array.length: i++) { sum += array{i}; } return sum; } 35

Fasit public int sum(int[] array) { int sum = 0; for(int i = 0; i < array.length; i++) { sum += array[i]; } return sum; } 36

Oppgave 37

Oppgave Finn feilene i følgende metode: public int minmax(int[] a) { int min = a[0]; int max = a[0]; for (int i: a) { if (i < min) { min = i; } if (i > max) { max = i; } } return min, max; } 37

Fasit public int[] minmax(int[] a) { int min = a[0]; int max = a[0]; for (int i: a) { if (i < min) { min = i; } if (i > max) { max = i; } } int[] returnvalues = {min, max}; return returnvalues; } 38

Oppgave 39

Oppgave Skriv en metode som finner det største av tre tall: a, b og c og returnerer verdien av det. Du kan ikke anta at tallene har ulike verdier. 39

Oppgave Skriv en metode som finner det største av tre tall: a, b og c og returnerer verdien av det. Du kan ikke anta at tallene har ulike verdier. public int max(int a, int b, int c) { } 39

Oppgave Skriv en metode som finner det største av tre tall: a, b og c og returnerer verdien av det. Du kan ikke anta at tallene har ulike verdier. public int max(int a, int b, int c) { } 39

40

41

Mer lesestoff Java tutorials: Klasser og objekter Arrayer Marit Nybakkens notater: Objekter Konstruktører Metoder 42