Ap22 SG Computer Science A
Ap22 SG Computer Science A
AP Computer Science A
®
Scoring Guidelines
© 2022 College Board. College Board, Advanced Placement, AP, AP Central, and the acorn logo are registered
trademarks of College Board. Visit College Board on the web: collegeboard.org.
AP Central is the official online home for the AP Program: apcentral.collegeboard.org.
AP® Computer Science A 2022 Scoring Guidelines
Applying the Scoring Criteria
Apply the question scoring criteria first, which always takes precedence. Penalty points can only be
deducted in a part of the question that has earned credit via the question rubric. No part of a question (a, b, c)
may have a negative point total. A given penalty can be assessed only once for a question, even if it occurs
multiple times or in multiple parts of that question. A maximum of 3 penalty points may be assessed per
question.
1‐Point Penalty
v) Array/collection access confusion ([] get)
w) Extraneous code that causes side‐effect (e.g., printing to output, incorrect precondition check)
x) Local variables used but none declared
y) Destruction of persistent data (e.g., changing value referenced by parameter)
z) Void method or constructor that returns a value
No Penalty
Extraneous code with no side‐effect (e.g., valid precondition check, no‐op)
Spelling/case discrepancies where there is no ambiguity*
Local variable not declared provided other variables are declared in some part
private or public qualifier on a local variable
Missing public qualifier on class or constructor header
Keyword used as an identifier
Common mathematical symbols used for operators (× • ÷ ≤ ≥ <> ≠)
[] vs. () vs. <>
= instead of == and vice versa
length/size confusion for array, String, List, or ArrayList; with or without ( )
Extraneous [] when referencing entire array
[i,j] instead of [i][j]
Extraneous size in array declaration, e.g., int[size] nums = new int[size];
Missing ; where structure clearly conveys intent
Missing { } where indentation clearly conveys intent
Missing ( ) on parameter‐less method or constructor invocations
Missing ( ) around if or while conditions
*Spelling and case discrepancies for identifiers fall under the “No Penalty” category only if the correction can
be unambiguously inferred from context, for example, “ArayList” instead of “ArrayList”. As a counterexample,
note that if the code declares "int G=99, g=0;", then uses "while (G < 10)" instead of
"while (g < 10)", the context does not allow for the reader to assume the use of the lower case
variable.
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Question 1: Methods and Control Structures 9 points
Canonical solution
(a) public int getScore() 4 points
{
int score = 0;
if (levelOne.goalReached())
{
score = levelOne.getPoints();
if (levelTwo.goalReached())
{
score += levelTwo.getPoints();
if (levelThree.goalReached())
{
score += levelThree.getPoints();
}
}
}
if (isBonus())
{
score *= 3;
}
return score;
}
(b) public int playManyTimes(int num) 5 points
{
int max = 0;
return max;
}
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
(a) getScore
Scoring Criteria Decision Rules
1 Calls getPoints, goalReached, and Responses will not earn the point if they 1 point
isBonus fail to call getPoints or
goalReached on a Level object
call isBonus on an object other than
this (use of this is optional)
include parameters
2 Determines if points are earned based on Responses can still earn the point even if 1 point
goalReached return values they
calculate the score total incorrectly
call goalReached incorrectly
fail to distinguish all cases correctly
Responses will not earn the point if they
fail to use a nested if statement or
equivalent
3 Guards update of score for bonus game Responses can still earn the point even if 1 point
based on isBonus return value they
triple the calculated score incorrectly
update the score with something other
than tripling
call isBonus incorrectly
Responses will not earn the point if they
use the isBonus return value
incorrectly
4 Initializes and accumulates appropriate Responses can still earn the point even if 1 point
score (algorithm) they
call methods incorrectly, as long as
method calls are attempted
fail to return the score (return is not
assessed)
Responses will not earn the point if they
calculate the score total incorrectly
triple the calculated score incorrectly
Total for part (a) 4 points
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
(b) playManyTimes
Scoring Criteria Decision Rules
5 Loops num times Responses can still earn the point even if 1 point
they
return early
6 Calls play and getScore Responses will not earn the point if they 1 point
call either method on an object other
than this (use of this is optional)
include parameters
7 Compares a score to an identified max or to Responses can still earn the point even if 1 point
another score they
make the comparison outside the loop
call getScore incorrectly
fail to call play between calls to
getScore
8 Identifies the maximum score (algorithm) Responses will not earn the point if they 1 point
fail to initialize the result variable
compare a score to an identified max or
to another score outside the loop
fail to call play exactly once each
time through the loop
9 Returns identified maximum score Responses can still earn the point even if 1 point
they
calculate the maximum score incorrectly
Responses will not earn the point if they
assign a value to the identified
maximum score without any loop or
logic to find the maximum
Total for part (b) 5 points
Question‐specific penalties
None
Total for question 1 9 points
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Applying the Scoring Criteria
Apply the question scoring criteria first, which always takes precedence. Penalty points can only be
deducted in a part of the question that has earned credit via the question rubric. No part of a question (a, b, c)
may have a negative point total. A given penalty can be assessed only once for a question, even if it occurs
multiple times or in multiple parts of that question. A maximum of 3 penalty points may be assessed per
question.
1‐Point Penalty
v) Array/collection access confusion ([] get)
w) Extraneous code that causes side‐effect (e.g., printing to output, incorrect precondition check)
x) Local variables used but none declared
y) Destruction of persistent data (e.g., changing value referenced by parameter)
z) Void method or constructor that returns a value
No Penalty
Extraneous code with no side‐effect (e.g., valid precondition check, no‐op)
Spelling/case discrepancies where there is no ambiguity*
Local variable not declared provided other variables are declared in some part
private or public qualifier on a local variable
Missing public qualifier on class or constructor header
Keyword used as an identifier
Common mathematical symbols used for operators (× • ÷ ≤ ≥ <> ≠)
[] vs. () vs. <>
= instead of == and vice versa
length/size confusion for array, String, List, or ArrayList; with or without ( )
Extraneous [] when referencing entire array
[i,j] instead of [i][j]
Extraneous size in array declaration, e.g., int[size] nums = new int[size];
Missing ; where structure clearly conveys intent
Missing { } where indentation clearly conveys intent
Missing ( ) on parameter‐less method or constructor invocations
Missing ( ) around if or while conditions
*Spelling and case discrepancies for identifiers fall under the “No Penalty” category only if the correction can
be unambiguously inferred from context, for example, “ArayList” instead of “ArrayList”. As a counterexample,
note that if the code declares "int G=99, g=0;", then uses "while (G < 10)" instead of
"while (g < 10)", the context does not allow for the reader to assume the use of the lower case
variable.
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Question 2: Class 9 points
Canonical solution
public class Textbook extends Book 9 points
{
private int edition;
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Textbook
Scoring Criteria Decision Rules
1 Declares class header (must not be 1 point
private):
class Textbook extends Book
2 Declares constructor header: 1 point
public Textbook(String ___,
double ___, int ___)
3 Constructor calls super as the first line 1 point
with the appropriate parameters
4 Declares appropriate private instance Responses will not earn the point if they 1 point
variable and uses appropriate parameter to omit the keyword private
initialize it declare the variable outside the class, or
in the class within a method or
constructor
redeclare and use the instance variables
of the superclass
5 Declares at least one required method and Responses will not earn the point if they 1 point
all declared headers are correct: exclude public
public boolean
canSubstituteFor(Textbook ___)
public int getEdition()
public String getBookInfo()
6 getEdition returns value of instance Responses will not earn the point if they 1 point
variable fail to create an instance variable for the
edition
7 canSubstituteFor determines Responses can still earn the point even if 1 point
whether true or false should be they
returned based on comparison of book fail to return (return is not assessed for
titles and editions (algorithm) this method)
access the edition without calling
getEdition
redeclare and use the title variable
of the superclass instead of calling
getTitle
Responses will not earn the point if they
fail to use equals
call getTitle incorrectly in either
case
8 getBookInfo calls Responses can still earn the point even if 1 point
super.getBookInfo they
redeclare and use the instance variables
of the superclass
Responses will not earn the point if they
include parameters
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
9 Constructs information string Responses can still earn the point even if 1 point
they
call super.getBookInfo
incorrectly
fail to call super.getBookInfo
and access title and price
directly
fail to return (return is not assessed for
this method)
Responses will not earn the point if they
omit the literal hyphen(s) in the
constructed string
omit the edition in the constructed
string
concatenate strings incorrectly
Question‐specific penalties
None
Total for question 2 9 points
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Applying the Scoring Criteria
Apply the question scoring criteria first, which always takes precedence. Penalty points can only be
deducted in a part of the question that has earned credit via the question rubric. No part of a question (a, b, c)
may have a negative point total. A given penalty can be assessed only once for a question, even if it occurs
multiple times or in multiple parts of that question. A maximum of 3 penalty points may be assessed per
question.
1‐Point Penalty
v) Array/collection access confusion ([] get)
w) Extraneous code that causes side‐effect (e.g., printing to output, incorrect precondition check)
x) Local variables used but none declared
y) Destruction of persistent data (e.g., changing value referenced by parameter)
z) Void method or constructor that returns a value
No Penalty
Extraneous code with no side‐effect (e.g., valid precondition check, no‐op)
Spelling/case discrepancies where there is no ambiguity*
Local variable not declared provided other variables are declared in some part
private or public qualifier on a local variable
Missing public qualifier on class or constructor header
Keyword used as an identifier
Common mathematical symbols used for operators (× • ÷ ≤ ≥ <> ≠)
[] vs. () vs. <>
= instead of == and vice versa
length/size confusion for array, String, List, or ArrayList; with or without ( )
Extraneous [] when referencing entire array
[i,j] instead of [i][j]
Extraneous size in array declaration, e.g., int[size] nums = new int[size];
Missing ; where structure clearly conveys intent
Missing { } where indentation clearly conveys intent
Missing ( ) on parameter‐less method or constructor invocations
Missing ( ) around if or while conditions
*Spelling and case discrepancies for identifiers fall under the “No Penalty” category only if the correction can
be unambiguously inferred from context, for example, “ArayList” instead of “ArrayList”. As a counterexample,
note that if the code declares "int G=99, g=0;", then uses "while (G < 10)" instead of
"while (g < 10)", the context does not allow for the reader to assume the use of the lower case
variable.
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Question 3: Array / ArrayList 9 points
Canonical solution
(a) public double getAverageRating() 3 points
{
int sum = 0;
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
(a) getAverageRating
Scoring Criteria Decision Rules
1 Initializes and accumulates sum Response can still earn the point even if 1 point
they
fail to use a loop to accumulate
fail to call getRating or call
getRating incorrectly
2 Accesses every element of allReviews Responses will not earn the point if they 1 point
(no bounds errors) access the elements of allReviews
incorrectly
3 Computes and returns double average Response can still earn the point even if 1 point
rating based on getRating return they
values (algorithm) fail to initialize the accumulator for the
sum
Responses will not earn the point if they
fail to accumulate the sum of all ratings
use integer division to compute average
include parameters on call to
getRating
fail to call getRating on all
elements of allReviews
Total for part (a) 3 points
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
(b) collectComments
Scoring Criteria Decision Rules
4 Instantiates an ArrayList capable of 1 point
holding String objects
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Total for part (b) 6 points
Question‐specific penalties
None
Total for question 3 9 points
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Applying the Scoring Criteria
Apply the question scoring criteria first, which always takes precedence. Penalty points can only be
deducted in a part of the question that has earned credit via the question rubric. No part of a question (a, b, c)
may have a negative point total. A given penalty can be assessed only once for a question, even if it occurs
multiple times or in multiple parts of that question. A maximum of 3 penalty points may be assessed per
question.
1‐Point Penalty
v) Array/collection access confusion ([] get)
w) Extraneous code that causes side‐effect (e.g., printing to output, incorrect precondition check)
x) Local variables used but none declared
y) Destruction of persistent data (e.g., changing value referenced by parameter)
z) Void method or constructor that returns a value
No Penalty
Extraneous code with no side‐effect (e.g., valid precondition check, no‐op)
Spelling/case discrepancies where there is no ambiguity*
Local variable not declared provided other variables are declared in some part
private or public qualifier on a local variable
Missing public qualifier on class or constructor header
Keyword used as an identifier
Common mathematical symbols used for operators (× • ÷ ≤ ≥ <> ≠)
[] vs. () vs. <>
= instead of == and vice versa
length/size confusion for array, String, List, or ArrayList; with or without ( )
Extraneous [] when referencing entire array
[i,j] instead of [i][j]
Extraneous size in array declaration, e.g., int[size] nums = new int[size];
Missing ; where structure clearly conveys intent
Missing { } where indentation clearly conveys intent
Missing ( ) on parameter‐less method or constructor invocations
Missing ( ) around if or while conditions
*Spelling and case discrepancies for identifiers fall under the “No Penalty” category only if the correction can
be unambiguously inferred from context, for example, “ArayList” instead of “ArrayList”. As a counterexample,
note that if the code declares "int G=99, g=0;", then uses "while (G < 10)" instead of
"while (g < 10)", the context does not allow for the reader to assume the use of the lower case
variable.
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Question 4: 2D Array 9 points
Canonical solution
(a) public void repopulate() 4 points
{
for (int row = 0; row < grid.length; row++)
{
for (int col = 0; col < grid[0].length; col++)
{
int rval = (int)(Math.random() * MAX) + 1;
while (rval % 10 != 0 || rval % 100 == 0)
{
rval = (int)(Math.random() * MAX) + 1;
}
grid[row][col] = rval;
}
}
}
(b) public int countIncreasingCols() 5 points
{
int count = 0;
if (ordered)
{
count++;
}
}
return count;
}
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
(a) repopulate
Scoring Criteria Decision Rules
1 Traverses grid (no bounds errors) Responses will not earn the point if they 1 point
fail to access an element of grid
access the elements of grid
incorrectly
use enhanced for loops without using
a grid element inside the loop
2 Generates a random integer in a range Responses can still earn the point even if 1 point
based on MAX they
assume or verify that MAX >= 10
Responses will not earn the point if they
fail to cast to an int
3 Ensures that all produced values are Responses can still earn the point even if 1 point
divisible by 10 but not by 100 they
fail to use a loop
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
(b) countIncreasingCols
Scoring Criteria Decision Rules
5 Traverses grid in column major order Responses can still earn the point even if 1 point
(no loop header bounds errors) they
access an out‐of‐bounds row or column
index adjacent to the edge of the grid, if
the loop bounds include only valid
indices
Responses will not earn the point if they
fail to access an element of grid
access the elements of grid
incorrectly
6 Compares two elements in the same Responses can still earn the point even if 1 point
column of grid they
access elements of grid incorrectly
access elements in nonadjacent rows
compare elements with ==
compare two elements in the same row
instead of the same column
7 Determines whether a single column is in Responses can still earn the point even if 1 point
increasing order (algorithm) they
fail to reset variables in the outer loop
before proceeding to the next column
Responses will not earn the point if they
fail to access all pairs of adjacent
elements in a single column
cause a bounds error by attempting to
compare the first element of a column
with a previous element or the last
element of a column with a subsequent
element
incorrectly identify a column with at
least one pair of adjacent elements in
decreasing order as increasing
8 Counts all columns that are identified as Responses can still earn the point even if 1 point
increasing (algorithm) they
detect increasing order for each row
instead of each column
incorrectly identify increasing columns in
the inner loop
Responses will not earn the point if they
fail to initialize the counter
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
fail to reset variables in the outer loop
causing subsequent runs of the inner
loop to misidentify columns
9 Returns calculated count of increasing Responses can still earn the point even if 1 point
columns they
calculate the count incorrectly
Total for part (b) 5 points
Question‐specific penalties
None
Total for question 4 9 points
© 2022 College Board
AP® Computer Science A 2022 Scoring Guidelines
Alternate Canonical for Part (a)
public void repopulate()
{
for (int row = 0; row < grid.length; row++)
{
for (int col = 0; col < grid[0].length; col++)
{
int rval = ((int)(Math.random() * (MAX / 10)) + 1) * 10;
while (rval % 100 == 0)
{
rval = ((int)(Math.random() * (MAX / 10)) + 1) * 10;
}
grid[row][col] = rval;
}
}
}
© 2022 College Board