Key to CSE143 Midterm, Winter 2016 handout #20
1. Method Call Output Produced
------------------------------------------------
mystery(7); .7
mystery(246); 642.
mystery(195); .195
mystery(1234); 42.13
mystery(29548); 842.95
2. One possible solution appears below.
public void printPattern(int n) {
if (n < 0) {
throw new IllegalArgumentException();
} else if (n > 0) {
if (n == 1) {
System.out.print(".");
} else if (n / 2 % 2 == 0) {
System.out.print("[");
printPattern(n - 2);
System.out.print("]");
} else {
System.out.print("(");
printPattern(n - 2);
System.out.print(")");
}
}
}
3. Statement Output
------------------------------------------------------------
var1.method2(); compiler error
var2.method2(); Can 2/Can 3
var3.method2(); Can 2/Lamp 3
var4.method2(); Can 2/Clock 3
var5.method2(); compiler error
var6.method2(); Can 2/Clock 3
var1.method3(); compiler error
var2.method3(); Can 3
var3.method3(); Lamp 3
var4.method3(); Clock 3
var5.method3(); compiler error
var6.method3(); Clock 3
((Lamp)var6).method1(); runtime error
((Can)var1).method1(); compiler error
((Can)var1).method2(); Can 2/Bear 3/Can 3
((Bear)var1).method3(); Bear 3/Can 3
((Bear)var6).method1(); Bear 1
((Clock)var1).method1(); runtime error
((Clock)var4).method2(); Can 2/Clock 3
((Bear)var3).method1(); runtime error
4. before after code
-----------------------+-----------------------+-------------------------------
p->[1]->[2] | p->[1]->[2]->[3] | p.next.next = q;
| | q = null;
q->[3] | q |
-----------------------+-----------------------+-------------------------------
p->[1]->[2]->[3] | p->[1]->[3] | q = p.next;
| | p.next = p.next.next;
q | q->[2] | q.next = null;
-----------------------+-----------------------+-------------------------------
p->[1]->[2] | p->[2]->[3] | p.next.next = q;
| | ListNode temp = p.next;
q->[3]->[4] | q->[1]->[4] | p.next = q.next;
| | q = p;
| | p = temp;
| | p.next.next = null;
-----------------------+-----------------------+-------------------------------
p->[1]->[2]->[3] | p->[3]->[1] | ListNode temp = p.next.next;
| | temp.next = p;
| | q.next.next = p.next;
q->[4]->[5] | q->[5]->[2]->[4] | p.next = null;
| | p = temp;
| | q.next.next.next = q;
| | q = q.next;
| | q.next.next.next = null;
-----------------------+-----------------------+-------------------------------
5. One possible solution appears below.
public void mirror(Stack s) {
Queue q = new LinkedList();
while (!s.isEmpty())
q.add(s.pop());
while (!q.isEmpty())
s.push(q.remove());
while (!s.isEmpty())
q.add(s.pop());
for (int i = 0; i < q.size(); i++) {
int n = q.remove();
s.push(n);
q.add(n);
}
while (!s.isEmpty())
q.add(s.pop());
while (!q.isEmpty())
s.push(q.remove());
}
6. One possible solution appears below.
public void removeRange(int start, int stop) {
if (start < 0 || stop > size || start > stop) {
throw new IllegalArgumentException();
}
int delta = stop - start;
for (int i = stop; i < size; i++) {
elementData[i - delta] = elementData[i];
}
size -= delta;
}
Stuart Reges
Last modified: Fri Sep 16 16:16:07 PDT 2011