FRQ4 - 2D Arrays - Part 1

From CS Awesome 2CC BY-NC-SA 4.0Original page

Java1 class period2 exercises4 graded tests

Files

README.mdDownload

FRQ4 - 2D Arrays - Part 1

Each coding exercise has its own folder. Open its .java file and press Run to try it. Run Tests checks every graded exercise in this lesson at once.

From the 2025 Course and Exam Description:

Free-Response Question 4: 2D Array. Students will be provided with a scenario and its associated class(es). Students will write one method of a given class based on provided specifications and examples. The method requires students to use, analyze, and manipulate data in a 2D array structure.

FRQ 4 requires the following skills:

  • Iterate through a 2D array
  • Access elements of a 2D array
  • Call methods on elements of a 2D array

2013 FRQ 4 - SkyView - Part (a)

The following is a free response question from 2013. It was question 4 on the exam on https://secure-media.collegeboard.org/digitalServices/pdf/ap/apcentral/ap13_frq_comp_sci.pdf.

Question 4. A telescope scans a rectangular area of the night sky and collects the data into a 1-dimensional array. Each data value scanned is a number representing the amount of light detected by the telescope. The telescope scans back and forth across the sky (alternating between left to right and right to left) in the pattern indicated below by the arrows. The back-and-forth ordering of the values received from the scan is called telescope order.

The first row is left to right and the second is right to left and so on.

The first row is left to right and the second is right to left and so on.

The telescope records the data in telescope order into a 1-dimensional array of double values. This 1-dimensional array of information received from a single scan will be transferred into a 2-dimensional array, which reconstructs the original view of the rectangular area of the sky. This 2-dimensional array is part of the SkyView class, shown below. In this question you will write a constructor and a method for this class.

public class SkyView
{
    /**
     * A rectangular array that holds the data representing a rectangular area of
     * the sky.
     */
    private double[][] view;

    /**
     * Constructs a SkyView object from a 1-dimensional array of scan data.
     *
     * @param numRows the number of rows represented in the view Precondition:
     *     numRows > 0
     * @param numCols the number of columns represented in the view Precondition:
     *     numCols > 0
     * @param scanned the scan data received from the telescope, stored in
     *     telescope order Precondition: scanned.length == numRows * numCols
     *     Postcondition: view has been created as a rectangular 2-dimensional
     *     array with numRows rows and numCols columns and the values in scanned
     *     have been copied to view and are ordered as in the original rectangular
     *     area of sky.
     */
    public SkyView(int numRows, int numCols, double[] scanned)
    {
        /* to be implemented in part (a) */
    }

    /**
     * Returns the average of the values in a rectangular section of view.
     *
     * @param startRow the first row index of the section
     * @param endRow the last row index of the section
     * @param startCol the first column index of the section
     * @param endCol the last column index of the section Precondition: 0 <=
     *     startRow <= endRow < view.length Precondition: 0 <= startCol <= endCol <
     *     view[0].length
     * @return the average of the values in the specified section of view
     */
    public double getAverage(int startRow, int endRow, int startCol, int endCol)
    {
        /* to be implemented in part (b) */
    }

    // There may be other instance variables, constructors, and methods
}

Part a. Write the constructor for the SkyView class. The constructor initializes the view instance variable to a 2-dimensional array with numRows rows and numCols columns. The information from scanned, which is stored in the telescope order, is copied into view to reconstruct the sky view as originally seen by the telescope. The information in scanned must be rearranged as it is stored into view so that the sky view is oriented properly.

For example, suppose scanned contains values, as shown in the following array.

First example scanned array values

First example scanned array values

Using the scanned array above, a SkyView object created with new SkyView(4, 3, values), would have view initialized with the following values.

The resulting view from the first example scanned array

The resulting view from the first example scanned array

For another example, suppose scanned contains the following values.

Second example scanned array values

Second example scanned array values

A SkyView object created with new SkyView(3, 2, values), would have view initialized with the following values.

The resulting view from the second example scanned array

The resulting view from the second example scanned array

Complete the SkyView constructor in the class below.

The code below declares the class, the view, and a constructor for you to finish writing. It also has a main method for testing the constructor.

Exercise 1

Complete the SkyView constructor in the class.

Open the 01-SkyViewA folder and edit SkyView.java. Press Run to try it; Run Tests checks it (2 tests).

2013 FRQ 4 - SkyView - Part (b)

SkyView Part B is from the 2103 AP Computer Science A Exam at https://secure-media.collegeboard.org/digitalServices/pdf/ap/apcentral/ap13_frq_comp_sci.pdf.

Part b. Write the SkyView method getAverage, which returns the average of the elements of the section of view with row indexes from startRow through endRow, inclusive, and column indexes from startCol through endCol, inclusive.

For example, if nightSky is a SkyView object where view contains the values shown below, the call nightSky.getAverage(1, 2, 0, 1) should return 0.8. (The average is (1.1 + 1.4 + 0.2 + 0.5) / 4, which equals 0.8). The section being averaged is indicated by the dark outline in the table below.

Example values with the region for the getAverage outlined

Example values with the region for the getAverage outlined

The class information

The class information

Exercise 2

Finish writing the getAverage method in the class.

Open the 02-SkyViewB folder and edit SkyView.java. Press Run to try it; Run Tests checks it (2 tests).

For teachers

FRQ4 - 2D Arrays - Part 1

Students read CSAwesome2's “FRQ4 - 2D Arrays - Part 1” in CS Room and work through its 2 Java coding exercises.

  • Time: 1 class period
  • Tests: 4 in 2 graded exercises, set up for you when you import the lesson

Goals

  • Practice for the AP exam's free-response questions.

Before class

In class

  1. Students read README.md.
  2. Students do exercises 01–02, each in its own folder, pressing Run to try their code.
  3. Run Tests checks every graded exercise at once; scores appear in the Gradebook. Grading uses your copy of the tests, so a student who edits theirs does not change the grade.

Exercises

FolderFileGradingTests
01-SkyViewASkyView.javaAutograded2
02-SkyViewBSkyView.javaAutograded2

Teachers can download a reference solution after signing in.