AP CSA
- Java Style Guidelines
- 必考 Array 算法
Array Algorithms with Different Loop Versions
1. Determine the Minimum or Maximum Value in an Array
Find Maximum Value
import java.util.Arrays;
public class ArrayAlgorithms {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
// Using for loop
int max = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
System.out.println("Max value (for loop): " + max);
// Using enhanced for loop
max = numbers[0];
for (int num : numbers) {
if (num > max) {
max = num;
}
}
System.out.println("Max value (enhanced for loop): " + max);
}
}
2. Compute a Sum or Average of Array Elements
Compute Sum
public class ArraySum {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
// Using for loop
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
System.out.println("Sum (for loop): " + sum);
// Using enhanced for loop
sum = 0;
for (int num : numbers) {
sum += num;
}
System.out.println("Sum (enhanced for loop): " + sum);
}
}
Compute Average
public class ArrayAverage {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
int sum = 0;
// Using for loop to compute sum
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
System.out.println("Sum (for loop): " + sum);
// Compute average
double average = (double) sum / numbers.length;
System.out.println("Average: " + average);
}
}
3. Search for a Particular Element in the Array
Search for the Number 7
public class ArraySearch {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
int target = 7;
boolean found = false;
// Using for loop
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == target) {
found = true;
break;
}
}
System.out.println("Found (for loop): " + found);
// Using enhanced for loop
found = false;
for (int num : numbers) {
if (num == target) {
found = true;
break;
}
}
System.out.println("Found (enhanced for loop): " + found);
}
}
4. Determine if At Least One Element Has a Particular Property
Check if at Least One Element is Even
public class ArrayProperty {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
boolean hasEven = false;
// Using for loop
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 == 0) {
hasEven = true;
break;
}
}
System.out.println("Has even (for loop): " + hasEven);
// Using enhanced for loop
hasEven = false;
for (int num : numbers) {
if (num % 2 == 0) {
hasEven = true;
break;
}
}
System.out.println("Has even (enhanced for loop): " + hasEven);
}
}
5. Determine if All Elements Have a Particular Property
Check if All Elements are Positive
public class ArrayAllPositive {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
boolean allPositive = true;
// Using for loop
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] <= 0) {
allPositive = false;
break;
}
}
System.out.println("All positive (for loop): " + allPositive);
// Using enhanced for loop
allPositive = true;
for (int num : numbers) {
if (num <= 0) {
allPositive = false;
break;
}
}
System.out.println("All positive (enhanced for loop): " + allPositive);
}
}
6. Access All Consecutive Pairs of Elements
public class ConsecutivePairs {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
// Using for loop
for (int i = 0; i < numbers.length - 1; i++) {
System.out.println("Pair: " + numbers[i] + ", " + numbers[i + 1]);
}
// Enhanced for loop is not ideal for this task because it does not provide access to indices.
}
}
7. Determine the Presence or Absence of Duplicate Elements
public class DuplicateCheck {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
boolean hasDuplicate = false;
// Using for loop
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[i] == numbers[j]) {
hasDuplicate = true;
break;
}
}
if (hasDuplicate) break;
}
System.out.println("Has duplicate (for loop): " + hasDuplicate);
// Enhanced for loop is not ideal for this task due to the need for two indices.
}
}
8. Determine the Number of Elements Meeting Specific Criteria
Count Odd Numbers
public class CountOddNumbers {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
int oddCount = 0;
// Using for loop
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 != 0) {
oddCount++;
}
}
System.out.println("Odd count (for loop): " + oddCount);
// Using enhanced for loop
oddCount = 0;
for (int num : numbers) {
if (num % 2 != 0) {
oddCount++;
}
}
System.out.println("Odd count (enhanced for loop): " + oddCount);
}
}
9. Shift or Rotate Elements Left or Right
Shift Elements Left by One Position
import java.util.Arrays;
public class ShiftLeft {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
// Using for loop
int first = numbers[0];
for (int i = 0; i < numbers.length - 1; i++) {
numbers[i] = numbers[i + 1];
}
numbers[numbers.length - 1] = first;
System.out.println("Shifted left (for loop): " + Arrays.toString(numbers));
}
}
Shift Elements Right by One Position
import java.util.Arrays;
public class ShiftRight {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
// Save the last element since it will wrap around to the front
int last = numbers[numbers.length - 1];
// Shift each element to the right by 1 position
for (int i = numbers.length - 1; i > 0; i--) {
numbers[i] = numbers[i - 1];
}
// Place the last element in the first position
numbers[0] = last;
System.out.println("Shifted right by 1: " + Arrays.toString(numbers));
}
}
10. Reverse the Order of the Elements
1. Using a Two-Pointer Technique
import java.util.Arrays;
public class ReverseArray {
public static void main(String[] args) {
int[] numbers = {3, 5, 1, 7, 9};
for (int i = 0; i < numbers.length / 2; i++) {
int temp = numbers[i];
numbers[i] = numbers[numbers.length - 1 - i];
numbers[numbers.length - 1 - i] = temp;
}
System.out.println("Reversed (for loop): " + Arrays.toString(numbers));
}
}
2. Using an Auxiliary Array
import java.util.Arrays;
public class ReverseArray {
public static void main(String[] args) {
int[] numbers2 = {3, 5, 1, 7};
// Create a new array
int[] reversed = new int[numbers2.length];
for (int i = 0; i < numbers2.length; i++) {
reversed[i] = numbers2[numbers2.length - 1 - i];
}
System.out.println("Reversed array: " + Arrays.toString(reversed));
}
}
加分Project
点这里查看详情
从AP Classroom 中选一个已经做过的 FRQ,写出可执行代码,在blueJay中成功运行,具体要求和评分标准如下:
FRQ Coding Project Rubric / FRQ 编程项目评分标准
Grade | Guidelines | Criteria |
---|---|---|
A+ (9-10) | Exceptional work. Shows clear understanding and full mastery of the problem, and code is executed flawlessly. 出色的作品。展现了对问题的深入理解和完整掌握,代码运行无误。 |
|
A (8) | Excellent work. Code is accurate and runs without errors, with some minor style or completeness issues. 优秀作品。代码正确,运行无误,只有些微样式或完整性问题。 |
|
A- (7) | Strong work, but may have minor flaws in logic or structure. Code generally runs well. 表现良好,但在逻辑或结构上有小瑕疵。代码整体运行正常。 |
|
B+ (6) | Good effort with noticeable flaws. Code runs, but may have errors or inefficiencies. 有明显缺陷的良好尝试。代码可以运行,但可能有错误或低效部分。 |
|
B (5) | Satisfactory but needs improvement. Code has a mix of correct and incorrect results. 基本合格,但需改进。代码结果有正确和错误混合。 |
|
B- (4) | Acceptable, but with significant issues in execution, structure, or clarity. 可接受,但在执行、结构或清晰度上有重大问题。 |
|
C+ (3) | Limited success. Code runs but with minimal correctness, clarity, or efficiency. 成功有限。代码运行,但正确性、清晰度或效率低。 |
|
C (2) | Minimal success. Code compiles, but has many issues in logic and readability. 成功极少。代码可以编译,但逻辑和可读性有很多问题。 |
|
C- (1) | Very limited or incomplete. Code is far from functional and poorly constructed. 极其有限或不完整。代码几乎无法正常运行且结构糟糕。 |
|
Ask for Reflection / 提交时可能问你的问题:
- Why did you choose this particular FRQ? / 为什么选择这个特定的 FRQ?
- How did you approach solving the main problem? / 如何解决主要问题?
- Describe one challenge you faced and how you overcame it. / 描述遇到的一个挑战及如何克服。
Core Concepts:
核心知识点
Java Class Sample:
//This is a Cat class. It is like a blueprint for making Cat objects.
// A class defines the characteristics(color and breed) and actions(meowing) of the objects.
public class Cat{
//Characteristics of the Cat class
//instance variables
private String color;
private String breed;
private int age;
private boolean isHungry;
private String name;
private double weight;
private double height;
// Default Constructor
public Cat(){
//This is a constructor. It is used to create a Cat object
//with some default values.
color = "unkown";
breed = "unkown";
age = 0;
isHungry = true;
}
// Constructor with parameters
public Cat(int a){
age = a;
}
public Cat(int a, String c){
age = a;
color = c;
}
public Cat(String c, int a){
color = c;
age = a;
}
// Methods
public void showAge(){
System.out.println("Age: " + age);
}
public void meow(){
System.out.println("Meow!!!");
}
public void eat(int foodAmount){
System.out.println("I eat " + foodAmount + " a day");
}
// Main method
public static void main(String[] args){
//int num = 2;
//System.out.println("num: " + num);
//int num2 = num;
//System.out.println("num2: " + num2);
//num = 9; //changing num later does not affect num2
//System.out.println("num2 after num change: " + num2);
//System.out.println("num after num change: " + num);
Cat littleCat = new Cat(20, "black");
//System.out.println("littleCat's color: " + littleCat.color);
Cat bigCat = littleCat;
//System.out.println("bigCat's color: " + bigCat.color);
littleCat.color = "pink";
//bigCat.showAge();
bigCat.eat(50);
//System.out.println("littleCat's color after change: " + littleCat.color);
//System.out.println("bigCat's color after change littleCat: " + bigCat.color);
}
}