Quiz 04

Quiz 04



Important notes:
  1. Do not start until you are instructed to do so!
  2. We suggest you do not use your browser's zoom feature. Instead...
  3. You will have 20 minutes once the proctor says to start.
  4. You will have brief additional time after we stop to scan and submit your solutions.

  5. Just before the quiz...
    1. Have a fully-charged smartphone and laptop, and still plug both in if possible
    2. Log into Gradescope on your phone
    3. Change the screen timeout setting on your phone to never, so your screen doesn't go black if you don't interact with your screen for a while.
      • iPhones: Settings / Display & Brightness / Auto-Lock / Never
      • Android: Settings / Display / Screen timeout / 10 minutes (or the maximum amount of time)
    4. Turn on Do Not Disturb (or otherwise turn off all notifications).
    5. Position your webcam so we can see:
      • Your desk
      • The paper you are working on
      • Your writing utensil(s)
      • Both of your hands
      • Your phone

  6. During the quiz:
    1. You may not ask questions during the exam.
      • If you are unsure how to interpret a problem, take your best guess.
      • If you feel a question is unfair because you could not ask a question about it, please email the instructor after the quiz and describe your concern. (We are working hard to make the questions extra clear this year, but we want to know when we fail.)
    2. You may not touch your laptop or webcam.
      • This includes muting yourself at any point; the proctors may mute you though.
    3. All of these must be visible at all times:
      • Your desk
      • The paper you are working on
      • Your writing utensil(s)
      • Both of your hands
      • Your phone, with the quiz webpage
    4. For any tech fails (laptop or internet stops working, etc.):
      1. Stop taking the quiz
      2. Email the instructor (rileyrd@cmu.edu) right away
      3. We will reply soon to set up a 1-on-1 oral quiz with the course faculty

  7. After the quiz:
    1. Follow all proctor instructions on how to end the quiz.
    2. If you finish early, wait patiently until the end of the quiz. (Note: Don't use your phone...)
    3. Keep everything in view (as noted above) until the proctor calls "time".
    4. When instructed, use your phone to scan your quiz and submit the PDF to Gradescope.
    5. After submitting to Gradescope, hold your phone up to the webcam to show the receipt.
    6. Even then, remain in quiz mode until the proctor calls "all clear"

1. Code From Picture [5 pts]

Consider the following image:

Assuming the Person class exists and has a constructor that takes name and age as arguments, write the appropriate lines of code to create the correct variables and objects that match what you see pictured above. Your code does not need to be inside of a method or a class.


2. Free Response [10 pts]

Consider a file containing words separated by spaces. The number of words per line is not fixed. You may assume that all lines will contain at least one word. Here are the contents of an example file, words.txt:

land spiders apparatus sweltering
thoughtless
modern wax colour
crack alike level smooth

Write the public method wordSearch which operates as follows:

/**
 * Search the given file for the specified word.
 * 
 * @param word     The word to search for.
 * @param filename The filename of the file to be searched
 * @return true if the word is in the file and false otherwise
 */

Consider the following examples:

wordSearch("land", "words.txt") returns true
wordSearch("gorilla", "words.txt") returns false
wordSearch("like", "words.txt") returns false
wordSearch("colour", "words.txt") returns true


3. Bug Hunting [5 pts]

Consider the following buggy code that raises an exception when executed:

public class DoubleBoxReturns {
    private double[] arr;
    private int numDoubles;

    public DoubleBoxReturns() {
        double[] arr = new double[10];
        int numDoubles = 0;
    }

    public boolean append(double val) {
        if (this.numDoubles < this.arr.length) {
            this.arr[this.numDoubles++] = val;
            return true;
        }
        return false;
    }

    public static void main(String[] args) {
        DoubleBoxReturns db = new DoubleBoxReturns();
        db.append(1.0);
    }
}

When executed, this code raises the following exception:

Exception in thread "main" java.lang.NullPointerException
	at DoubleBoxReturns.append(DoubleBoxReturns.java:11)
	at DoubleBoxReturns.main(DoubleBoxReturns.java:20)

A. Identify and describe the bug that is causing the exception.

B. Rewrite the buggy code so that it functions properly.