Oppgave 2
Datatypen char er egentlig ikke en heltallstype, men fungerer som det i mange sammenhenger. Variabler av typen char kan inngå i logiske og aritmetiske utrykk. For eksempel slik:
char a = 'A'; char b = 'B'; int c = a - b; // verdien til c er nå -1
Hvis to tegn sammenlignes ved hjelp av en logisk operator, er det tegnenes ascii-verdier som sammenlignes. Det betyr at av to tegn er det "størst" som alfabetisk kommer sist av de to. En maks-metode for en char-tabell kan dermed lages slik:
public static int maks(char[] c) { int m = 0; // indeks til "største" tegn char maksverdi = c[0]; // "største" tegn for (int i = 1; i < c.length; i++) if (c[i] > maksverdi) { maksverdi = c[i]; // "største" tegn oppdateres m = i; // indeks til "største" tegn oppdaters } return m; // returnerer posisjonen til "største" tegn } // maks
Oppgave 3
public static int maks(Integer[] a) { int m = 0; // indeks til største verdi Integer maksverdi = a[0]; // største verdi for (int i = 1; i < a.length; i++) if (a[i].compareTo(maksverdi) > 0) { maksverdi = a[i]; // største verdi oppdateres m = i; // indeks til største verdi oppdaters } return m; // returnerer posisjonen til største verdi } // maks
Oppgave 4
Hvis a
er mindre enn b
, vil a.compareTo(b)
returnere -1, hvis de er like, vil metodekallet returnere 0 og hvis
a
er større enn b
, blir det 1.
Oppgave 5
Metoden compareTo i class String virker slik: Hvis strengen s er forskjellig fra strengen t, s ikke utgjør første del av t og t ikke utgjør første del av s, så finnes det en første posisjon der s og t har forskjellige tegn. La f.eks. s = "Jasmin" og t = "Jason". Første posisjon der disse er forskjellige, er posisjon 3 siden tegnet m er forskjellig fra tegnet o. (Obs. første posisjon i en streng er 0). Metoden compareTo returnerer da differansen mellom ascii-verdiene til disse to tegnene. I dette tilfellet vil s.compareTo(t) returnere 'm' - 'o' = -2.
Hvis s og t er gitt slik som i oppgaveteksten, dvs. s = "A" og t = "B", vil s.compareTo(t) returnere verdien 'A' - 'B' = -1.
Problemet med Æ, Ø og Å er at de er plassert i feil innbyrdes rekkefølge i både UTF-8, Unicode og ISO-8859-1. Se Avsnitt 1.4.9.
Vi får et spesialtilfelle hvis s utgjør første del av t eller t første del av s. F.eks. s = "Karianne" og t = "Kari". Da vil s.compareTo(t) returnere differansen mellom de to strengenes lengder. I dette tilfellet blir det 8 - 4 = 4. Legg også merke til at s eller t eller begge, kan være tomme. Hvis f.eks. s = "" og t = "Petter", utgjør egentlig s første del av t. Dermed vil s.compareTo(t) returnere verdien 0 - 6 = -6.
Til slutt får vi at s.compareTo(t) vil returnere 0 hvis s og t har nøyaktig samme innhold.
Flg. metode sammenlign er kodet slik at hvis s og t er to vilkårlige tegnstrenger, vil s.compareTo(t) og sammenlign(s,t) alltid gi samme returverdi:
public static int sammenlign(String s1, String s2) { int n1 = s1.length(); // lengden til s1 int n2 = s2.length(); // lengden til s2 int n = n1 < n2 ? n1 : n2; // den minste av n1 og n2 for (int i = 0; i < n; i++) { char c1 = s1.charAt(i); char c2 = s2.charAt(i); if (c1 != c2) return c1 - c2; } return n1 - n2; }
Oppgave 6
Resultatet blir -1 siden false er «mindre enn» true.