Q2.1. Bookshelf methods faster with LL than AL:
addFront(height) removeFrontQ2.2. Bookshelf methods slower with LL than AL:
getHeight(position)
Q3.1
unchecked exception
Q3.1
Why?
Because satisfying a precondition on a method is something the
programmer has control over; if the client doesn't satisfy the
precondition we want the program to crash so they fix the bug, rather
than writing a handler for that eventuality.
Q4.1
Opening file... File not found 10 Exiting program.
Q4.2
Opening file... Problem with file 10 Exiting program.
Q4.3 (Note: InputMismatchException is a subclass of NoSuchElementException [on code handout])
Opening file... Problem with file 10 Exiting program.
Q4.4
Opening file... 13 Exiting program.
Q5
A common small mistake was to use == on Strings and/or on Integers: you need
to use equals method instead. (We didn't deduct for this.)
public static Map<String, Integer> inBoth(Map<String, Integer> map1, Map<String, Integer> map2){ Map<String, Integer> result = new HashMap<>(); for (Map.Entry<String, Integer> entry1: map1.entrySet()) { String key1 = entry1.getKey(); Integer value1 = entry1.getValue(); Integer value2 = map2.get(key1); if (value2 != null && value1.equals(value2)) { // note: null test above is optional because of // the way equals is normally implemented result.put(key1, value1); } } return result; } }
Q6
public static void atRisk(Map<String, Integer> map) { map.forEach(new PrintIfLT60()); } class PrintIfLT60 implements BiConsumer<String, Integer> { public void accept(String key, Integer value) { if (value < 60) { System.out.println(key + " " + value); } } }
Approach 1: Test all three in one call
public static boolean hasTriple7(int[] nums) { return hasTriple7R(nums, 0); } // returns true iff the part of the array with index range // [start, nums.length) contains three adjacent 7s anywhere // PRE: start >= 0 private static boolean hasTriple7R(int[] nums, int start) { if (start + 3 > nums.length) { return false; } if (nums[start] == 7 && nums[start+1] == 7 && nums[start + 2] == 7) { return true; } return hasTriple7R(nums, start + 1); }
Approach 2: Keep a count of adjacent 7's and pass to recursive call
public static boolean hasTriple7(int[] nums) { return hasTriple7R(nums, 0, 0); } // if adj7s is 0 returns true iff the part of the array with index range // [start, nums.length) contains three adjacent 7s anywhere. // if adj7s is > 0 it will return true for the above condition, or if the // first k elements in above range are 7s, for the k such that (k + adj7s = 3) // PRE: start >= 0 and adj7s is in range [0, 3] public static boolean hasTriple7R(int[] nums, int start, int adj7s) { if (adj7s == 3) { return true; } if (start == nums.length) { return false; } if (nums[start] == 7) { adj7s++; } else { adj7s = 0; } return hasTriple7R(nums, start + 1, adj7s); }