Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Exempel på tentafrågor i Java Först följer frågor av flervalstyp. Frågorna är inte ordnade efter svårighetsgrad. 1. Skillnaden mellan typerna int och long är att a) I variabler av typ long kan man lagra flyttal, i int- variabler bara heltal b) I long kan man lagra både heltal och flyttal och det kan man inte i int c) I long kan man lagra större heltal än i int d) Ingen av a) b) eller c) är rätt 2. Följande kodavsnitt exekveras i en main-metod. Hur många gånger skrivs texten Java-student ut? for (int i=0; i<10; i++) System.out.println(''Java-student''); a) 0 gånger b) 9 gånger c) 10 gånger d) Inget av a) b) eller c) är rätt 3. En variabel som används i en metod måste vara a) En klassvariabel b) En instansvariabel c) En lokal variabel i metoden eller en formell parameter till metoden d) a), b) eller c) e) a) eller c) f) b) eller c) 4. Studera följande kodavnsitt int x = 0; while (x < 10) x++; System.out.println(x); Vilket av följande påståenden är korrekt? a) 10 olika värden på x kommer att skrivas ut b) Inga värden på x kommer att skrivas ut c) 9 olika värden på x kommer att skrivas ut d) Ett värde på x kommer att skrivas ut e) 10 likadana värden på x kommer att skrivas ut f) Koden kommer att resultera i en oändlig loop (repetition) 1
5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har variablerna x och y efter nedanstående kodavsnitt? int x = 0, y = 0; if (x > 0) y = 1; else x = 7; a) x=0, y=0 b) x=7, y=0 c) x=0, y=1 d) x=7, y=1 7. Deklarationen och initieringen int[] resultat = new int[10]; reserverar plats i minnet för a) en referensvariabel och 10 heltalsvariabler b) endast 10 heltalsvariabler c) endast en referensvariabel 8. Antag att klassen Skrivning har en klassmetod som heter skrivstatistik och att tyskaht02 är en instans av klassen Skrivning. Metoden skrivstatistik anropas från en annan klass än Skrivning med a) tyskaht02.skrivstatistik(); b) Skrivning.skrivStatistik(); c) skrivstatistik(); 9. Om metoden visaresultat är en instansmetod i klassen Skrivning och tyskaht02 är en instans av Skrivning så anropas metoden visaresultat med a) tyskaht02.visaresultat(); b) Skrivning.visaResultat(); c) visaresultat(); 2
10. Vilket värde har b efter nedanstående kod är exekverad? int x = 1; boolean b = (x == 1); a) b = 0 b) b = 1 c) b = true d) b = false 11. Med hjälp av ordet extends kan man skapa en ny a) instans b) superklass c) subklass 12. En knapp, dvs en instans av klassen Button, kan orsaka en händelse (event) i Java förutsatt att a) Knappen är deklarerad i en klass som ärver från Applet b) Knappen är deklarerad i en metod som heter actionperformed c) En klass som implementerar ActionListener är registrerad (kopplad) som lyssnare till knappen. 13. Efter satserna int[] pp = 83, 85, 89, 54, 55; int[] qq = pp; så är värdet av qq [2] a) 89 b) 0 c) odefinierat, man får felavbrott om man försöker använda qq [2] 14. Ett uttryck i Java av typen yyy.xxx() måste vara a) en deklaration b) ett metodanrop c) en uppmaning att klassen xxx skall ärva från klassen yyy d) otillåtet 15. Vad händer om man stavar fel i ett Javaprogram och skriver doble i stället för double vid deklaration av en flyttalsvarabel? doble yta = 0; a) Programmet går inte att kompilera, och därmed inte att köra. b) Det går bra eftersom doble är väldigt likt double. c) Det går att kompilera och köra programmet så länge man inte använder värdet av variabeln yta. 3
16. Med hjälp av ordet new kan man skapa en ny a) instans b) superklass c) subklass 17. Tilldelningssatsen double y = (5 + 3 + 8/2)/10; ger y värdet a) 0 b) 0.8 c) 1.2 18. Vilket av följande påståenden om metoder är sant? a) En void-metod måste ha en return-sats b) En void-metod får ha en return-sats c) En void-metod får inte ha en return-sats 19. Metoden kub deklareras int kub(int x) return x*x*x; Vilka två av följande alternativ är korrekta anrop av metoden kub (inom samma klass som kub är definierad)? a) int y=kub(5); b) kub(7, 11); // för att få både 7 3 och 11 3 c) int z = kub(kub(4)); d) int x = 13; kub(); // för att få 13 3 20. Metoden add kan anropas i t.ex. en Applet och används för att a) lägga in egna metoddefinitioner i appleten. b) addera flyttalsvariabler i appleten c) lägga grafiska komponenter (t.ex. knappar och scrollbars) i appletfönstret. 21. Vilka värden har variablerna u och w efter kodavsnittet? int u=1, w=0; if (u>0) u = u + 1; if (w >=0) w = w + 5; w = w + 1; a) u=2, w=0 b) u=2, w=5 c) u=2, w=6 d) u=1, w=0 4
22. Följande uttryck kan användas för slumptalsgenerering. Vilken syfte har (int) i uttrycket? int slumptal = 1 + (int) (Math.random()*6); a) Att skapa ett slumptal b) (int) är en skalfaktor c) Att göra ett heltal av ett flyttal 23. Vilka värden kan variabeln slumptal i fråga 22 anta? a) 1,2,3,4,5 eller 6 b) 0,1,2,3,4,5 eller 6 c) 1,2,3,4,5,6 eller 7 d) 0 eller 1 e) endast 0 24. I Java finns automatisk garbage collection (skräpsamling). Det innebär att a) om ett program använder minne över en viss gräns så kommer en del objekt att städas bort. b) om det inte längre finns någon referens till ett objekt så kommer objektet att städas bort. c) om det finns flera referenser till samma objekt så kommer de överflödiga att städas bort 25. Klassen Object har en särskild ställning i Java nämligen: a) Alla klasser i Java ärver från Object utan att det behöver skrivas ut b) Alla biblioteksklasser ärver från Object men inte de klasser man skriver själv c) Klassen Object kan ärva från vilken klass som helst. 26. Uttrycket String test = ''1234'' + ''2121''; är a) inte tillåtet då man inte kan addera uttryck av typ String b) tillåtet och ger att test får värdet 3355 c) tillåtet och ger att test får värdet 12342121 27. Vilka värden har variablerna u och w efter kodavsnittet? int u=0, w=0; if (u>0) u = u + 1; if (w >=0) w = w + 5; w = w + 1; a) u=2, w=0 b) u=2, w=5 c) u=2, w=6 d) u=0, w=0 5
28. Tilldelningssatsen int y = 24/2*3; ger y värdet a) 36 b) 4 c) 15 29. Modifieraren final framför ett variabelnamn betyder att a) Variabeln får tilldelas värde en gång och sedan inte ändras b) Variabeln måste stå sist bland deklarationerna i klassen c) Variabeln är en klassvariabel och tillgänglig utan att instanser av klassen skapats. 30. Javaprogram skrivs som Applet eller application (fristående program). När man vill skriva ett program som läser egna data från fil bör man a) skriva en Applet därför att fristående program kan av säkerhetsskäl inte komma åt filer på den dator de exekveras b) skriva ett fristående program därför att Applets kan av säkerhetsskäl inte komma åt filer på den dator de exekveras c) inte låta filhanteringen avgöra vilket man väljer Svar till flervalsdelen 1) c 2) c 3) d 4) d 5) d 6) b 7) a 8) b 9) a 10) c 11) c 12) c 13) a 14) b 15) a 16) a 17) c 18) b 19)aochc 20) c 21) c 22) c 23) a 24) b 25) a 26) c 27) d 28) a 29) a 30) b Programmeringsuppgifter. P1) Man vill skriva en Applet som ritar en rad med 10 st stjärnor diagonalt över Appletfönstret, från övre vänstra hörnet till nedre högra hörnet. Stjärnorna skall dessutom minska i storlek så att stjärnan i övre vänstra hörnet är störst och stjärnan i nedre högra hörnet är minst. Metoden drawstar i appleten nedan ritar en stjärna. Stjärnans position anges i parametrarna nr 2 och 3och dess storlek i den sista parametern. Komplettera paintmetoden så att den önskade stjärnraden skrivs ut. Obs!! Ni behöver inte räkna ut positioner så att ett fönster av någon viss stolek täcks. Det viktiga är bara att positionerna ändras i diagonal riktning. Negativa värden på positioner eller storlek medför dock poängavdrag. public class StarDiagonal extends Applet public void paint(graphics g) // Här skall svaret på uppgiften skrivas in private void drawstar(graphics g, int x, int y, int size) // Här ligger satser som ritar en stjärna med storlek size // i position x, y 6
P2) Ett gammaldags engelskspråkigt textbehandlingsprogram kan inte hantera bokstäverna Å, Ä eller Ö. För att kunna använda detta program vill vi bl.a. skriva kod som byter ut Å och Ä mot A och Ö mot O i en teckenvektor. Vi antar att vi bara har stora bokstäver i våra texter. a) Skriv först en metod som har ett tecken som parameter och returnerar A om indata är Å eller Å, O om indata är Ö samt returnerar indatatecknet självt i annat fall. b) Skriv kod som går igenom en teckenvektor som är deklarerad char[] mintext och gör bokstavsbytena enligt ovan. Antag att variabeln mintext innehåller en text. Antalet tecken i texten kan läsas av med mintext.length. Om du inte kan lösa uppgift a) är det tillåtet att lösa hela uppgiften utan metoden från a). Det ger ett litet poängavdrag. P3) Skriv satser i Java somdeklarerar en referensvariabel för en N N- matris. Antag att N redan är deklarerad och har ett värde. Skriv sedan satser som ger matrisen värden enligt följande exempel, N =5här. 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 P4) En polygon är en följd av punkter i xy-planet. För behandling av polygoner kan man använda klasserna Punkt och Polygon (vi struntar för tillfället i att det finns standardklasser i Java för hantering av punkter och polygoner). Klassen Punkt skall ha följande gränssnitt: Punkt(x, y) konstruktorn, skapar en punkt int visax() ger punktens x-koordinat int visay() ger punktens y-koordinat double distans(punkt p) ger avståndet från punkten till en annan punkt p a) Skriv klassen Punkt. Vid beräkningen av avståndet kan du ha nytta av metoden för kvadratrotsberäkning. Denna heter sqrt och är en klassmetod i standardklassen Math. Här är en del av gränssnittet till klassen Polygon (fortsätter på nästa sida): Polygon(int[] x, int[] y) konstruktorn, skapar en polygon en vektor med x-koordinater och en vektor med y-koordinater 7
double omkrets () ger polygonens omkrets double mindist (Punkt p) ger minsta avståndet från punkten p till Polygonen P4 b) Låt polygonen representeras internt med en vektor av instanser av klassen Punkt. Skriv deklarationen av den instansvariabel som lagrar polygonens punkter samt skriv konstruktorn för klassen Polygon. P4 c) Skriv metoden omkrets P4 d) Skriv metoden mindist Lösningar till programmeringsuppgifterna P1) De absoluta värdena för stjärnornas positioner och storlekar är förstås inte viktiga. Det viktiga är att storleken minskar (och inte går under 0) samt att både x- och y-positionerna ökar. public void paint(graphics g) int size = 50; for (int i = 0; i< 10; i++) drawstar(g, i*40, i*40, size); size -= 4; P2 a) P2 b) P3) char toenglish (char c) if (c == 'Å' c == 'Ä') return 'A'; else if (c=='ö') return 'O'; else return c; for (int i = 0; i< mintext.length; i++) mintext[i] = toenglish(mintext[i]); int[][] m = new int[10][10]; for (int i=0; i<10; i++) for (int j=0; j<10; j++) m[i][j] = (i+1)*(j+1); 8
P4 a) class Punkt private int x, y; Punkt(int ix, int iy) x = ix; y = iy; public int visax () return x; public int visay () return y; public double distans (Punkt p) double dx = x - p.x; double dy = y - p.y; return Math.sqrt(dx*dx + dy*dy); // P4 b) private Punkt[] poly; Polygon (int[] x, int[] y) poly = new Punkt[x.length]; for (int i=0; i<x.length; i++) poly[i] = new Punkt(x[i], y[i]); // P4 c) public double omkrets() double om = 0; for (int i=0;i<poly.length-1; i++) om += poly[i].distans(poly[i+1]); om += poly[poly.length-1].distans(poly[0]); return om; // P4 d) public double mindist(punkt p) double dmin=100000000, d=0; for (int i=0; i<poly.length; i++) d = p.distans(poly[i]); if (d<dmin) dmin = d; return dmin; 9