### University of Washington Computer Science & Engineering 142 (Computer Programming I), Summer 2005Sample Final Exam Key

1.   Expressions

Expression                                          Value

---------------------------------------------------------

13 / 2 * 3 % 5 - 1                                  2

2 >= 1 + 3 || !(p.getX() < p.getY())                true

30 == (6 * words.length + 1)                        false

13 % 5 + 5 * Math.min(p.getX(), p.getY()) / 4       6.75

words[1] + 3 * 4 + words[2] + 1 + 2                 "how12are12"

2.   Array Mystery

Method Call                   Resulting Array

---------------------------------------------

mystery(a1)                   {8}

mystery(a2)                   {2, 7, 21}

mystery(a3)                   {3, 0, 4, 8, 19}

mystery(a4)                   {0, 1, 3, 7, 14, 26}

mystery(a5)                   {7, 4, 1, 13, 16}

3.   Inheritance and Polymorphism

squid

creature 1

tentacles

BIG!

spout

creature 2

ocean-dwelling

creature 1

creature 2

ocean-dwelling

warm-blooded

creature 2

4.   File Processing

public static void processData(Scanner input) {

while (input.hasNextLine()) {

String line = input.nextLine();

Scanner lineScan = new Scanner(line);

int sum = 0;

int count = 0;

while (lineScan.hasNextInt()) {

sum += lineScan.nextInt();

count++;

System.out.println("Sum of " + count + " = " + sum);

}

double average = (double) sum / count;

System.out.println("Average = " + average);

System.out.println();

}

}

5.   Arrays

public static void printNumber(int[] digits) {

for (int i = 0; i < digits.length; i++) {

if (i > 0 && (digits.length - i) % 3 == 0)

System.out.print(",");

System.out.print(digits[i]);

}

System.out.println();

}

6.   Arrays

public static int[] interleave(int[] list1, int[] list2) {

int[] result = new int[list1.length + list2.length];

int min = Math.min(list1.length, list2.length);

for (int i = 0; i < min; i++) {

result[2 * i] = list1[i];

result[2 * i + 1] = list2[i];

}

for (int i = min; i < list1.length; i++)

result[i + min] = list1[i];

for (int i = min; i < list2.length; i++)

result[i + min] = list2[i];

return result;

}

7.   Defining new types of objects (two solutions to constructor shown)

public LineSegment(int x1, int y1, int x2, int y2) {

this.p1 = new Point(x1, y1);

this.p2 = new Point(x2, y2);

}

// alternate solution

public LineSegment(int x1, int y1, int x2, int y2) {

this(new Point(x1, y1), new Point(x2, y2));

}

public double getSlope() {

if (p1.getX() == p2.getX()) {

throw new IllegalArgumentException();

}

return (double) (p2.getY() - p1.getY()) / (p2.getX() - p1.getX());

}