Oppgave 1
Double x = new Double(3.14); // gammel måte Double y = 3.14; // autoboksing double d = x; // avboksing Boolean b = new Boolean(true); // gammel måte Boolean c = true; // autoboksing Character[] a = {'A','B','C','D','E'}; // autoboksing char tegn = a[2]; // avboksing
Oppgave 2
Noen eksempler:
String s = Integer.toUnsignedString(-1); String t = Integer.toUnsignedString(Integer.MIN_VALUE); System.out.println(s + " " + t); // 4294967295 2147483648 int k1 = -1 / 10; // kvotient k1 = -(1/10) = 0 int k2 = Integer.divideUnsigned(-1,10); // kvotient System.out.println(k1 + " " + k2); // 0 429496729 int d1 = Integer.compare(-1, 1); int d2 = Integer.compareUnsigned(-1, 1); System.out.println(d1 + " " + d2); // -1 1
Metodekallet Integer.compare(-1, 1);
returnerer -1. Det er slik det skal være siden -1 er mindre 1. Men metodekallet
Integer.compareUnsigned(-1, 1);
returnerer 1. Binærkoden til -1 har 32 1-biter. Men det er tallet 4294967295 når
vi ser bort fra fortegn. Men 4294967295 er større enn 1. Dermed returnerer metoden 1.
Oppgave 5
public static void skriv(Object[] a, int fra, int til) { fratilKontroll(a.length,fra,til); for (int i = fra; i < til; i++) System.out.print(a[i] + " "); } public static void skriv(Object[] a) { skriv(a,0,a.length); } public static void skrivln(Object[] a, int fra, int til) { skriv(a,fra,til); System.out.println(); } public static void skrivln(Object[] a) { skrivln(a,0,a.length); }
public static void bytt(Object[] a, int i, int j) { Object temp = a[i]; a[i] = a[j]; a[j] = temp; }
Oppgave 7
double[] d = {5.7,3.14,7.12,3.9,6.5,7.1,7.11}; Double[] b = new Double[d.length]; // hvert element b lages som en instans av class Double for (int i = 0; i < b.length; i++) b[i] = d[i]; // autoboksing Tabell.innsettingssortering(b); Tabell.skrivln(b); // se Oppgave 5
Oppgave 8
Hvis du har tilgang til begge metodene i et program, vil metodekallet f(1,1);
føre til at kompilatoren gir en feilmelding som denne: Reference to f is ambiguous.
Both method f(int,Integer) og method f(Integer,int) match
. Det kommer av at hvis den første f-en
skal brukes, må det andre 1-tallet konverteres til en Integer
. Hvis derimot den andre f-en skal brukes,
må de første 1-tallet konverteres til en Integer
. Det ene er ikke noe riktigere enn det andre. Derfor
er det tvetydig.
Hvis en av metodene tas vekk, vil
metodekallet f(1,1);
bli utført. Det er det samme hvilken som tas vekk.
En kan bestemme hvem av dem som skal brukes ved å konvertere ett av tallene til en Integer
:
f(1, (Integer)1); // nå brukes f(int a, Integer b) f((Integer)1,1); // f(Integer a, int b)
Oppgave 9
public static void main(String... args) { BigInteger[] b = new BigInteger[10]; b[0] = new BigInteger("12345678987654321"); b[1] = new BigInteger("12121212121212121"); b[2] = new BigInteger("12312312312312312"); b[3] = new BigInteger("98765432123456789"); b[4] = new BigInteger("11111111111111111"); b[5] = new BigInteger("88888888888888888"); b[6] = new BigInteger("98989898989898989"); b[7] = new BigInteger("98798798798798798"); b[8] = new BigInteger("99988877766655544"); b[9] = new BigInteger("98899889988998899"); int k = Tabell.maks(b); System.out.println(b[k]); System.out.println(""); Tabell.innsettingssortering(b); for (BigInteger x : b) System.out.println(x); }
Oppgave 10
public static void main(String... args) { BigDecimal[] b = new BigDecimal[5]; b[0] = new BigDecimal("11111111111111.1"); b[1] = new BigDecimal("11111111111111.11111"); b[2] = new BigDecimal("11111111111111.11"); b[3] = new BigDecimal("11111111111111.1111"); b[4] = new BigDecimal("11111111111111.111"); int k = Tabell.maks(b); System.out.println(b[k]); System.out.println(""); Tabell.innsettingssortering(b); for (BigDecimal x : b) System.out.println(x); }