AP CSA Unit 2: Selection & Iteration - Complete Study Guide (2025)
AP Computer Science A – Unit 2: Selection and Iteration (2025)
Unit 2 combines selection (making decisions with if statements) and iteration (repeating actions with loops). Together, these skills account for roughly 25–35% of the AP CSA exam and show up in almost every FRQ and MCQ.
📘 2.1 Unit Overview & Big Ideas
In this unit, you’ll learn how programs:
-
Decide what to do using boolean expressions and
ifstatements -
Repeat code using
whileandforloops - Combine decisions and repetition to implement algorithms
Main topics:
- Relational & logical operators (
>,<,==,!=,&&,||,!) - Boolean expressions and truth tables
- if, else-if, else, and nested conditionals
- De Morgan’s Law and simplifying conditions
- while loops, for loops, and nested loops
- Loop patterns: counting, summing, searching
- Off-by-one errors and infinite loops
- Tracing and debugging selection + iteration
🧠 2.2 Boolean Expressions & Relational Operators
A boolean expression is an expression that evaluates to either true or false. You’ll use these inside if-statements and loops.
Relational Operators
| Operator | Meaning | Example |
|---|---|---|
== |
equal to | x == 5 |
!= |
not equal to | x != 0 |
> |
greater than | score > 90 |
< |
less than | temp < 32 |
>= |
greater than or equal to | age >= 16 |
<= |
less than or equal to | count <= 10 |
Examples
int x = 7; boolean a = (x > 5); // true boolean b = (x == 7); // true boolean c = (x != 7); // false
== compares values of primitives (like int, double). For Strings, you must use equals(), not ==.
🔗 2.3 Logical Operators, Truth Tables & Precedence
Logical operators combine or modify boolean values:
-
&&(AND) – true only if both conditions are true -
||(OR) – true if at least one condition is true -
!(NOT) – reverses a boolean value
Truth Table
| A | B | A && B | A || B |
|---|---|---|---|
| true | true | true | true |
| true | false | false | true |
| false | true | false | true |
| false | false | false | false |
NOT Operator
boolean isRaining = true; boolean stayInside = !isRaining; // false
Operator Precedence (Simplified)
- Relational:
>, <, >=, <=, ==, != - Logical NOT:
! - Logical AND:
&& - Logical OR:
||
Short-Circuit Evaluation
Java uses short-circuiting:
-
A && B→ if A is false, B is never evaluated -
A || B→ if A is true, B is never evaluated
if (x != 0 && 10 / x > 1) {
// safe: 10/x only happens if x != 0
}
🧩 2.4 De Morgan’s Law & Simplifying Conditions
De Morgan’s Law lets you distribute a NOT over an AND/OR expression:
Example
Suppose we want to check that a value x is outside the range 1 to 10:
// x is NOT between 1 and 10 inclusive:
if (x < 1 || x > 10) {
...
}
// Equivalent to:
if (!(x >= 1 && x <= 10)) {
...
}
🔀 2.5 if, else-if, else – Making Decisions
Selection lets your program choose between different paths of execution.
Basic if Statement
if (condition) {
// runs only if condition is true
}
if-else
if (score >= 60) {
System.out.println("Pass");
} else {
System.out.println("Fail");
}
if-else-if Chain
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else {
grade = "D or F";
}
Example – Two Separate if Statements
int x = 12;
if (x % 2 == 0)
System.out.println("even");
if (x % 3 == 0)
System.out.println("divisible by 3");
Output:
- even
- divisible by 3
Because these are two separate if statements, both can run.
🏛 2.6 Nested Conditionals & Common Decision Patterns
You can place an if-statement inside another if or else block. This is called a nested conditional.
Nested Example
if (age >= 16) {
if (hasPermit) {
System.out.println("You can drive.");
} else {
System.out.println("Get your permit first.");
}
} else {
System.out.println("Too young to drive.");
}
Range Checking Pattern
if (score < 0 || score > 100) {
System.out.println("Invalid score");
} else if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else {
grade = 'D';
}
Multi-Condition Decisions
if (gpa >= 3.5 && communityServiceHours >= 50) {
eligibleForScholarship = true;
}
🧪 2.7 Selection Practice – Predict the Output
Example 1
int x = 5;
if (x > 10)
System.out.println("big");
else if (x > 3)
System.out.println("medium");
else
System.out.println("small");
Output: medium
Example 2
int a = 4;
int b = 7;
if (a > b || b % 2 == 1)
System.out.println("A");
else if (a % 2 == 0 && b % 2 == 0)
System.out.println("B");
else
System.out.println("C");
Output: A (because b % 2 == 1 is true)
Example 3
boolean hot = true;
boolean sunny = false;
if (!hot && sunny)
System.out.println("Cool day");
else if (hot && !sunny)
System.out.println("Humid");
else
System.out.println("Mixed");
Output: Humid
🔁 2.8 Introduction to Iteration (Loops)
Iteration means repeating a block of code multiple times. In Java, the main loop constructs are:
- while loops – repeat while a condition is true
- for loops – repeat a specific number of times
- nested loops – loops inside loops
🔂 2.9 while Loops – Condition-Controlled Repetition
A while loop repeats as long as its condition evaluates to true.
while (condition) {
// body runs repeatedly
}
Counting Example
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
Output: 0 1 2 3 4
Key Points
- The condition is checked before each iteration.
- The loop body may run zero times if the condition starts false.
- You must change something inside the loop so the condition eventually becomes false.
Common Mistake – Infinite Loop
int n = 10;
while (n > 0) {
System.out.println(n);
// n never changes → infinite loop
}
🧩 Mastering Loops Without Arrays
Before moving on to classes (Unit 3) and data collections (Unit 4), you should be fully comfortable with loops that operate on:
- integers (counting, summing, reversing)
- Strings (traversal, searching, building new strings)
-
boolean conditions (flags, early exit with
break) - sentinel logic (looping until a condition becomes false)
These loop skills are essential for the AP CSA exam and appear heavily in MCQs and early FRQs—even before arrays show up.
while and for loops—not about data structures yet. Arrays and ArrayLists come later in Unit 4.🔤 Looping Through Characters in a String
Strings are perfect for practicing iteration. You can examine, count, or modify characters using length() and charAt(i).
Example: Count the vowels in a String
String word = "computer science";
int count = 0;
for (int i = 0; i < word.length(); i++) {
char ch = word.charAt(i);
if ("aeiouAEIOU".indexOf(ch) != -1) {
count++;
}
}
System.out.println("Vowels: " + count);
Example: Reverse a String
String original = "hello";
String reversed = "";
for (int i = original.length() - 1; i >= 0; i--) {
reversed += original.charAt(i);
}
System.out.println(reversed); // "olleh"
charAt() appears frequently on MCQs and FRQs. Master it before moving to arrays.🎯 Essential Loop Patterns (Without Arrays)
1. Counter Loop
Counts occurrences of something:
int count = 0;
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
count++;
}
}
System.out.println(count); // 5 even numbers
2. Accumulator Loop
Adds values together:
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum); // 5050
3. Flag Loop
Stops early when something is found:
String s = "aP cSa test";
boolean found = false;
for (int i = 0; i < s.length(); i++) {
if (Character.isUpperCase(s.charAt(i))) {
found = true;
break;
}
}
System.out.println(found); // true
4. Sentinel Loop (While Loop)
Scanner input = new Scanner(System.in);
System.out.print("Enter a positive number (-1 to stop): ");
int num = input.nextInt();
while (num != -1) {
System.out.println("You entered: " + num);
num = input.nextInt();
}
📐 Looping Without Collections — Math-Based Problems
Example: Count the digits in a number
int n = 483902;
int digits = 0;
while (n > 0) {
n /= 10; // remove last digit
digits++;
}
System.out.println(digits); // 6
Example: Check if a number is prime
int num = 37;
boolean isPrime = true;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
isPrime = false;
break;
}
}
System.out.println(isPrime);
Example: Sum digits of a number
int n2 = 762;
int sumDigits = 0;
while (n2 > 0) {
sumDigits += n2 % 10;
n2 /= 10;
}
System.out.println(sumDigits); // 15
🔁 Nested Loop Patterns (No Arrays Needed)
Triangle Pattern
for (int row = 1; row <= 4; row++) {
for (int col = 1; col <= row; col++) {
System.out.print("*");
}
System.out.println();
}
Grid Pattern
for (int r = 1; r <= 3; r++) {
for (int c = 1; c <= 5; c++) {
System.out.print("#");
}
System.out.println();
}
📝 Practice Problems — Unit 2 Mastery Check (No Arrays Yet)
Try these practice problems to test your understanding of Unit 2 loops before you move on:
- Write a loop that counts how many characters in a
Stringare digits (hint:Character.isDigit()). - Given a
String, determine whether it contains three consecutive vowels. - Use a
whileloop to reverse an integer (for example, 12345 becomes 54321). - Write a
forloop that prints every other character in aStringstarting at index 0. - Write a nested loop that prints a 5x5 grid of numbers from 1 to 25 in row-major order.
📝 Unit 2 Quiz – Selection & Iteration (10 Questions)
Question 1
What is printed by the following code?
int x = 7;
if (x > 5 && x < 10) {
System.out.println("A");
} else {
System.out.println("B");
}
- A. A
- B. B
- C. Nothing
- D. Causes a runtime error
Answer: A
Both conditions (x > 5 and x < 10) are true, so the if block runs.
Question 2
What is the value of count after this code runs?
int count = 0;
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
count++;
}
}
- A. 2
- B. 3
- C. 4
- D. 5
Answer: B
Numbers divisible by 3 between 1 and 10 are 3, 6, and 9 → 3 total.
Question 3
What is printed?
int x = 0;
if (x != 0 && 10 / x > 1) {
System.out.println("Yes");
} else {
System.out.println("No");
}
- A. Yes
- B. No
- C. Runtime error
- D. Nothing
Answer: B
Because of short-circuit evaluation, 10 / x is never evaluated when x != 0 is false.
Question 4
What is printed?
int n = 5;
while (n > 0) {
n -= 2;
System.out.print(n + " ");
}
- A. 3 1 -1
- B. 3 1
- C. 5 3 1
- D. Infinite loop
Answer: A
Values printed after subtraction: 3, 1, -1. Loop stops once n is no longer > 0.
Question 5
Which boolean expression correctly checks if x is between 10 and 20 inclusive?
- A.
x >= 10 || x <= 20 - B.
x > 10 && x < 20 - C.
x >= 10 && x <= 20 - D.
!(x < 10 && x > 20)
Answer: C
Inclusive range requires both bounds using &&.
Question 6
What is printed?
String s = "java";
int i = 0;
while (i < s.length()) {
if (s.charAt(i) == 'a') {
System.out.print(i + " ");
}
i++;
}
- A. 0 2
- B. 1 3
- C. 2 4
- D. 1 2
Answer: B
Indices: j=0, a=1, v=2, a=3 → 'a' occurs at indices 1 and 3.
Question 7
Which loop correctly prints the numbers 1 through 5?
- A.
for (int i = 1; i < 5; i++)
- B.
for (int i = 0; i <= 5; i++)
- C.
for (int i = 1; i <= 5; i++)
- D.
for (int i = 5; i >= 1; i++)
Answer: C
Starts at 1 and includes 5 → classic counting loop.
Question 8
What is printed?
int x = 10;
if (x > 5)
if (x < 8)
System.out.println("A");
else
System.out.println("B");
- A. A
- B. B
- C. Nothing
- D. Compile-time error
Answer: B
The else pairs with the nearest unmatched if.
Question 9
What is the output?
int sum = 0;
for (int i = 1; i <= 4; i++) {
sum += i;
}
System.out.println(sum);
- A. 6
- B. 10
- C. 12
- D. 16
Answer: B
Accumulator pattern: 1 + 2 + 3 + 4 = 10.
Question 10
Which statement about loops is TRUE?
- A. A while loop always runs at least once.
- B. A for loop cannot be infinite.
- C. Loop variables must be declared outside the loop.
- D. A loop must eventually make its condition false.
Answer: D
Every correct loop must change state so its condition eventually becomes false.
🚀 Next Steps: Move on to Unit 3 — Class Creation
Once you're comfortable with loops, boolean logic, and String traversal, you're ready for Unit 3: Class Creation, where you'll learn how to design your own classes, write constructors, and define methods.
Continue your AP CSA path here:
Continue to AP CSA Unit 3: Class Creation →