Key to CSE143 Midterm, Spring 2010 handout #21
1. Method Call Output Produced
------------------------------------------------
mystery(7); 7
mystery(38); 3, 2
mystery(749); 7, 1, 0
mystery(-6842); 6, 2, 1, 2
mystery(954023); 9, 2, 1, 0, 2, 0
2. One possible solution appears below.
public void parenthesize(String str, int n) {
if (n < 0) {
throw new IllegalArgumentException();
} else if (n == 0) {
System.out.print(str);
} else { // n > 0
System.out.print("(");
parenthesize(str, n - 1);
System.out.print(")");
}
}
3. One possible solution appears below.
public boolean hasOddEven() {
boolean odd = false;
boolean even = false;
ListNode current = front;
while (current != null && (!odd || !even)) {
if (current.data % 2 == 0) {
even = true;
} else {
odd = true;
}
current = current.next;
}
return odd && even;
}
4. Statement Output
------------------------------------------------------------
var1.method1(); Peak 1/Cliff 3/Peak 3
var2.method1(); Peak 1/Gorge 3
var3.method1(); Peak 1/Hill 3
var4.method1(); Peak 1/Gorge 3
var5.method1(); Peak 1/Peak 3
var6.method1(); compiler error
var1.method2(); compiler error
var2.method2(); Gorge 2
var3.method2(); compiler error
var1.method3(); Cliff 3/Peak 3
var2.method3(); Gorge 3
var3.method3(); Hill 3
((Gorge)var6).method1(); runtime error
((Cliff)var1).method1(); Peak 1/Cliff 3/Peak 3
((Cliff)var3).method2(); compiler error
((Cliff)var4).method1(); Peak 1/Gorge 3
((Gorge)var3).method2(); runtime error
((Hill)var3).method2(); Hill 2
((Cliff)var4).method3(); Gorge 3
((Peak)var6).method3(); Cliff 3/Peak 3
5. One possible solution appears below.
public static void mirror(Stack s) {
Queue q = new LinkedQueue();
while (!s.isEmpty())
q.enqueue(s.pop());
while (!q.isEmpty())
s.push(q.dequeue());
while (!s.isEmpty())
q.enqueue(s.pop());
for (int i = 0; i < q.size(); i++) {
int n = q.dequeue();
s.push(n);
q.enqueue(n);
}
while (!s.isEmpty())
q.enqueue(s.pop());
while (!q.isEmpty())
s.push(q.dequeue());
}
6. One possible solution appears below.
public ArrayIntList reverseCopy() {
ArrayIntList result = new ArrayIntList(elementData.length);
for (int i = 0; i < size; i++) {
result.elementData[i] = elementData[size - 1 - i];
}
result.size = size;
return result;
}
Stuart Reges
Last modified: Fri Sep 16 16:16:07 PDT 2011