Key to CSE143 Midterm, Winter 2006 handout #20 1. Method Call Value Returned ------------------------------------------ mystery(4, 19) 1 mystery(32, 56) 8 mystery(12, 20) 4 mystery(4, 18) 2 mystery(48, 128) 16 2. One possible solution appears below. public void writeSquares(int n) { if (n < 1) throw new IllegalArgumentException(); else if (n == 1) System.out.print(1); else if (n % 2 == 1) { System.out.print(n * n + ", "); writeSquares(n - 1); } else { writeSquares(n - 1); System.out.print(", " + n * n); } } 3. One possible solution appears below. public void printEvenOddSum() { int evenSum = 0; int oddSum = 0; boolean even = true; ListNode current = front; while (current != null) { if (even) evenSum += current.data; else oddSum += current.data; even = !even; current = current.next; } System.out.println("even sum = " + evenSum); System.out.println("odd sum = " + oddSum); } 4. Statement Output ------------------------------------------------------------ var1.method1(); compiler error var2.method1(); Rain 1 var1.method2(); Sleet 2/Snow 2/Sleet 3 var2.method2(); Rain 2 var3.method2(); Sleet 2/Snow 2/Fog 3 var4.method2(); compiler error var5.method2(); Sleet 2/Snow 2/Fog 3 var1.method3(); Sleet 3 var2.method3(); Snow 3 var3.method3(); Fog 3 var4.method3(); compiler error var5.method3(); Fog 3 ((Rain)var3).method1(); runtime error ((Fog)var5).method1(); Fog 1 ((Sleet)var3).method1(); compiler error ((Sleet)var3).method3(); Fog 3 ((Fog)var6).method3(); runtime error ((Snow)var4).method2(); Snow 2 ((Sleet)var4).method3(); runtime error ((Rain)var6).method3(); Snow 3 5. One possible solution appears below. public boolean isConsecutive(Stack<Integer> s) { if (s.size() <= 1) return true; else { Queue<Integer> q = new LinkedQueue<Integer>(); int prev = s.pop(); q.enqueue(prev); boolean ok = true; while (!s.isEmpty()) { int next = s.pop(); if (prev - next != 1) ok = false; q.enqueue(next); prev = next; } while (!q.isEmpty()) s.push(q.dequeue()); while (!s.isEmpty()) q.enqueue(s.pop()); while (!q.isEmpty()) s.push(q.dequeue()); return ok; } } 6. One possible solution appears below. public void printInversions() { for (int i = 0; i < size - 1; i++) for (int j = i + 1; j < size; j++) if (elementData[i] > elementData[j]) System.out.println("(" + elementData[i] + ", " + elementData[j] + ")"); }
Stuart Reges
Last modified: Fri Sep 16 16:16:07 PDT 2011