Forkurs INF1010 Dag 3 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Eivind Storm Aarnæs (eivinsaa@math.uio.no) Institutt for Informatikk, 14. januar 2015
Forkurs INF1010 - dag 3 Strenger Fil-I/O Unntakshåndtering ArrayList HashMap Spørreundersøkelse Oppsummering 2
3
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 Vi definerer String a; String b; 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?)... og mange flere. Sjekk doc 6
Oppgave Gitt en String, lag kode som teller antall forekomster av bokstaven r i denne Stringen. 7
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 } 9
Skrive linjevis til fil doc 1 import java.io.*; 2 try { 3 PrintWriter p = new PrintWriter(new FileWriter("utfil.txt")); 4 for (int i = 0; i < 20; i++) { 5 String tekst = String.format("%4d\n", i); 6 p.println(tekst); 7 } 8 p.close(); 9 } catch (IOException e) { 10 System.out.println("Kan ikke skrive til fil"); 11 } 10
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. 12
Try/catch 1 try { 2... 3 } catch (...Exception e) { 4... 5 } 13
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("tuva"); 3 liste.add(3, "Andreas"); Med heltall: 1 ArrayList<Integer> tall = new ArrayList<Integer>(); 15
LinkedList Liste som lagrer elementer ved å lage en pekerkjede. Har ingen fast størrelse, men utvider seg når nye elementer blir satt inn. Kan bare lagre objekttyper. Importeres fra java.util. 1 LinkedList<String> liste = new LinkedList<String>(); 2 liste.add("tuva"); 3 liste.add("andreas"); Med heltall: 1 LinkedList<Integer> tall = new LinkedList<Integer>(); 16
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 17
Iterasjon 1 ArrayList<String> liste = new ArrayList<String>(); 2 for (String s: liste) { 3 System.out.println(s); 4 } 18
19
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("tuva", new Person("Tuva")); 4 Person tuva = personer.get("tuva"); 21
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 22
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 } 23
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. 24
25
Ros og ris 27
Spørsmål 29
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); 30
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 31
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 32
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 } 33
Lykke til i INF1010! :) 34