L SNINGSF RSLAG TILL TENTAMEN PROGRAMMERING I JAVA, 5P. 990810 Uppgift 1 (2 pošng) public class Earth public String question; public static int answer; public Earth(String question, int answer) this.question = question; this.answer = answer; //constructor Earth public static void main(string[] args) Earth gaia = new Earth("What do you get when you "+ "multiply six by nine? ",54); Earth terra = new Earth("What do you get when you "+ "multipy six by seven? ",42); System.out.println(gaia.question+" "+gaia.answer); System.out.println(terra.question+" "+terra.answer); // main // class Earth Attributet answer Šr deklarerad static vilket innebšr att den delas av samtliga objekt av denna klass. Earth gaia = new Earth("What do you get when you "+"multiply six by nine? ",54); sštter answer till 54 och Earth terra = new Earth("What do you get when you"+"multipy six by seven? ",42); sštter answer till 42. Eftersom answer delas av alla objekt ( hšr gaia och terra) sœ ger bœda utskrifterna naturligtvis 42. UME UNIVERSITETÊ901Ê87ÊÊUME ÊÊÊTel.:Ê090-786 77 08ÊÊÊFax: 090-786Ê61Ê26ÊÊÊe-mail:Êmarie@cs.umu.se
Uppgift 2 (1+2+1=4 pošng) Besvara kortfattat : a) Vad Šr en konstant i Java, hur skiljer den sig frœn en variabel? En Java konstant deklareras med typ och modifieraren final, samt tilldelas ett všrde. Detta všrde kan sedan inte Šndras under programmets gœng. En variabel dšremot Šr bara begršnsad av sin typ och fœr manipuleras godtyckligt under exekveringen ( sœ lšnge inte typreglerna bryts). b) Fšrklara skillnaden mellan formella och aktuella parametrar. Formell parameter : definierar ett lokalt namn i en metod fšr ett všrde som kommuniceras till metoden. Aktuell parameter : det všrde eller den variabel med vilket en metod anropas. c) Fšrklara begreppet prioritetsordning i samband med operatorer. Prioritetsordningen bland operatorerna avgšr hur ett uttryck evalueras. Regler bestšmmer i vilken ordning operatorerna skall utfšras och om de har samma prioritet vilken som utfšrs fšrst. Uppgift 3 (1+1+1+1=4 pošng) Beskriv den verkan modifieraren har fšr : a) En public metod kan nœs av vem som helst utanfšr och innanfšr klassen b) En private metod Šr bara tillgšnglig inom den egna klassen c) En static variabel Šr knuten till klassen och dšrfšr gemensam fšr alla objekt i klassen. d) En static metod Šr ocksœ knuten till klassen och kan anropas via klassnamnet utan att nœgot objekt skapats explicit. Uppgift 4 (1+1+1+1+2+2+2+2+1=13 pošng) UtgŒ frœn fšljande klassdefinitioner : public class ListNode protected Object myvalue; protected ListNode next; public ListNode(Object o) myvalue = o; next = null; // ListNode-constructor public ListNode(Object o, ListNode nlist) myvalue = o; next = nlist; // ListNode-constructor 2 (8)
public ListNode getnext() return next; // getnext public Object getvalue() return myvalue; // getvalue // class ListNode public class List private ListNode head; // First node private ListNode tail; // Last node private int length; // Number of nodes currently in list public List() length = 0; head = null; tail = null; // List-constructor //various other methods go here É // class List Fšr att gšra List till en anvšndbar generell liststruktur behšver man en uppsšttning servicemetoder. Din uppgift blir att tillhandahœlla implementationen fšr nœgra tšnkbara : a) public Object getfirst() // returnerar det första objektet i listan. return head.getvalue(); // method getfirst b) public Object getlast() // returnerar det sista objektet i listan. return tail.getvalue(); // method getlast c) public int getlength() // returnerar antalet element i listan. return length; // method getlength d) public void appendel(object el) //lägger till ett element sist i listan if (getlength() == 0) head = new ListNode(el); tail = head; else tail.next = new ListNode(el); tail = tail.next; 3 (8)
length++; // method appendel e) public Object atindex(int index) //returnerar objektet med det angivna indexet. ListNode temp = head; for (int i = 1; i <= index; i++) temp = temp.getnext(); return temp.getvalue(); // method atindex f) public void insertat(object el,int index) //skjuter in elementet på angiven plats i listan och utökar därmed listan. if ( index <= 1 ) // Insert as first element of the list head = new ListNode(el, head); length++; else if ( index >= getlength()) // Insert as last element of the list else // method insertat appendel(el); ListNode before = head; for (int i = 1; i < index-1; i++) before = before.getnext(); //Now before is positioned at index-1 ListNode after = before.getnext(); before.next = new ListNode(el, after); length++; 4 (8)
g) public int listtotal() // summerar alla heltalselement i listan och returnerar summan. ListNode temp = head; int sum = 0; for (int i = 1; i <= length; i++) sum = sum + ( (Integer) temp.getvalue() ).intvalue(); temp = temp.getnext(); return sum; // method listtotal h) public Object[] toarray() //går igenom listan och returnerar ett fält av Object med motsvarande innehåll. Object[] temparray = new Object[getLength()]; ListNode temp = head; for (int i = 1; i <= length; i++) temparray[i-1] = temp.getvalue(); temp = temp.getnext(); return temparray; // method toarray i) Visa med en figur vad som hšnder i fšljande kodavsnitt ListNode head = null; int n = 5; head for (; n>=0; n--) head = new ListNode(new Integer(n),head); n=5 head 5 n=4 É head head 4 5 n=0 0 1 2 3 4 5 5 (8)
Uppgift 5 (2 pošng) UtgŒ ifrœn : public class Class1 public class Class2 extends Class1 public class Class3 extends Class2 NŒgonstans gšrs deklarationerna Class1 c1; Class2 c2; Class3 c3; Ange om fšljande tilldelningar dœ Šr korrekta eller ej a) c1 = c2; ok, eftersom c2 "Šr-en" class1 b) c2 = c1; fel c) c1 = c3; ok, eftersom c3 "Šr-en" class2 som "Šr-en" class1 d) c3 = c2; fel En referensvariabel frœn en superklass kan referera till ett objekt av nœgon av dess hšrledda subklasser. T.ex. Fordon Fordon c1; Bat c2; Eka c3; Bat Bil Tag Eka Ubat c1 kan nu referera till ett objekt av typen Bat, Bil, Tag, Eka eller Ubat c2 kan nu referera till ett objekt av typen Bat, Eka eller Ubat Uppgift 6 ( 4+11=15 pošng) a) Beskriv pœ svenska/engelska (inte Java!) pœ vilket sštt nedanstœende kan anvšndas i ditt GUI : Frame Layout-manager MemoryButtons ActionEvents 6 (8)
b) Skriv komplett kod fšr applikationen public class Memory import java.awt.*; import java.awt.event.*; /** * This is the classic game of Memory, implemented as minimally as * possible. It defaults to 4x4 and can't be changed, although * it would take very little to alter the source such that it could * be changed. * * @author Kaolin Fire Stockinger * @version %I%, %G% */ public class Memory implements ActionListener //constants for use elsewhere in the program private final static int XDIM=4, YDIM=4, NSHUFFLE=500; //to remember the first of a pair of clicked buttons private MemoryButton choice; //a minimal main method that doesn't handle arguments... public static void main(string[] args) new Memory(); //the bulk of the work happens here... public Memory() Frame f=new Frame("Memory Game"); choice=null; f.setlayout(new DynamicGridLayout(XDIM,YDIM)); //create a frame //initialize variables //pick a simple layout //enumerate all the ints that will be displayed int[] cards=new int[xdim*ydim]; for (int i=0;i<cards.length;i++) cards[i]=i/2; //randomly swap the ints around, easier and faster than doing it //with placed MemoryButtons... for (int i=0;i<nshuffle;i++) int a=(int)(math.random()*cards.length); int b=(int)(math.random()*cards.length); int temp=cards[a]; cards[a]=cards[b]; cards[b]=temp; //create MemoryButtons from the int[] and add them to the frame //at the appropriate spot for (int i=0;i<cards.length;i++) MemoryButton mb=new MemoryButton(cards[i]); mb.addactionlistener(this); f.add(mb,new Point(i%XDIM,i/YDIM)); //pack, give it a little offset, and make it so! f.pack(); f.setlocation(50,50); f.setvisible(true); 7 (8)
//handle the user's clicks public void actionperformed(actionevent evt) //flip up the button that was clicked on MemoryButton mb=(memorybutton)evt.getsource(); mb.flipup(); //if it's the first of the pair, just set 'choice', otherwise //if they're "equal", get rid of them, otherwise hide them again... if (choice == null) choice=mb; else if (mb.equals(choice)) mb.disappear(); choice.disappear(); else choice.flipdown(); mb.flipdown(); choice=null; // reset variable 8 (8)