Forkurs INF1010 Dag 3 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Gard Inge Rosvold (gardir@ifi.uio.no) Institutt for Informatikk, 15. januar 2016
Forkurs INF1010 - dag 3 Strenger 2
Forkurs INF1010 - dag 3 Strenger Fil-I/O 2
Forkurs INF1010 - dag 3 Strenger Fil-I/O Unntakshåndtering 2
Forkurs INF1010 - dag 3 Strenger Fil-I/O Unntakshåndtering ArrayList 2
Forkurs INF1010 - dag 3 Strenger Fil-I/O Unntakshåndtering ArrayList HashMap 2
Forkurs INF1010 - dag 3 Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse 2
Forkurs INF1010 - dag 3 Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse Oppsummering 2
3
Innhold Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse Oppsummering 4
Strenger 5
Strenger Typer som int og double kalles primitive typer. 5
Strenger Typer som int og double kalles primitive typer. String blir representert som et objekt. 5
Strenger Typer som int og double kalles primitive typer. String blir representert som et objekt. Følgende kommandoer gir samme resultat: String s1 = "Dette er en String"; String s2 = new String("Dette er en String"); 5
Strenger Typer som int og double kalles primitive typer. String blir representert som et objekt. Følgende kommandoer gir samme resultat: String s1 = "Dette er en String"; String s2 = new String("Dette er en String"); s1 == s2 false 5
Strenger Typer som int og double kalles primitive typer. String blir representert som et objekt. Følgende kommandoer gir samme resultat: String s1 = "Dette er en String"; String s2 = new String("Dette er en String"); s1 == s2 false == sjekker om s1 og s2 er samme objekt, ikke om de har samme innhold. 5
Nyttige String-metoder 6
Nyttige String-metoder Vi definerer String a; String b; med verdier Da kan vi bruke metodene 6
Nyttige String-metoder Vi definerer String a; String b; med verdier Da kan vi bruke metodene a.equals(b) (sjekker om a og b har samme innhold/verdi) 6
Nyttige String-metoder Vi definerer String a; String b; med verdier Da kan vi bruke metodene a.equals(b) (sjekker om a og b har samme innhold/verdi) a.length() (finner antall tegn i a) 6
Nyttige String-metoder Vi definerer String a; String b; med verdier Da kan vi bruke metodene a.equals(b) (sjekker om a og b har samme innhold/verdi) a.length() (finner antall tegn i a) a.charat(i) (finner bokstaven på plass nr. i) 6
Nyttige String-metoder Vi definerer String a; String b; med verdier Da kan vi bruke metodene a.equals(b) (sjekker om a og b har samme innhold/verdi) a.length() (finner antall tegn i a) a.charat(i) (finner bokstaven på plass nr. i) a.substring(i,j) (henter f.o.m tegn nr. i t.o.m. nr. j-1) 6
Nyttige String-metoder Vi definerer String a; String b; med verdier Da kan vi bruke metodene a.equals(b) (sjekker om a og b har samme innhold/verdi) a.length() (finner antall tegn i a) a.charat(i) (finner bokstaven på plass nr. i) a.substring(i,j) (henter f.o.m tegn nr. i t.o.m. nr. j-1) a.compareto(b) (kommer a før b i alfabetet?) 6
Nyttige String-metoder Vi definerer String a; String b; med verdier Da kan vi bruke metodene a.equals(b) (sjekker om a og b har samme innhold/verdi) a.length() (finner antall tegn i a) a.charat(i) (finner bokstaven på plass nr. i) a.substring(i,j) (henter f.o.m tegn nr. i t.o.m. nr. j-1) a.compareto(b) (kommer a før b i alfabetet?) a.tochararray() (returnerer strengen som en char[]) 6
Nyttige String-metoder Vi definerer String a; String b; med verdier Da kan vi bruke metodene a.equals(b) (sjekker om a og b har samme innhold/verdi) a.length() (finner antall tegn i a) a.charat(i) (finner bokstaven på plass nr. i) a.substring(i,j) (henter f.o.m tegn nr. i t.o.m. nr. j-1) a.compareto(b) (kommer a før b i alfabetet?) a.tochararray() (returnerer strengen som en char[])... og mange flere. Sjekk doc 6
Bruk av String Verdi 7
Bruk av String Verdi string som verdi 7
Bruk av String Verdi string som verdi Variabel 7
Bruk av String Verdi string som verdi Variabel String a = linje ; System.out.printf( %s\n, a); 7
Bruk av String Verdi string som verdi Variabel String a = linje ; System.out.printf( %s\n, a); Klasse 7
Bruk av String Verdi string som verdi Variabel String a = linje ; System.out.printf( %s\n, a); Klasse return String.format( Tallet er %d, 42) 7
Bruk av String Verdi string som verdi Variabel String a = linje ; System.out.printf( %s\n, a); Klasse return String.format( Tallet er %d, 42) Variabel og Klasse 7
Bruk av String Verdi string som verdi Variabel String a = linje ; System.out.printf( %s\n, a); Klasse return String.format( Tallet er %d, 42) Variabel og Klasse String a = sant ; String b = usant ; if (a.equals(b)) { 7
Bruk av String Verdi string som verdi Variabel String a = linje ; System.out.printf( %s\n, a); Klasse return String.format( Tallet er %d, 42) Variabel og Klasse String a = sant ; String b = usant ; if (a.equals(b)) { Eksempel på alle på en gang. 7
Bruk av String Verdi string som verdi Variabel String a = linje ; System.out.printf( %s\n, a); Klasse return String.format( Tallet er %d, 42) Variabel og Klasse String a = sant ; String b = usant ; if (a.equals(b)) { Eksempel på alle på en gang. String a = sant ; if ("ikke sant".equals(a)) { 7
Oppgave 8
Oppgave Gitt en String, lag kode som teller antall forekomster av bokstaven r i denne Stringen. 8
Oppgave Gitt en String, lag kode som teller antall forekomster av bokstaven r i denne Stringen. 8
Mer om String Repetisjonskurs om String og Input/Output fra INF1000 i høst: https://slides.com/gardir 9
Innhold Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse Oppsummering 10
Lese linjevis fra fil 11
Lese linjevis fra fil 1 import java.io.*; 2 try { 3 Scanner s = new Scanner(new File("testfil.txt")); 4 while (s.hasnextline()) { 5 String linje = s.nextline(); 6 System.out.println(linje); 7 } 8 s.close(); 9 } catch (IOException e) { 10 System.out.println("Filen finnes ikke"); 11 } 11
Lese linjevis fra fil doc 1 import java.io.*; 2 try { 3 Scanner s = new Scanner(new File("testfil.txt")); 4 while (s.hasnextline()) { 5 String linje = s.nextline(); 6 System.out.println(linje); 7 } 8 s.close(); 9 } catch (IOException e) { 10 System.out.println("Filen finnes ikke"); 11 } 11
Skrive linjevis til fil 12
Skrive linjevis til fil 1 import java.io.*; 2 try { 3 PrintWriter outfile = new PrintWriter( 4 new File("utfil.txt")); 5 for (int i = 0; i < 20; i++) { 6 String tekst = String.format("%04d\n", i); 7 outfile.print(tekst); 8 } 9 outfile.close(); 10 } catch (IOException e) { 11 System.out.println("Kan ikke skrive til fil"); 12 } 12
Skrive linjevis til fil doc 1 import java.io.*; 2 try { 3 PrintWriter outfile = new PrintWriter( 4 new File("utfil.txt")); 5 for (int i = 0; i < 20; i++) { 6 String tekst = String.format("%04d\n", i); 7 outfile.print(tekst); 8 } 9 outfile.close(); 10 } catch (IOException e) { 11 System.out.println("Kan ikke skrive til fil"); 12 } 12
Innhold Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse Oppsummering 13
Kompileringsfeil vs kjøretidsfeil Kompileringsfeilene blir fanget av kompilatoren, og vi kan fikse dem før programmet kjører. Her finner vi syntaksfeil (manglende klammeparenteser osv.) og generelt ulovlig kode. Kjøretidsfeil dukker opp når programmet kjøres, og disse kan (og noen ganger må) håndteres på en eller annen måte. Eksempel på dette er feil ved innlesing fra fil. 14
Try/catch 15
Try/catch 1 try { 2... 3 } catch (...Exception e) { 4... 5 } 15
Try/catch 1 try { 2... 3 } catch (...Exception e) { 4... 5 } 15
Innhold Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse Oppsummering 16
ArrayList Liste som ligner på array, men har ingen fast størrelse. 17
ArrayList Liste som ligner på array, men har ingen fast størrelse. Kan bare lagre objekttyper. 17
ArrayList Liste som ligner på array, men har ingen fast størrelse. Kan bare lagre objekttyper. Importeres fra java.util. 17
ArrayList Liste som ligner på array, men har ingen fast størrelse. Kan bare lagre objekttyper. Importeres fra java.util. 1 ArrayList<String> liste = new ArrayList<String>(); 2 liste.add("gard"); 3 liste.add(0, "Andreas"); 17
ArrayList Liste som ligner på array, men har ingen fast størrelse. Kan bare lagre objekttyper. Importeres fra java.util. 1 ArrayList<String> liste = new ArrayList<String>(); 2 liste.add("gard"); 3 liste.add(0, "Andreas"); Med heltall: 1 ArrayList<Integer> tall = new ArrayList<Integer>(); 17
Metoder ArrayList<E> liste = new ArrayList<E>(); boolean add(e e) 18
Metoder ArrayList<E> liste = new ArrayList<E>(); boolean add(e e) void add(int index, E element) 18
Metoder ArrayList<E> liste = new ArrayList<E>(); boolean add(e e) void add(int index, E element) boolean contains(object o) 18
Metoder ArrayList<E> liste = new ArrayList<E>(); boolean add(e e) void add(int index, E element) boolean contains(object o) E get(int index) 18
Metoder ArrayList<E> liste = new ArrayList<E>(); boolean add(e e) void add(int index, E element) boolean contains(object o) E get(int index) E remove(int index) 18
Metoder ArrayList<E> liste = new ArrayList<E>(); boolean add(e e) void add(int index, E element) boolean contains(object o) E get(int index) E remove(int index) int size() 18
Metoder ArrayList<E> liste = new ArrayList<E>(); boolean add(e e) void add(int index, E element) boolean contains(object o) E get(int index) E remove(int index) int size() Doc 18
Iterasjon 1 ArrayList<String> liste = new ArrayList<String>(); 2 for (String s: liste) { 3 System.out.println(s); 4 } 19
20
Innhold Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse Oppsummering 21
HashMap Liste som lagrer (nøkkel,objekt)-par. 22
HashMap Liste som lagrer (nøkkel,objekt)-par. Elementene ligger ikke i en bestemt rekkefølge, mer som i en stor sekk. 22
HashMap Liste som lagrer (nøkkel,objekt)-par. Elementene ligger ikke i en bestemt rekkefølge, mer som i en stor sekk. Vi finner igjen objektene vha. objektets nøkkel. 22
HashMap Liste som lagrer (nøkkel,objekt)-par. Elementene ligger ikke i en bestemt rekkefølge, mer som i en stor sekk. Vi finner igjen objektene vha. objektets nøkkel. 1 HashMap<String, Person> personer = new HashMap<String, Person>(); 2 3 personer.put("gard", new Person("Gard")); 4 Person gard = personer.get("gard"); 22
HashMap Liste som lagrer (nøkkel,objekt)-par. Elementene ligger ikke i en bestemt rekkefølge, mer som i en stor sekk. Vi finner igjen objektene vha. objektets nøkkel. 1 HashMap<String, Person> personer = new HashMap<String, Person>(); 2 3 personer.put("gard", new Person("Gard")); 4 Person gard = personer.get("gard"); 22
Metoder HashMap<K,V> hm = new HashMap<K,V>(); V put(k key, V value) 23
Metoder HashMap<K,V> hm = new HashMap<K,V>(); V put(k key, V value) V get(object key) 23
Metoder HashMap<K,V> hm = new HashMap<K,V>(); V put(k key, V value) V get(object key) V remove(object key) 23
Metoder HashMap<K,V> hm = new HashMap<K,V>(); V put(k key, V value) V get(object key) V remove(object key) boolean containskey(object key) 23
Metoder HashMap<K,V> hm = new HashMap<K,V>(); V put(k key, V value) V get(object key) V remove(object key) boolean containskey(object key) V containsvalue(object value) 23
Metoder HashMap<K,V> hm = new HashMap<K,V>(); V put(k key, V value) V get(object key) V remove(object key) boolean containskey(object key) V containsvalue(object value) int size() Doc 23
Iterasjon 1 HashMap<String, Person> personer = new HashMap<String, Person>(); Iterasjon over verdiene: 1 for (Person p: personer.values()) { 2 System.out.println(p.getNavn()); 3 } 24
Iterasjon 1 HashMap<String, Person> personer = new HashMap<String, Person>(); Iterasjon over verdiene: 1 for (Person p: personer.values()) { 2 System.out.println(p.getNavn()); 3 } Iterasjon over nøklene: 1 for (String navn: personer.keyset()) { 2 System.out.println(navn); 3 } 24
ArrayList vs. HashMap Ordning ArrayList: Elementene ligger i en gitt rekkefølge. HashMap: Elementene har ingen ordning. 25
ArrayList vs. HashMap Ordning ArrayList: Elementene ligger i en gitt rekkefølge. HashMap: Elementene har ingen ordning. 25
ArrayList vs. HashMap Ordning ArrayList: Elementene ligger i en gitt rekkefølge. HashMap: Elementene har ingen ordning. Søking ArrayList: Må lete gjennom hele lista. HashMap: Kan hente ut objektet direkte vha. nøkkelen. 25
ArrayList vs. HashMap Ordning ArrayList: Elementene ligger i en gitt rekkefølge. HashMap: Elementene har ingen ordning. Søking ArrayList: Må lete gjennom hele lista. HashMap: Kan hente ut objektet direkte vha. nøkkelen. 25
26
Innhold Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse Oppsummering 27
Ros og ris 28
Innhold Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse Oppsummering 29
Spørsmål 30
Spørsmål 1 Hvilke av disse uttrykkene er lovlige i Java? String string = String string ; int[] binarynumber = 0100110001; Hashmap<int,String> h = new Hashmap<int,String>(); boolean b = (true == false); 31
Spørsmål 1 Hvilke av disse uttrykkene er lovlige i Java? String string = String string ; int[] binarynumber = 0100110001; Hashmap<int,String> h = new Hashmap<int,String>(); boolean b = (true == false); 31
Spørsmål 2 Hvilken verdi har int-variabelen tall etter løkken under? 1 int tall = 0; 2 while (tall < 10) { 3 for (int i = 10; i > 0; i--) { 4 tall = tall + 2; 5 } 6 } 32
Spørsmål 2 Hvilken verdi har int-variabelen tall etter løkken under? 1 int tall = 0; 2 while (tall < 10) { 3 for (int i = 10; i > 0; i--) { 4 tall = tall + 2; 5 } 6 } 20 32
Spørsmål 3 Anta at følgende variable er deklarert: 1 String a = "kurator"; 2 String b = "kur"; 3 String c = "ator"; Hvilke av følgende bolske uttrykk blir true? a == (b+c) a.equals(b+c) a.compareto(b) < 0 a.indexof(c) == 4 33
Spørsmål 3 Anta at følgende variable er deklarert: 1 String a = "kurator"; 2 String b = "kur"; 3 String c = "ator"; Hvilke av følgende bolske uttrykk blir true? a == (b+c) a.equals(b+c) a.compareto(b) < 0 a.indexof(c) == 4 33
Oppgave 4 Skriv en metode int storst(int[] array) som finner den største verdien i arrayen array. 34
Oppgave 4 Skriv en metode int storst(int[] array) som finner den største verdien i arrayen array. 1 public int storst(int[] array) { 2 int maks = array[0]; 3 for (int i = 1; i < array.length; i++) { 4 if (array[i] > maks) { 5 maks = array[i]; 6 } 7 } 8 9 return maks; 10 } 34
Lykke til i INF1010! :) 35