Skip to content · ⁨Перейти к содержанию⁩
Subjects · ⁨Предметы⁩

AP Computer Science A · ⁨AP Информатика A⁩

Tips · ⁨Советы⁩

AP Computer Science A is a Java course: objects and classes, primitive types and control flow, writing classes, arrays and ArrayLists, 2D arrays, inheritance and polymorphism, and recursion. It is a first programming course taught with real object-oriented code, not pseudocode.

All four free-response questions are hand-written Java. No compiler will catch a missing semicolon or a wrong return type for you, so write code on paper during revision — it is a different skill from typing it.

Arrays and ArrayLists are the most-tested topic. Being fluent with traversal, insertion and removal, and knowing which index shifts when you remove an element, pays back more than any other single hour of practice.

Notes cover the CED units in Java, with runnable examples you can edit in the browser. Past FRQs and scoring guidelines are in the library — all four are code-writing questions, so the worked answers are complete methods rather than fragments.

  • 1

    Using Objects and Methods · ⁨Использование объектов и методов⁩

    Watch lesson · ⁨Смотреть урок⁩
    1.1

    Introduction to Algorithms, Programming, and Compilers · ⁨Введение в алгоритмы, программирование и компиляторы⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.1.A: Represent patterns and algorithms found in everyday life using written language or diagrams.

    • 1.1.A.1 Algorithms define step-by-step processes to follow when completing a task or solving a problem. These algorithms can be represented using written language or diagrams.
    • 1.1.A.2 Sequencing defines an order for when steps in a process are completed. Steps in a process are completed one at a time.

    Learning Objective 1.1.B: Explain the code compilation and execution process.

    • 1.1.B.1 Code can be written in any text editor; however, an integrated development environment (IDE) is often used to write programs because it provides tools for a programmer to write, compile, and run code.
    • 1.1.B.2 A compiler checks code for some errors. Errors detectable by the compiler need to be fixed before the program can be run.

    Learning Objective 1.1.C: Identify types of programming errors.

    • 1.1.C.1 A syntax error is a mistake in the program where the rules of the programming language are not followed. These errors are detected by the compiler.
    • 1.1.C.2 A logic error is a mistake in the algorithm or program that causes it to behave incorrectly or unexpectedly. These errors are detected by testing the program with specific data to see if it produces the expected outcome.
    • 1.1.C.3 A run-time error is a mistake in the program that occurs during the execution of a program. Run-time errors typically cause the program to terminate abnormally.
    • 1.1.C.4 An exception is a type of run-time error that occurs as a result of an unexpected error that was not detected by the compiler. It interrupts the normal flow of the program's execution.
    Русский

    Цель обучения 1.1.A: Представлять закономерности и алгоритмы, встречающиеся в повседневной жизни, с помощью письменного текста или диаграмм.

    • 1.1.A.1 Алгоритмы определяют пошаговые процессы, которые необходимо выполнить для выполнения задачи или решения проблемы. Эти алгоритмы могут быть представлены с помощью письменного текста или диаграмм.
    • 1.1.A.2 Последовательность определяет порядок выполнения шагов в процессе. Шаги в процессе выполняются по одному за другим.

    Цель обучения 1.1.B: Объяснять процесс компиляции и выполнения кода.

    • 1.1.B.1 Код может быть написан в любом текстовом редакторе; однако часто используется средство разработки (IDE), потому что оно предоставляет инструменты для программиста, чтобы писать, компилировать и запускать код.
    • 1.1.B.2 Компилятор проверяет код на наличие некоторых ошибок. Ошибки, обнаруживаемые компилятором, должны быть исправлены до того, как программу можно будет запустить.

    Цель обучения 1.1.C: Определять типы ошибок программирования.

    • 1.1.C.1 Синтаксическая ошибка — это ошибка в программе, в которой не соблюдены правила языка программирования. Эти ошибки обнаруживаются компилятором.
    • 1.1.C.2 Логическая ошибка — это ошибка в алгоритме или программе, которая вызывает неправильное или неожиданный результат. Эти ошибки обнаруживаются тестированием программы с использованием конкретных данных для проверки, дает ли она ожидаемый результат.
    • 1.1.C.3 Ошибка времени выполнения — это ошибка в программе, которая возникает во время выполнения программы. Ошибки времени выполнения обычно приводят к abnormalному завершению работы программы.
    • 1.1.C.4 Исключение — это тип ошибки времени выполнения, который возникает в результате неожиданной ошибки, не обнаруженной компилятором. Оно нарушает нормальный поток выполнения программы.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    An algorithm 算法 is a finite, step-by-step procedure that solves a problem. A program 程序 expresses an algorithm in a language a computer can run. Java is compiled 编译: the compiler 编译器 translates your source code into bytecode, which the Java Virtual Machine (JVM) runs. A syntax error 语法错误 (breaking the grammar) is caught by the compiler; a logic error 逻辑错误 (wrong result) is not – the program runs but misbehaves.

    Русский
    Исходный код на рабочей станции — программы пишутся, компилируются и выполняются как точные инструкции
    Исходный код на рабочей станции — программы пишутся, компилируются и выполняются как точные инструкции

    Алгоритм — это конечная пошаговая процедура решения задачи. Программа выражает алгоритм на языке, который может выполнить компьютер. Java является компилируемым: компилятор переводит ваш исходный код в байт-код, который выполняет виртуальная машина Java (JVM). Синтаксическая ошибка (нарушение грамматики) ловится компилятором; логическая ошибка (неправильный результат) нет — программа выполняется, но ведет себя неверно.

    Компилятор переводит всю программу целиком; интерпретатор выполняет её построчно
    Компилятор переводит всю программу целиком; интерпретатор выполняет её строчку за строчкой
    Несколько чипов процессора компьютера, вид снизу
    Ваша программа на Java компилируется в инструкции, которые выполняет центральный процессор, подобный одному из этих
    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    compiler/kəmˈpaɪlə/ компилятор
    syntax error/ˈsɪntæks ˈerə/ синтаксическая ошибка
    logic error/ˈlɒdʒɪk ˈerə/ логическая ошибка
    variable/ˈveərɪəbl/ переменной
    1.2

    Variables and Data Types · ⁨Переменные и типы данных⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.2.A: Identify the most appropriate data type category for a particular specification.

    • 1.2.A.1 A data type is a set of values and a corresponding set of operations on those values. Data types can be categorized as either primitive or reference.
    • 1.2.A.2 The primitive data types used in this course define the set of values and corresponding operations on those values for numbers and Boolean values.
    • 1.2.A.3 A reference type is used to define objects that are not primitive types.

    Learning Objective 1.2.B: Develop code to declare variables to store numbers and Boolean values.

    • 1.2.B.1 The three primitive data types used in this course are int, double, and boolean. An int value is an integer. A double value is a real number. A boolean value is either true or false.
      • Exclusion statement: The other five primitive data types (long, short, byte, float, and char) are outside the scope of the AP Computer Science A course and exam.
    • 1.2.B.2 A variable is a storage location that holds a value, which can change while the program is running. Every variable has a name and an associated data type. A variable of a primitive type holds a primitive value from that type.
    Русский

    Цель обучения 1.2.A: Определить наиболее подходящий тип данных для конкретного задания.

    • 1.2.A.1 Тип данных — это набор значений и соответствующий им набор операций над этими значениями. Типы данных можно классифицировать как примитивные или ссылочные.
    • 1.2.A.2 Примитивные типы данных, используемые в данном курсе, определяют набор значений и соответствующие операции над ними для чисел и логических значений.
    • 1.2.A.3 Ссылочный тип используется для определения объектов, которые не являются примитивными типами.

    Цель обучения 1.2.B: Написать код для объявления переменных хранения чисел и логических значений.

    • 1.2.B.1 Три примитивных типа данных, используемых в этом курсе: int, double и boolean. Значение int является целым числом. Значение double является вещественным числом. Значение boolean может быть либо true, либо false.
      • Исключение из программы: Остальные пять примитивных типов данных (long, short, byte, float и char) выходят за рамки курса и экзамена AP Computer Science A.
    • 1.2.B.2 Переменная — это место хранения, содержащее значение, которое может изменяться во время выполнения программы. У каждой переменной есть имя и связанный с ней тип данных. Переменная примитивного типа хранит примитивное значение этого типа.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    A variable 变量 is a named box that stores a value of a fixed type 类型. Java's main primitive types 基本类型 are int (whole numbers), double (decimals), and boolean (true/false). Declare with the type first:

    Русский

    Переменная — это именованная ячейка, хранящая значение фиксированного типа. Основные примитивные типы Java — это int (целые числа), double (дробные числа) и boolean (true/false). Объявляются типом сначала:

    Базовые типы данных Java, каждый из которых хранит определенный тип значения
    Базовые типы данных Java, каждый хранит типовых значений
    int score = 90;
    double price = 4.99;
    boolean passed = true;
    
    Explore · ⁨Исследовать⁩

    Explore how a variable holds one value at a time · ⁨Исследуйте, как переменная хранит одно значение за раз⁩

    A variable is a named box that stores one value of a fixed type. Step through the lines and watch each box take its value; notice that reassigning score overwrites the old number rather than making a new box. · ⁨Переменная — это именованная ячейка, хранящая одно значение фиксированного типа. Пройдитесь по строкам кода и следите, как каждая ячейка получает свое значение; обратите внимание, что повторное присваивание score перезаписывает старое число, а не создает новую ячейку.⁩

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    type/taɪp/ текст (типографика)
    primitive types/ˈprɪmɪtɪv taɪps/ простые типы данных
    expression/ekˈspreʃn/ выражение
    modulus/ˈmɒdjʊləs/ модуль
    escape sequence/eˈskeɪp ˈsiːkwəns/ последовательность выхода
    assignment/əˈsaɪnmənt/ присваиванием
    1.3

    Expressions and Output · ⁨Выражения и вывод⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.3.A: Develop code to generate output and determine the result that would be displayed.

    • 1.3.A.1 System.out.print and System.out.println display information on the computer display. System.out.println moves the cursor to a new line after the information has been displayed, while System.out.print does not.

    Learning Objective 1.3.B: Develop code to utilize string literals and determine the result of using string literals.

    • 1.3.B.1 A literal is the code representation of a fixed value.
    • 1.3.B.2 A string literal is a sequence of characters enclosed in double quotes.
    • 1.3.B.3 Escape sequences are special sequences of characters that can be included in a string. They start with a \ and have a special meaning in Java. Escape sequences used in this course include double quote \", backslash \\, and newline \n.

    Learning Objective 1.3.C: Develop code for arithmetic expressions and determine the result of these expressions.

    • 1.3.C.1 Arithmetic expressions, which consist of numeric values, variables, and operators, include expressions of type int and double.
    • 1.3.C.2 The arithmetic operators consist of addition +, subtraction -, multiplication *, division /, and remainder %. An arithmetic operation that uses two int values will evaluate to an int value. An arithmetic operation that uses at least one double value will evaluate to a double value.
      • Exclusion statement: Expressions that result in special double values (e.g., infinities and NaN) are outside the scope of the AP Computer Science A course and exam.
    • 1.3.C.3 When dividing numeric values that are both int values, the result is only the integer portion of the quotient. When dividing numeric values that use at least one double value, the result is the quotient.
    • 1.3.C.4 The remainder operator % is used to compute the remainder when one number a is divided by another number b.
      • Exclusion statement: The use of values less than 0 for a and the use of values less than or equal to 0 for b is outside the scope of the AP Computer Science A course and exam.
    • 1.3.C.5 Operators can be used to construct compound expressions. At compile time, numeric values are associated with operators according to operator precedence to determine how they are grouped. Parentheses can be used to modify operator precedence. Multiplication, division, and remainder have precedence over addition and subtraction. Operators with the same precedence are evaluated from left to right.
    • 1.3.C.6 An attempt to divide an integer by the integer zero will result in an ArithmeticException.
      • Exclusion statement: The use of dividing by zero when one numeric value is a double is outside the scope of the AP Computer Science A course and exam.
    Русский

    Цель обучения 1.3.A: Написать код для вывода информации и определить результат, который будет отображен.

    • 1.3.A.1 System.out.print и System.out.println выводят информацию на экран компьютера. System.out.println перемещает курсор на новую строку после вывода информации, тогда как System.out.print этого не делает.

    Цель обучения 1.3.B: Написать код для использования строковых литералов и определить результат их применения.

    • 1.3.B.1 Литерал — это кодовая запись фиксированного значения.
    • 1.3.B.2 Строковый литерал — это последовательность символов, заключенная в двойные кавычки.
    • 1.3.B.3 Последовательности экранирования — это специальные последовательности символов, которые могут быть включены в строку. Они начинаются со знака обратного слеша (\) и имеют специальное значение в Java. Последовательности экранирования, используемые в этом курсе: двойная кавычка \", обратный слеш \\ и символ новой строки \n.

    Цель обучения 1.3.C: Написать код для арифметических выражений и определить результат этих выражений.

    • 1.3.C.1 Арифметические выражения, состоящие из числовых значений, переменных и операторов, включают выражения типов int и double.
    • 1.3.C.2 Арифметические операторы включают сложение +, вычитание -, умножение *, деление / и остаток от деления %. Арифметическая операция, использующая два значения int, даст результат в виде значения int. Арифметическая операция, использующая хотя бы одно значение double, даст результат в виде значения double.
      • Исключение: Выражения, дающие специальные значения double (например, бесконечности и NaN), выходят за рамки курса и экзамена AP Computer Science A.
    • 1.3.C.3 При делении числовых значений, оба из которых являются int-значениями, результатом является только целая часть частного. При делении числовых значений, в которых используется хотя бы одно double-значение, результатом является частное.
    • 1.3.C.4 Оператор остатка от деления % используется для вычисления остатка, когда одно число a делится на другое число b.
      • Замечание об исключении: Использование значений меньше 0 для a и использование значений меньше или равных 0 для b выходит за рамки курса и экзамена AP Computer Science A.
    • 1.3.C.5 Операторы могут использоваться для создания составных выражений. На этапе компиляции числовые значения связываются с операторами согласно приоритету операторов для определения способа их группировки. Скобки могут использоваться для изменения приоритета операторов. Умножение, деление и остаток от деления имеют более высокий приоритет, чем сложение и вычитание. Операторы с одинаковым приоритетом вычисляются слева направо.
    • 1.3.C.6 Попытка разделить целое число на целую ноль приведет к возникновению ошибки ArithmeticException.
      • Замечание об исключении: Использование деления на ноль, когда одно числовое значение является double-значением, выходит за рамки курса и экзамена AP Computer Science A.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    An expression 表达式 combines values and operators to compute a result: + - * / and % (modulus 取模, the remainder). Integer division truncates: 7 / 2 is 3, while 7 % 2 is 1. Operator precedence follows math (*,/,% before +,-). Print with:

    Dividing an integer by the integer 0 (like 7 / 0) is not allowed and crashes at run time with an ArithmeticException. Inside a string, a backslash marks an escape sequence 转义序列: \" prints a double quote, \\ a single backslash, and \n starts a new line – so System.out.println("She said \"hi\""); prints She said "hi".

    Русский

    Выражение сочетает значения и операторы для вычисления результата: + - * / и % (остаток от деления, остаток). Целочисленное деление отбрасывает дробную часть: 7 / 2 равно 3, тогда как 7 % 2 равно 1. Приоритет операторов следует математике (*,/,% перед +,-). Печать с помощью:

    System.out.print("no newline");
    System.out.println("with newline");
    

    Деление целого числа на целое число 0 (например, на 7 / 0) запрещено и вызывает ошибку во время выполнения программы с возникновением исключения ArithmeticException. Внутри строки обратный слэш обозначает специальную последовательность: конструкция \" выводит двойную кавычку, \\ — одинарный обратный слэш, а \n начинает новую строку — поэтому вызов System.out.println("She said \"hi\""); выведет результат She said "hi".

    Explore · ⁨Исследовать⁩

    Explore the order of operations step by step · ⁨Исследуйте порядок выполнения операций шаг за шагом⁩

    Java applies *, /, % before + and -, working left to right. Watch each step and see why 2 + 3 * 4 is $14$, not $20$ — the multiplication happens first. · ⁨Java применяет *, /, % до + и -, работая слева направо. Наблюдайте за каждым шагом и поймите, почему 2 + 3 * 4 равно $14$, а не $20$ — умножение выполняется первым.⁩

    1.4

    Assignment Statements and Input · ⁨Операторы присваивания и ввод⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.4.A: Develop code for assignment statements with expressions and determine the value that is stored in the variable as a result of these statements.

    • 1.4.A.1 Every variable must be assigned a value before it can be used in an expression. That value must be from a compatible data type. A variable is initialized the first time it is assigned a value. Reference types can be assigned a new object or null if there is no object. The literal null is a special value used to indicate that a reference is not associated with any object.
    • 1.4.A.2 The assignment operator = allows a program to initialize or change the value stored in a variable. The value of the expression on the right is stored in the variable on the left.
      • Exclusion statement: The use of assignment operators inside expressions (e.g., a = b = 4; or a[i += 5]) is outside the scope of the AP Computer Science A course and exam.
    • 1.4.A.3 During execution, an expression is evaluated to produce a single value. The value of an expression has a type based on the evaluation of the expression.

    Learning Objective 1.4.B: Develop code to read input.

    • 1.4.B.1 Input can come in a variety of forms, such as tactile, audio, visual, or text. The Scanner class is one way to obtain text input from the keyboard.
      • Exclusion statement: Any specific form of input from the user is outside the scope of the AP Computer Science A course and exam.
    Русский

    Цель обучения 1.4.A: Писать код для операторов присваивания с выражениями и определять значение, которое сохраняется в переменной в результате этих операций.

    • 1.4.A.1 Каждой переменной должно быть присвоено значение до того, как она будет использована в выражении. Это значение должно принадлежать совместимому типу данных. Переменная инициализируется при первом присвоении ей значения. Типам ссылочных данных может быть присвоено новое значение объекта или null, если объект отсутствует. Буквальное значение null является специальным значением, используемым для указания на то, что ссылка не связана ни с каким объектом.
    • 1.4.A.2 Оператор присваивания = позволяет программе инициализировать или изменить значение, хранящееся в переменной. Значение выражения справа сохраняется в переменной слева.
      • Замечание об исключении: Использование операторов присваивания внутри выражений (например, a = b = 4; или a[i += 5]) выходит за рамки курса и экзамена AP Computer Science A.
    • 1.4.A.3 Во время выполнения выражение вычисляется для получения одного значения. Тип значения выражения определяется на основе его вычисления.

    Цель обучения 1.4.B: Писать код для чтения входных данных.

    • 1.4.B.1 Входные данные могут поступать в различных формах, таких как тактильные, аудиальные, визуальные или текстовые. Класс Scanner — это один из способов получения текстового ввода с клавиатуры.
      • Замечание об исключении: Любая конкретная форма ввода от пользователя выходит за рамки курса и экзамена AP Computer Science A.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    An assignment 赋值 x = expr; evaluates the right side and stores it in the left variable. Read input with a Scanner:

    Русский

    Присваивание x = expr; вычисляет правую сторону и сохраняет её в левую переменную. Считывайте ввод с помощью Scanner:

    Scanner in = new Scanner(System.in);
    int age = in.nextInt();
    String name = in.next();
    
    1.5

    Casting and Range of Variables · ⁨Приведение типов и диапазон переменных⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.5.A: Develop code to cast primitive values to different primitive types in arithmetic expressions and determine the value that is produced as a result.

    • 1.5.A.1 The casting operators (int) and (double) can be used to convert from a double value to an int value (or vice versa).
    • 1.5.A.2 Casting a double value to an int value causes the digits to the right of the decimal point to be truncated.
    • 1.5.A.3 Some code causes int values to be automatically cast (widened) to double values.
    • 1.5.A.4 Values of type double can be rounded to the nearest integer by (int)(x + 0.5) for non-negative numbers or (int)(x - 0.5) for negative numbers.

    Learning Objective 1.5.B: Describe conditions when an integer expression evaluates to a value out of range.

    • 1.5.B.1 The constant Integer.MAX_VALUE holds the value of the largest possible int value. The constant Integer.MIN_VALUE holds the value of the smallest possible int value.
    • 1.5.B.2 Integer values in Java are represented by values of type int, which are stored using a finite amount (4 bytes) of memory. Therefore, an int value must be in the range from Integer.MIN_VALUE to Integer.MAX_VALUE inclusive.
    • 1.5.B.3 If an expression would evaluate to an int value outside of the allowed range, an integer overflow occurs. The result is an int value in the allowed range but not necessarily the value expected.

    Learning Objective 1.5.C: Describe conditions that limit accuracy of expressions.

    • 1.5.C.1 Computers allot a specified amount of memory to store data based on the data type. If an expression would evaluate to a double that is more precise than can be stored in the allotted amount of memory, a round-off error occurs. The result will be rounded to the representable value. To avoid rounding errors that naturally occur, use int values.
      • Exclusion statement: Other special decimal data types that can be used to avoid rounding errors are outside the scope of the AP Computer Science A course and exam.
    Русский

    Цель обучения 1.5.A: Писать код для приведения примитивных значений к различным примитивным типам в арифметических выражениях и определять получаемое в результате значение.

    • 1.5.A.1 Операторы приведения (int) и (double) могут использоваться для преобразования значения типа double в значение типа int (или наоборот).
    • 1.5.A.2 Приведение значения типа double к типу int приводит к отбрасыванию цифр после десятичной точки.
    • 1.5.A.3 Некоторые фрагменты кода вызывают автоматическое приведение (расширение) значений типа int к значениям типа double.
    • 1.5.A.4 Значения типа double можно округлить до ближайшего целого числа с помощью (int)(x + 0.5) для неотрицательных чисел или (int)(x - 0.5) для отрицательных чисел.

    Цель обучения 1.5.B: Описывать условия, при которых целочисленное выражение вычисляется в значение вне допустимого диапазона.

    • 1.5.B.1 Константа Integer.MAX_VALUE содержит значение максимально возможного значения типа int. Константа Integer.MIN_VALUE содержит значение минимально возможного значения типа int.
    • 1.5.B.2 Целочисленные значения в Java представлены значениями типа int, которые хранятся с использованием конечного объема памяти (4 байта). Следовательно, значение типа int должно находиться в диапазоне от Integer.MIN_VALUE до Integer.MAX_VALUE включительно.
    • 1.5.B.3 Если результат вычисления выражения должен был бы стать значением типа int, выходящим за пределы допустимого диапазона, происходит переполнение целого числа. Результатом станет значение типа int, находящееся в допустимом диапазоне, но не обязательно ожидаемое значение.

    Цель обучения 1.5.C: Описывать условия, ограничивающие точность выражений.

    • 1.5.C.1 Компьютеры выделяют определенное количество памяти для хранения данных в зависимости от типа данных. Если результат вычисления выражения должен был бы стать значением типа double, которое имеет большую точность, чем может быть сохранено в выделенном объеме памяти, возникает ошибка округления. Результат будет округлен до представимого значения. Чтобы избежать естественных ошибок округления, используйте значения типа int.
      • Замечание об исключении: Другие специальные типы данных для десятичных дробей, которые можно использовать для предотвращения ошибок округления, выходят за рамки курса и экзамена AP Computer Science A.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English
    int range, overflow and truncation

    Each type has a fixed range; an int overflows past about 2.1 billion. Casting 类型转换 converts between types. Widening (int to double) is automatic; narrowing needs an explicit cast, which truncates (does not round):

    Exam skill: watch for integer division producing a truncated result when a decimal was expected – cast one operand to double first.

    Worked example. Trace each expression:

    • 7 / 2 → 3 (both int, so division truncates);
    • 7.0 / 2 → 3.5 (one double forces real division);
    • 7 % 2 → 1 (the remainder);
    • (double) 7 / 2 → 3.5 (the cast binds tighter than /, so it is 7.0 / 2);
    • (double) (7 / 2) → 3.0 (the parentheses compute 7 / 2 = 3 in int first, then widen).

    The last two look alike but differ – the position of the cast decides whether the truncation happens.

    Русский
    Диапазон int, переполнение и усечение

    У каждого типа есть фиксированный диапазон; при int происходит переполнение свыше примерно 2,1 миллиарда. Приведение типов (casting) преобразует между типами. Расширение (от int к double) происходит автоматически; сужение требует явного приведения, которое усекает (не округляет):

    double avg = (double) total / count;   // force real division
    int whole = (int) 3.9;                 // 3, truncated
    

    Навык для экзамена: следите за целочисленным делением, дающим усеченный результат вместо ожидаемого дробного — приведите один из операндов к double заранее.

    Разобранный пример. Проследите каждое выражение:

    • 7 / 2 → 3 (оба int, поэтому деление усекает);
    • 7.0 / 2 → 3.5 (наличие одного double вынуждает вещественное деление);
    • 7 % 2 → 1 (остаток от деления);
    • (double) 7 / 2 → 3.5 (приведение типа связывается строже, чем /, поэтому результат является 7.0 / 2);
    • (double) (7 / 2) → 3.0 (скобки вычисляют 7 / 2 = 3 в int сначала, затем расширяют тип).

    Последние два выглядят похоже, но различаются — положение приведения типа определяет, где происходит отбрасывание дробной части.

    Explore · ⁨Исследовать⁩

    Why int and double store numbers differently · ⁨Почему int и double хранят числа по-разному⁩

    An int holds only whole numbers in a fixed range; a double stores a mantissa and an exponent, trading exactness for a huge range. Casting double→int throws away the fraction, and a value past an int's range overflows. · ⁨Значение int хранит только целые числа в фиксированном диапазоне; double хранит мантиссу и экспоненту, жертвуя точностью ради огромного диапазона. Приведение типа double→int отбрасывает дробную часть, а значение, выходящее за пределы диапазона int, вызывает переполнение.⁩

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    Casting/ˈkæstɪŋ/ Приведение типов
    library/ˈlaɪbrəri/ библиотекой
    abstraction/əbˈstrækʃn/ абстракцией
    Comments/ˈkɒments/ Комментарии
    method signature/ˈmeθəd ˈsɪɡnɪtʃə/ подпись метода
    arguments/ˈɑːɡjuːmənts/ аргументы
    class (static) method/klæs ˈmeθəd/ классический (статический) метод
    1.6

    Compound Assignment Operators · ⁨Операторы составного присваивания⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.6.A: Develop code for assignment statements with compound assignment operators and determine the value that is stored in the variable as a result.

    • 1.6.A.1 Compound assignment operators +=, -=, *=, /=, and %= can be used in place of the assignment operator in numeric expressions. A compound assignment operator performs the indicated arithmetic operation between the value on the left and the value on the right and then assigns the result to the variable on the left.
    • 1.6.A.2 The post-increment operator ++ and post-decrement operator -- are used to add 1 or subtract 1 from the stored value of a numeric variable. The new value is assigned to the variable.
      • Exclusion statement: The use of increment and decrement operators in prefix form (e.g., ++x) is outside the scope of the AP Computer Science A course and exam. The use of increment and decrement operators inside other expressions (e.g., arr[x++]) is outside the scope of the AP Computer Science A course and exam.
    Русский

    Цель обучения 1.6.A: Писать код для операторов присваивания со составными операторами присваивания и определять значение, которое сохраняется в переменной в результате.

    • 1.6.A.1 Компоунд-присваивание операторы (+=, -=, *=, /= и %=) могут использоваться вместо оператора присваивания в числовых выражениях. Компоунд-оператор выполняет указанную арифметическую операцию между значением слева и значением справа, а затем присваивает результат переменной слева.
    • 1.6.A.2 Оператор постинкремента ++ и оператор постдеcrementa -- используются для прибавления 1 или вычитания 1 из сохраняемого значения числовой переменной. Новое значение присваивается переменной.
      • Исключение из программы: Использование операторов инкремента и декремента в префиксной форме (например, ++x) выходит за рамки курса и экзамена AP Computer Science A. Использование операторов инкремента и декремента внутри других выражений (например, arr[x++]) выходит за рамки курса и экзамена AP Computer Science A.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Shorthands combine an operation with assignment: x += 5 means x = x + 5; likewise -=, *=, /=, %=. The increment and decrement operators x++ and x-- add or subtract one.

    Русский

    Сокращенные записи объединяют операцию с присваиванием: x += 5 означает x = x + 5; аналогично для -=, *=, /=, %=. Операторы инкремента и декремента x++ и x-- прибавляют или отнимают единицу.

    1.7

    Application Program Interface (API) and Libraries · ⁨Программный интерфейс приложения (API) и библиотеки⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.7.A: Identify the attributes and behaviors of a class found in the libraries contained in an API.

    • 1.7.A.1 Libraries are collections of classes. An application programming interface (API) specification informs the programmer how to use those classes. Documentation found in API specifications and libraries is essential to understanding the attributes and behaviors of a class defined by the API. A class defines a specific reference type. Classes in the APIs and libraries are grouped into packages. Existing classes and class libraries can be utilized to create objects.
    • 1.7.A.2 Attributes refer to the data related to the class and are stored in variables. Behaviors refer to what instances of the class can do (or what can be done with them) and are defined by methods.
    Русский

    Цель обучения 1.7.A: Определять атрибуты и поведение класса, содержащегося в библиотеках API.

    • 1.7.A.1 Библиотеки — это наборы классов. Спецификация прикладного программного интерфейса (API) информирует разработчика о том, как использовать эти классы. Документация, содержащаяся в спецификациях API и библиотеках, необходима для понимания атрибутов и поведения класса, определенного API. Класс определяет конкретный ссылочный тип. Классы в API и библиотеках сгруппированы по пакетам. Существующие классы и библиотеки классов могут использоваться для создания объектов.
    • 1.7.A.2 Атрибуты относятся к данным, связанным с классом, и хранятся в переменных. Поведение относится к тому, что экземпляры класса могут делать (или что можно сделать с ними), и определяется методами.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    An API (Application Programming Interface) 应用程序接口 is the published list of classes and methods you may use. A library 库 is a collection of ready-made classes (like Math, String, Scanner). You read the API documentation to learn what a method needs (its parameters) and returns, without seeing its inner code – an example of abstraction 抽象.

    Русский

    API (Application Programming Interface) — это опубликованный список классов и методов, которые вы можете использовать. Библиотека — это набор готовых классов (например, Math, String, Scanner). Вы изучаете документацию API, чтобы узнать, что требует метод (его параметры) и что возвращает, не видя его внутреннего кода — это пример абстрагирования.

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    algorithm/ˈælɡərɪθəm/ алгоритм
    program/ˈprəʊɡræm/ программа
    compiled/kəmˈpaɪld/ скомпилированный
    Interface/ˈɪntəfeɪs/ Интерфейс
    1.8

    Documentation with Comments · ⁨Документация с комментариями⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.8.A: Describe the functionality and use of code through comments.

    • 1.8.A.1 Comments are written for both the original programmer and other programmers to understand the code and its functionality, but are ignored by the compiler and are not executed when the program is run. Three types of comments in Java include /* */, which generates a block of comments; //, which generates a comment on one line; and /** */, which are Javadoc comments and are used to create API documentation.
    • 1.8.A.2 A precondition is a condition that must be true just prior to the execution of a method in order for it to behave as expected. There is no expectation that the method will check to ensure preconditions are satisfied.
    • 1.8.A.3 A postcondition is a condition that must always be true after the execution of a method. Postconditions describe the outcome of the execution in terms of what is being returned or the current value of the attributes of an object.
    Русский

    Цель обучения 1.8.A: Описывать функциональность и использование кода с помощью комментариев.

    • 1.8.A.1 Комментарии пишутся как для первоначального разработчика, так и для других программистов, чтобы они могли понять код и его функциональность, но компилятор игнорирует их, и они не выполняются при запуске программы. В Java существует три типа комментариев: /* */, который создает блок комментариев; //, который создает комментарий в одну строку; и /** */, которые являются Javadoc-комментариями и используются для создания документации API.
    • 1.8.A.2 Предусловие — это условие, которое должно быть истинным непосредственно перед выполнением метода, чтобы он вел себя ожидаемым образом. Не предполагается, что метод будет проверять выполнение предусловий.
    • 1.8.A.3 Постусловие — это условие, которое всегда должно быть истинным после выполнения метода. Постусловия описывают результат выполнения в терминах возвращаемого значения или текущего значения атрибутов объекта.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Comments 注释 are ignored by the compiler but explain code to humans: // for a single line, /* ... */ for a block, and /** ... */ for a Javadoc comment that documents a method's purpose, parameters, and return value. Precise preconditions and postconditions are written here.

    Русский

    Комментарии игнорируются компилятором, но объясняют код людям: // для одной строки, /* ... */ для блока, а /** ... */ для Javadoc-комментария, который документирует назначение метода, его параметры и возвращаемое значение. Здесь также записывают точные предусловия и постусловия.

    1.9

    Method Signatures · ⁨Подписи методов⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.9.A: Identify the correct method to call based on documentation and method signatures.

    • 1.9.A.1 A method is a named block of code that only runs when it is called. A block of code is any section of code that is enclosed in braces. Procedural abstraction allows a programmer to use a method by knowing what the method does even if they do not know how the method was written.
    • 1.9.A.2 A parameter is a variable declared in the header of a method or constructor and can be used inside the body of the method. This allows values or arguments to be passed and used by a method or constructor. A method signature for a method with parameters consists of the method name and the ordered list of parameter types. A method signature for a method without parameters consists of the method name and an empty parameter list.

    Learning Objective 1.9.B: Describe how to call methods.

    • 1.9.B.1 A void method does not have a return value and is therefore not called as part of an expression.
    • 1.9.B.2 A non-void method returns a value that is the same type as the return type in the header. To use the return value when calling a non-void method, it must be stored in a variable or used as part of an expression.
    • 1.9.B.3 An argument is a value that is passed into a method when the method is called. The arguments passed to a method must be compatible in number and order with the types identified in the parameter list of the method signature. When calling methods, arguments are passed using call by value. Call by value initializes the parameters with copies of the arguments.
    • 1.9.B.4 Methods are said to be overloaded when there are multiple methods with the same name but different signatures.
    • 1.9.B.5 A method call interrupts the sequential execution of statements, causing the program to first execute the statements in the method before continuing. Once the last statement in the method has been executed or a return statement is executed, the flow of control is returned to the point immediately following where the method was called.
    Русский

    Цель обучения 1.9.A: Определять правильный метод для вызова на основе документации и подписей методов.

    • 1.9.A.1 Метод — это именованный блок кода, который выполняется только тогда, когда он вызывается. Блок кода — это любой участок кода, заключенный в фигурные скобки. Процедурная абстракция позволяет программисту использовать метод, зная, что он делает, даже если он не знает, как именно он написан.
    • 1.9.A.2 Параметр — это переменная, объявленная в заголовке метода или конструктора, и может использоваться внутри тела метода. Это позволяет передавать значения или аргументы и использовать их методом или конструктором. Подпись метода для метода с параметрами состоит из имени метода и упорядоченного списка типов параметров. Подпись метода для метода без параметров состоит из имени метода и пустого списка параметров.

    Цель обучения 1.9.B: Описывать, как вызывать методы.

    • 1.9.B.1 Void-метод не имеет возвращаемого значения и поэтому не используется как часть выражения.
    • 1.9.B.2 Non-void-метод возвращает значение того же типа, что и тип возвращаемого значения в заголовке. Чтобы использовать возвращаемое значение при вызове non-void-метода, оно должно быть сохранено в переменной или использовано как часть выражения.
    • 1.9.B.3 Аргумент — это значение, которое передается в метод при его вызове. Аргументы, передаваемые методу, должны быть совместимы по количеству и порядку с типами, указанными в списке параметров подписи метода. При вызове методов аргументы передаются по значению. Передача по значению инициализирует параметры копиями аргументов.
    • 1.9.B.4 Методы называются перегруженными, когда существует несколько методов с одним именем, но разными подписями.
    • 1.9.B.5 Вызов метода прерывает последовательное выполнение инструкций, заставляя программу сначала выполнить инструкции в методе, а затем продолжить. После выполнения последней инструкции в методе или выполнения инструкции return управление возвращается в точку сразу после места вызова метода.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    A method signature 方法签名 is a method's name plus its parameter types, e.g. nextInt() or substring(int, int). To call a method you must supply arguments 实参 that match the parameters in number, type, and order. The method header (the full declaration) also states the return type – the type of value the method gives back (void if none) – but the return type is not part of the signature, which is why two methods cannot differ by return type alone.

    Русский

    Подпись метода — это имя метода вместе с типами его параметров, например nextInt() или substring(int, int). Чтобы вызвать метод, необходимо передать аргументы, соответствующие параметрам по количеству, типу и порядку. Заголовок метода (полное объявление) также указывает тип возвращаемого значения — тип данных, который метод возвращает (void, если ничего не возвращается), но тип возвращаемого значения не входит в подпись, поэтому два метода не могут отличаться только типом возвращаемого значения.

    1.10

    Calling Class Methods · ⁨Вызов статических методов класса⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.10.A: Develop code to call class methods and determine the result of those calls.

    • 1.10.A.1 Class methods are associated with the class, not instances of the class. Class methods include the keyword static in the header before the method name.
    • 1.10.A.2 Class methods are typically called using the class name along with the dot operator. When the method call occurs in the defining class, the use of the class name is optional in the call.
    Русский

    Цель обучения 1.10.A: Написать код для вызова методов класса и определить результат этих вызовов.

    • 1.10.A.1 Методы класса связаны с самим классом, а не с его экземплярами. Методы класса включают ключевое слово static в заголовке перед именем метода.
    • 1.10.A.2 Методы класса обычно вызываются с использованием имени класса вместе с точечным оператором. Когда вызов метода происходит внутри определяющего класса, использование имени класса в вызове является необязательным.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    A class (static) method 类方法 belongs to the class itself, so you call it on the class name: ClassName.method(args). No object is needed.

    Русский

    Статический метод класса принадлежит самому классу, поэтому вы вызываете его по имени класса: ClassName.method(args). Объект при этом не требуется.

    Explore · ⁨Исследовать⁩

    Follow a class-method call on the stack · ⁨Отслеживайте вызов метода класса в стеке⁩

    Calling a class method like Math.max pushes a new frame onto the call stack; when the method returns a value, its frame pops and control goes back to the caller. Step through to watch the stack grow and shrink. · ⁨Вызов метода класса, например Math.max, помещает новый фрейм в стек вызовов; когда метод возвращает значение, его фрейм удаляется из стека, и управление возвращается вызывающей функции. Пройдитесь по шагам, чтобы увидеть, как стек растет и уменьшается.⁩

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    class/klæs/ класс
    1.11

    Math Class · ⁨Класс Math⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.11.A: Develop code to write expressions that incorporate calls to built-in mathematical libraries and determine the value that is produced as a result.

    • 1.11.A.1 The Math class is part of the java.lang package. Classes in the java.lang package are available by default.
    • 1.11.A.2 The Math class contains only class methods. The following Math class methods—including what they do and when they are used—are part of the Java Quick Reference:
      • static int abs(int x) returns the absolute value of an int value.
      • static double abs(double x) returns the absolute value of a double value.
      • static double pow(double base, double exponent) returns the value of the first parameter raised to the power of the second parameter.
      • static double sqrt(double x) returns the nonnegative square root of a double value.
      • static double random() returns a double value greater than or equal to 0.0 and less than 1.0.
    • 1.11.A.3 The values returned from Math.random() can be manipulated using arithmetic and casting operators to produce a random int or double in a defined range based on specified criteria. Each endpoint of the range can be inclusive, meaning the value is included, or exclusive, meaning the value is not included.
    Русский

    Цель обучения 1.11.A: Написать код для создания выражений, включающих вызовы встроенных математических библиотек, и определить значение, которое получается в результате.

    • 1.11.A.1 Класс Math является частью пакета java.lang. Классы из пакета java.lang доступны по умолчанию.
    • 1.11.A.2 Класс Math содержит только методы класса. Следующие методы класса Math — включая их назначение и области применения — входят в справочник по Java:
      • static int abs(int x) возвращает абсолютное значение значения int.
      • static double abs(double x) возвращает абсолютное значение значения double.
      • static double pow(double base, double exponent) возвращает значение первого параметра, возведенного в степень второго параметра.
      • static double sqrt(double x) возвращает неотрицательный квадратный корень из значения double.
      • static double random() возвращает значение double, большее или равное 0.0 и меньшее 1.0.
    • 1.11.A.3 Значения, возвращаемые из Math.random(), можно преобразовывать с помощью арифметических и операторов приведения типов, чтобы получить случайное целое число int или вещественное число double в заданном диапазоне на основе указанных критериев. Каждый конец диапазона может быть включительным, то есть значение включено, или исключающим, то есть значение не включено.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    The Math class provides static math methods: Math.abs(x), Math.pow(base, exp), Math.sqrt(x), and Math.random() (a double in $[0,1)$). To get a random integer from 0 to n-1: (int)(Math.random() * n).

    Русский

    Класс Math предоставляет статические математические методы: Math.abs(x), Math.pow(base, exp), Math.sqrt(x) и Math.random() (возвращающий double из $[0,1)$). Чтобы получить случайное целое число от 0 до n-1: (int)(Math.random() * n).

    1.12

    Objects: Instances of Classes · ⁨Объекты: экземпляры классов⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.12.A: Explain the relationship between a class and an object.

    • 1.12.A.1 An object is a specific instance of a class with defined attributes. A class is the formal implementation, or blueprint, of the attributes and behaviors of an object.
    • 1.12.A.2 A class hierarchy can be developed by putting common attributes and behaviors of related classes into a single class called a superclass. Classes that extend a superclass, called subclasses, can draw upon the existing attributes and behaviors of the superclass without replacing these in the code. This creates an inheritance relationship from the subclasses to the superclass.
      • Exclusion statement: Designing and implementing inheritance relationships are outside the scope of the AP Computer Science A course and exam.
    • 1.12.A.3 All classes in Java are subclasses of the Object class.

    Learning Objective 1.12.B: Develop code to declare variables to store reference types.

    • 1.12.B.1 A variable of a reference type holds an object reference, which can be thought of as the memory address of that object.
    Русский

    Цель обучения 1.12.A: Объяснить связь между классом и объектом.

    • 1.12.A.1 Объект — это конкретный экземпляр класса с определенными атрибутами. Класс — это формальная реализация, или чертеж, атрибутов и поведения объекта.
    • 1.12.A.2 Иерархию классов можно построить, поместив общие атрибуты и поведение родственных классов в один класс, называемый надклассом. Классы, которые расширяют надкласс (называемые подклассами), могут использовать существующие атрибуты и поведение надкласса без их замены в коде. Это создает отношение наследования от подклассов к надклассу.
      • Исключение: Проектирование и реализация отношений наследования находятся вне рамок курса и экзамена AP Computer Science A.
    • 1.12.A.3 Все классы в Java являются подклассами класса Object.

    Цель обучения 1.12.B: Написать код для объявления переменных для хранения ссылочных типов.

    • 1.12.B.1 Переменная ссылочного типа хранит ссылку на объект, которую можно рассматривать как адрес памяти этого объекта.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English
    = copies the reference, not the object

    A class 类 is a blueprint; an object 对象 is a concrete instance 实例 built from it. A class bundles data (fields) with behavior (methods) – the heart of object-oriented programming 面向对象编程. String, Scanner, and ArrayList are all classes you instantiate.

    Classes can be organised into a hierarchy. A superclass 父类 holds attributes and behaviors shared by several subclasses 子类 that extend it – an inheritance relationship 继承关系. Every class in Java is ultimately a subclass of the built-in Object class, which is why every object already has a toString method; writing a subclass method with the same signature as a superclass one is method overriding 方法重写. (Designing your own inheritance is beyond this course, but you are expected to recognise this vocabulary.)

    Русский
    = копирует ссылку, а не объект

    Класс — это чертеж, а объект — конкретный экземпляр, созданный на его основе. Класс объединяет данные (поля) с поведением (методами) — это основа объектно-ориентированного программирования. String, Scanner и ArrayList — это все классы, которые вы создаете (инстанцируете).

    Классы можно организовывать в иерархию. Суперкласс содержит атрибуты и поведение, общие для нескольких подклассов, которые extend его — это отношение наследования. Каждый класс в Java в конечном итоге является подклассом встроенного класса Object, поэтому у каждого объекта уже есть метод toString; определение метода в подклассе с той же подписью, что и в суперклассе, называется переопределением метода. (Проектирование собственной иерархии выходит за рамки этого курса, но вы должны уметь распознавать эту терминологию.)

    Диаграмма классов: приватные атрибуты и публичные методы
    Диаграмма классов: приватные атрибуты и публичные методы
    Класс — это чертеж; каждый объект — один экземпляр, построенный на его основе
    Класс — это чертеж; каждый объект — один экземпляр, построенный на его основе
    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    object/ˈɒbdʒekt/ самого тела
    instance/ˈɪnstəns/ экземпляр
    object-oriented programming/ˈɒbdʒekt ˈɔːrɪəntɪd ˈprəʊɡræmɪŋ/ объектно-ориентированное программирование
    superclass/ˈsuːpəklæs/ суперкласс
    subclasses/ˈsʌbklæsɪz/ подклассы
    inheritance relationship/ɪnˈherɪtəns rɪˈleɪʃənʃɪp/ наследование
    method overriding/ˈmeθəd ˌəʊvəˈraɪdɪŋ/ переопределение метода
    Instantiation/ˌɪnstænʃɪˈeɪʃn/ инстанцирование
    constructor/kənˈstrʌktə/ конструктор
    reference/ˈrefrəns/ отсчёта
    1.13

    Object Creation and Storage (Instantiation) · ⁨Создание объектов и их хранение (инстанцирование)⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.13.A: Identify, using its signature, the correct constructor being called.

    • 1.13.A.1 A class contains constructors that are called to create objects. They have the same name as the class.
    • 1.13.A.2 A constructor signature consists of the constructor's name, which is the same as the class name, and the ordered list of parameter types. The parameter list, in the header of a constructor, lists the types of the values that are passed and their variable names.
    • 1.13.A.3 Constructors are said to be overloaded when there are multiple constructors with different signatures.

    Learning Objective 1.13.B: Develop code to declare variables of the correct types to hold object references.

    • 1.13.B.1 A variable of a reference type holds an object reference or, if there is no object, null.

    Learning Objective 1.13.C: Develop code to create an object by calling a constructor.

    • 1.13.C.1 An object is typically created using the keyword new followed by a call to one of the class's constructors.
    • 1.13.C.2 Parameters allow constructors to accept values to establish the initial values of the attributes of the object.
    • 1.13.C.3 A constructor argument is a value that is passed into a constructor when the constructor is called. The arguments passed to a constructor must be compatible in order and number with the types identified in the parameter list in the constructor signature. When calling constructors, arguments are passed using call by value. Call by value initializes the parameters with copies of the arguments.
    • 1.13.C.4 A constructor call interrupts the sequential execution of statements, causing the program to first execute the statements in the constructor before continuing. Once the last statement in the constructor has been executed, the flow of control is returned to the point immediately following where the constructor was called.
    Русский

    Цель обучения 1.13.A: Определить по сигнатуре правильный вызываемый конструктор.

    • 1.13.A.1 Класс содержит конструкторы, которые вызываются для создания объектов. Они имеют то же имя, что и класс.
    • 1.13.A.2 Сигнатура конструктора состоит из имени конструктора (которое совпадает с именем класса) и упорядоченного списка типов параметров. Список параметров в заголовке конструктора перечисляет типы передаваемых значений и имена их переменных.
    • 1.13.A.3 Говорят, что конструкторы перегружены, когда существует несколько конструкторов с различными сигнатурами.

    Цель обучения 1.13.B: Написать код для объявления переменных правильных типов для хранения ссылок на объекты.

    • 1.13.B.1 Переменная ссылочного типа хранит ссылку на объект или, если объекта нет, значение null.

    Цель обучения 1.13.C: Написать код для создания объекта путем вызова конструктора.

    • 1.13.C.1 Объект обычно создается с использованием ключевого слова new, за которым следует вызов одного из конструкторов класса.
    • 1.13.C.2 Параметры позволяют конструкторам принимать значения для установки начальных значений атрибутов объекта.
    • 1.13.C.3 Аргумент конструктора — это значение, передаваемое в конструктор при его вызове. Аргументы, передаваемые в конструктор, должны быть совместимы по порядку и количеству с типами, указанными в списке параметров сигнатуры конструктора. При вызове конструкторов аргументы передаются по значению. Передача по значению инициализирует параметры копиями аргументов.
    • 1.13.C.4 Вызов конструктора прерывает последовательное выполнение инструкций, заставляя программу сначала выполнить инструкции в конструкторе, а затем продолжить. После выполнения последней инструкции в конструкторе управление возвращается в точку, непосредственно следующую за местом вызова конструктора.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Instantiation 实例化 creates an object with the new keyword, which calls a constructor 构造函数:

    The variable holds a reference 引用 (the object's address), not the object itself. Two references can point to the same object; comparing them with == compares addresses, not contents.

    A reference can also point to nothing: the special value null 空值 means "not attached to any object". Calling a method on a null reference crashes at run time with a NullPointerException. Guard against it by testing with ==/!= and checking null first, so && short-circuits before the method runs: if (s != null && s.length() > 0).

    Русский

    Инстанцирование создает объект с помощью ключевых слов new, которое вызывает конструктор:

    Scanner in = new Scanner(System.in);
    String s = new String("hi");   // or just "hi"
    

    Переменная хранит ссылку (адрес объекта), а не сам объект. Две ссылки могут указывать на один и тот же объект; сравнение их с помощью == сравнивает адреса, а не содержимое.

    Ссылка также может не указывать ни на какой объект: специальное значение null означает «не привязано ни к какому объекту». Вызов метода на ссылке null вызывает ошибку во время выполнения программы с возникновением исключения NullPointerException. Избегайте этого, проверяя ссылку с помощью оператора /==/!= и проверяя null первым, чтобы оператор && выполнил короткое замыкание до вызова метода: условие if (s != null && s.length() > 0).

    Примитивная переменная хранит свое значение напрямую, ссылка хранит стрелку к объекту
    Примитивная переменная хранит свое значение напрямую, ссылка хранит стрелку к объекту
    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    null/nʌl/ null
    instance method/ˈɪnstəns ˈmeθəd/ метод экземпляра
    immutable/ɪˈmjuːtəbl/ неизменяемыми
    1.14

    Calling Instance Methods · ⁨Вызов экземплярных методов⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 1.14.A: Develop code to call instance methods and determine the result of these calls.

    • 1.14.A.1 Instance methods are called on objects of the class. The dot operator is used along with the object name to call instance methods.
    • 1.14.A.2 A method call on a null reference will result in a NullPointerException.
    Русский

    Цель обучения 1.14.A: Написать код для вызова методов экземпляра и определить результат этих вызовов.

    • 1.14.A.1 Методы экземпляра вызываются на объектах данного класса. Для вызова методов экземпляра используется точечный оператор вместе с именем объекта.
    • 1.14.A.2 Вызов метода на ссылке null приведет к возникновению ошибки NullPointerException.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    An instance method 实例方法 acts on a specific object, so you call it on the object reference: object.method(args). Example: in.nextInt(), word.length().

    Русский

    Экземплярный метод действует на конкретный объект, поэтому вы вызываете его по ссылке на объект: object.method(args). Пример: in.nextInt(), word.length().

    1.15

    String Manipulation · ⁨Манипуляция со строками⁩

    Syllabus · ⁨Программа⁩
    Learning ObjectiveEssential Knowledge

    1.15.A
    Develop code to create string objects and determine the result of creating and combining strings.

    • 1.15.A.1 A String object represents a sequence of characters and can be created by using a string literal or by calling the String class constructor.
    • 1.15.A.2 The String class is part of the java.lang package. Classes in the java.lang package are available by default.
    • 1.15.A.3 A String object is immutable, meaning once a String object is created, its attributes cannot be changed. Methods called on a String object do not change the content of the String object.
    • 1.15.A.4 Two String objects can be concatenated together or combined using the + or += operator, resulting in a new String object. A primitive value can be concatenated with a String object. This causes the implicit conversion of the primitive value to a String object.
    • 1.15.A.5 A String object can be concatenated with any object, which implicitly calls the object's toString method (a behavior that is guaranteed to exist by the inheritance relationship every class has with the Object class). An object's toString method returns a string value representing the object. Subclasses of Object often override the toString method with class-specific implementation. Method overriding occurs when a public method in a subclass has the same method signature as a public method in the superclass, but the behavior of the method is specific to the subclass.
      • Exclusion statement: Overriding the toString method of a class is outside the scope of the AP Computer Science A course and exam.

    1.15.B
    Develop code to call methods on string objects and determine the result of calling these methods.

    • 1.15.B.1 A String object has index values from 0 to one less than the length of the string. Attempting to access indices outside this range will result in a StringIndexOutOfBoundsException.
    • 1.15.B.2 The following String methods—including what they do and when they are used—are part of the Java Quick Reference:
      • int length() returns the number of characters in a String object.
      • String substring(int from, int to) returns the substring beginning at index from and ending at index to - 1.
      • String substring(int from) returns substring(from, length()).
      • int indexOf(String str) returns the index of the first occurrence of str; returns -1 if not found.
      • boolean equals(Object other) returns true if this corresponds to the same sequence of characters as other; returns false otherwise.
      • int compareTo(String other) returns a value < 0 if this is less than other; returns zero if this is equal to other; returns a value > 0 if this is greater than other. Strings are ordered based upon the alphabet.
      • Exclusion statement: Using the equals method to compare one String object with an object of a type other than String is outside the scope of the AP Computer Science A course and exam.
    • 1.15.B.3 A string identical to the single element substring at position index can be created by calling substring(index, index + 1).

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English
    Strings are immutable

    String objects are immutable 不可变 – methods return a new string rather than changing the original. Key methods (all indices start at 0):

    Exam skill: substring(a, b) includes index a but excludes b, and String comparison must use .equals, not == – two of the most-tested String pitfalls.

    Worked example. Let String s = "COMPUTER"; (indices 0–7). Then s.length() is 8; s.substring(0, 4) is "COMP" (indices 0,1,2,3 – index 4 excluded); s.substring(4) is "UTER" (from index 4 to the end); s.indexOf("PU") is 3; and s.indexOf("X") is -1 (not found). Counting the excluded endpoint of substring is the single most common slip.

    Asking for an index outside 0 to length()-1 (a bad substring or charAt argument, e.g. s.substring(0, 20) here) crashes with a StringIndexOutOfBoundsException – the String cousin of the array-index error.

    Русский
    Строки неизменяемы

    Объекты String являются неизменяемыми — методы возвращают новую строку, а не изменяют исходную. Ключевые методы (все индексы начинаются с 0):

    s.length();            // number of characters
    s.substring(2, 5);     // chars at index 2,3,4 (5 excluded)
    s.indexOf("ab");       // first position, or -1
    s.equals(other);       // content comparison (never use == for Strings)
    s.compareTo(other);    // <0, 0, >0 by dictionary order
    

    Навык экзамена: substring(a, b) включает индекс a, но исключает b, а сравнение строк должно выполняться через .equals, а не через == — это две наиболее часто встречающиеся ловушки при работе со строками на экзамене.

    Разобранная задача. Пусть String s = "COMPUTER"; (индексы 0–7). Тогда s.length() равно 8; s.substring(0, 4) равно "COMP" (индексы 0,1,2,3 – индекс 4 исключен); s.substring(4) равно "UTER" (от индекса 4 до конца); s.indexOf("PU") равно 3; а s.indexOf("X") равно -1 (не найдено). Забытый конец диапазона в substring — самая частая ошибка.

    Запрос индекса вне диапазона от 0 до length()-1 (плохой аргумент для substring или charAt, например, s.substring(0, 20) здесь) приводит к сбою с ошибкой StringIndexOutOfBoundsException — это «родственник» ошибки индекса массива для строк.

    Индексы строк начинаются с 0
    Индексы строк начинаются с 0
    Explore · ⁨Исследовать⁩

    Explore string indices and slicing · ⁨Исследуйте индексы строк и срезы⁩

    Every character has an index, and the numbering starts at 0. Drag the start and end to see how substring(from, to) takes the characters from from up to — but not including — to. · ⁨Каждый символ имеет индекс, нумерация которого начинается с 0. Перетащите начало и конец, чтобы увидеть, как substring(from, to) выбирает символы от индекса from до (не включая) to.⁩

    1.15

    Exam tips · ⁨Советы для экзамена⁩

    English
    • Trace code by hand line by line, tracking each variable's value in a table — the exam rewards careful tracing over guessing.
    • Know Java's primitive types and that integer division truncates ($7/2$ gives $3$); use a cast or a double for real division.
    • Distinguish compile-time errors (syntax, types) from run-time errors – know the named ones: ArithmeticException (int ÷ 0), NullPointerException (method on a null reference), StringIndexOutOfBoundsException / ArrayIndexOutOfBoundsException – and logic errors (wrong output).
    • Follow operator precedence and initialise every variable before you use it.
    • On the free-response, write complete, compilable Java — return the right type and match the method header exactly.
    Русский
    • Отслеживайте код вручную построчно, фиксируя значение каждой переменной в таблице — на экзамене ценится внимательное отслеживание, а не догадки.
    • Знать примитивные типы Java и то, что целочисленное деление отбрасывает дробную часть ($7/2$ дает $3$); используйте приведение типа или double для реального деления.
    • Различайте ошибки компиляции (синтаксис, типы) и ошибки выполнения – знайте их названия: ArithmeticException (int ÷ 0), NullPointerException (метод на нулевой ссылке), StringIndexOutOfBoundsException / ArrayIndexOutOfBoundsException – и логические ошибки (неправильный вывод).
    • Соблюдайте приоритет операторов и инициализируйте каждую переменную перед её использованием.
    • В свободных ответах пишите полный, компилируемый код Java – возвращайте правильный тип и точно соответствуйте заголовку метода.
  • 2

    Selection and Iteration · ⁨Выбор и итерация⁩

    Watch lesson · ⁨Смотреть урок⁩
    2.1

    Selection and Repetition in Algorithms · ⁨Выбор и повторение в алгоритмах⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.1.A: Represent patterns and algorithms that involve selection and repetition found in everyday life using written language or diagrams.

    • 2.1.A.1 The building blocks of algorithms include sequencing, selection, and repetition.
    • 2.1.A.2 Algorithms can contain selection, through decision making, and repetition, via looping.
    • 2.1.A.3 Selection occurs when a choice of how the execution of an algorithm will proceed is based on a true or false decision.
    • 2.1.A.4 Repetition is when a process repeats itself until a desired outcome is reached.
    • 2.1.A.5 The order in which sequencing, selection, and repetition are used contributes to the outcome of the algorithm.
    Русский

    Цель обучения 2.1.A: Представлять паттерны и алгоритмы, включающие выбор и повторение, встречающиеся в повседневной жизни, с помощью письменного текста или диаграмм.

    • 2.1.A.1 Базовыми элементами алгоритмов являются последовательность, выбор и повторение.
    • 2.1.A.2 Алгоритмы могут содержать выбор через принятие решений и повторение через циклы.
    • 2.1.A.3 Выбор происходит, когда выбор направления выполнения алгоритма основан на истинном или ложном решении.
    • 2.1.A.4 Повторение — это процесс, который повторяется до достижения желаемого результата.
    • 2.1.A.5 Порядок, в котором используются последовательность, выбор и повторение, влияет на результат алгоритма.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Algorithms are built from three control structures 控制结构: sequence (steps in order), selection 选择 (choosing a path), and iteration 迭代 (repeating steps). This topic covers selection and iteration – the tools that let a program make decisions and loop.

    Русский
    Схема потока с ромбом решения: выбор определяет, какой путь алгоритм выполнит
    Блок-схема с ромбом решения: выбор определяет путь, который проходит алгоритм

    Алгоритмы строятся из трёх операторов управления: последовательность (шаги по порядку), выбор (выбор пути) и итерация (повторение шагов). Эта тема охватывает выбор и итерацию – инструменты, позволяющие программе принимать решения и выполнять циклы.

    Три оператора управления: последовательность, выбор и итерация
    Три оператора управления: последовательность, выбор и итерация
    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    control structures/kənˈtrəʊl ˈstrʌktʃəz/ структуры управления
    selection/sɪˈlekʃn/ выбор
    iteration/ˌɪtəˈreɪʃn/ итерации
    boolean expression/ˈbuːlɪən ekˈspreʃn/ булево выражение
    relational operators/rɪˈleɪʃənl ˈɒpəreɪtəz/ относительные операторы
    if statement/ɪf ˈsteɪtmənt/ оператор if
    Logical operators/ˈlɒdʒɪkl ˈɒpəreɪtəz/ Логические операторы
    short-circuit evaluation/ʃɔːt ˈsɜːkɪt ɪˌvæljuːˈeɪʃn/ короткое замыкание (short-circuit evaluation)
    De Morgan's laws/də ˈmɔːɡənz lɔːz/ законы де Моргана
    while loop/waɪl luːp/ цикл while
    infinite loop/ˈɪnfɪnət luːp/ бесконечный цикл
    flag/flæɡ/ флаг
    nested loop/ˈnestɪd luːp/ вложенный цикл
    Run-time analysis/rʌn taɪm əˈnæləsɪs/ Анализ во время выполнения
    2.2

    Boolean Expressions · ⁨Булевы выражения⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.2.A: Develop code to create Boolean expressions with relational operators and determine the result of these expressions.

    • 2.2.A.1 Values can be compared using the relational operators == and != to determine whether the values are the same. With primitive types, this compares the actual primitive values. With reference types, this compares the object references.
    • 2.2.A.2 Numeric values can be compared using the relational operators <, >, <=, and >= to determine the relationship between the values.
    • 2.2.A.3 An expression involving relational operators evaluates to a Boolean value.
    Русский

    Цель обучения 2.2.A: Разработать код для создания булевских выражений с реляционными операторами и определить результат этих выражений.

    • 2.2.A.1 Значения можно сравнивать с помощью реляционных операторов == и !=, чтобы определить, одинаковы ли значения. Для примитивных типов это сравнивает фактические примитивные значения. Для ссылочных типов это сравнивает ссылки на объекты.
    • 2.2.A.2 Числовые значения можно сравнивать с помощью реляционных операторов <, >, <= и >=, чтобы определить соотношение между значениями.
    • 2.2.A.3 Выражение, содержащее реляционные операторы, вычисляется как булево значение.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English
    Logic gates & the half-adder

    A boolean expression 布尔表达式 evaluates to true or false, using relational operators 关系运算符: == (equal), != (not equal), <, >, <=, >=. Note == compares primitive values but object references for objects, so use .equals for Strings.

    Русский
    Логические вентили и полусумматор

    Булево выражение вычисляется как true или false, используя относительные операторы: == (равно), != (не равно), <, >, <=, >=. Заметьте, что == сравнивает примитивные значения, но ссылки на объекты для объектов, поэтому используйте .equals для Strings.

    Три семейства операторов: арифметические, реляционные и логические
    Три группы операторов: арифметические, относительные и логические
    Explore · ⁨Исследовать⁩

    Explore the AND truth table · ⁨Исследуйте таблицу истинности AND⁩

    A Boolean expression evaluates to true or false. AND is true only when both operands are true; toggle the inputs to see all four cases. · ⁨Логическое выражение вычисляется как true или false. Операция AND истинна только тогда, когда оба операнда истинны; переключите входные значения, чтобы увидеть все четыре варианта.⁩

    2.3

    The if Statement · ⁨Оператор if⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.3.A: Develop code to represent branching logical processes by using selection statements and determine the result of these processes.

    • 2.3.A.1 Selection statements change the sequential execution of statements.
    • 2.3.A.2 An if statement is a type of selection statement that affects the flow of control by executing different segments of code based on the value of a Boolean expression.
    • 2.3.A.3 A one-way selection (if statement) is used when there is a segment of code to execute under a certain condition. In this case, the body is executed only when the Boolean expression is true.
    • 2.3.A.4 A two-way selection (if-else statement) is used when there are two segments of code—one to be executed when the Boolean expression is true and another segment for when the Boolean expression is false. In this case, the body of the if is executed when the Boolean expression is true, and the body of the else is executed when the Boolean expression is false.
    Русский

    Цель обучения 2.3.A: Разработать код для представления ветвящихся логических процессов с использованием операторов выбора и определить результат этих процессов.

    • 2.3.A.1 Операторы выбора изменяют последовательное выполнение операторов.
    • 2.3.A.2 Оператор if является типом оператора выбора, который влияет на поток управления, выполняя различные сегменты кода в зависимости от значения булевого выражения.
    • 2.3.A.3 Однонаправленный выбор (оператор if) используется, когда существует сегмент кода для выполнения при определенном условии. В этом случае тело выполняется только тогда, когда булево выражение равно true.
    • 2.3.A.4 Двухнаправленный выбор (оператор if-else) используется, когда есть два сегмента кода: один для выполнения, когда булево выражение равно true, и другой сегмент для выполнения, когда булево выражение равно false. В этом случае тело оператора if выполняется, когда булево выражение равно true, а тело оператора else выполняется, когда булево выражение равно false.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    An if statement 条件语句 runs a block only when its condition is true; an optional else gives an alternative:

    Русский

    Оператор if выполняет блок только тогда, когда его условие истинно; опциональный else предоставляет альтернативу:

    if (score >= 60) {
        System.out.println("Pass");
    } else {
        System.out.println("Fail");
    }
    
    Светофоры: выбор определяет, какой веткой будет выполнен код, аналогично тому, как условные операторы if выбирают пути выполнения кода
    Светофор: выбор определяет, какой ветвь выполнить, так же как операторы if выбирают пути кода
    Explore · ⁨Исследовать⁩

    See which branch an if chooses · ⁨Узнайте, какой ветви выбирает оператор if⁩

    An if statement runs its body only when the condition is true, otherwise it skips to else. Slide the score across the boundaries and watch the grade change. · ⁨Оператор if выполняет свой блок только при истинном условии, иначе он пропускает его к else. Передвигайте оценку по границам и наблюдайте, как меняется оценка.⁩

    2.4

    Nested if Statements · ⁨Вложенные операторы if⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.4.A: Develop code to represent nested branching logical processes and determine the result of these processes.

    • 2.4.A.1 Nested if statements consist of if, if-else, or if-else-if statements within if, if-else, or if-else-if statements.
    • 2.4.A.2 The Boolean expression of the inner nested if statement is evaluated only if the Boolean expression of the outer if statement evaluates to true.
    • 2.4.A.3 A multiway selection (if-else-if) is used when there are a series of expressions with different segments of code for each condition. Multiway selection is performed such that no more than one segment of code is executed based on the first expression that evaluates to true. If no expression evaluates to true and there is a trailing else statement, then the body of the else is executed.
    Русский

    Цель обучения 2.4.A: Разработать код для представления вложенных ветвящихся логических процессов и определить результат этих процессов.

    • 2.4.A.1 Вложенные операторы if состоят из операторов if, if-else или if-else-if внутри операторов if, if-else или if-else-if.
    • 2.4.A.2 Булево выражение внутреннего вложенного оператора if вычисляется только в том случае, если булево выражение внешнего оператора if оценивается как true.
    • 2.4.A.3 Множественный выбор (оператор if-else-if) используется, когда имеется серия выражений с различными сегментами кода для каждого условия. Множественный выбор выполняется таким образом, что выполняется не более одного сегмента кода на основе первого выражения, которое оценивается как true. Если ни одно выражение не оценивается как true, и присутствует оператор else в конце, то выполняется тело оператора else.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Placing an if inside another, or chaining with else if, tests several cases in order. Only the first matching branch runs:

    Русский

    Размещение оператора if внутри другого или цепочка с помощью else if проверяют несколько случаев по порядку. Выполняется только первая подходящая ветвь:

    if (g >= 90) grade = 'A';
    else if (g >= 80) grade = 'B';
    else grade = 'C';
    
    2.5

    Compound Boolean Expressions · ⁨Составные булевы выражения⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.5.A: Develop code to represent compound Boolean expressions and determine the result of these expressions.

    • 2.5.A.1 Logical operators ! (not), && (and), and || (or) are used with Boolean expressions. The expression !a evaluates to true if a is false and evaluates to false otherwise. The expression a && b evaluates to true if both a and b are true and evaluates to false otherwise. The expression a || b evaluates to true if a is true, b is true, or both, and evaluates to false otherwise. The order of precedence for evaluating logical operators is ! (not), && (and), then || (or). An expression involving logical operators evaluates to a Boolean value.
    • 2.5.A.2 Short-circuit evaluation occurs when the result of a logical operation using && or || can be determined by evaluating only the first Boolean expression. In this case, the second Boolean expression is not evaluated.
    Русский

    Цель обучения 2.5.A: Разработать код для представления составных булевских выражений и определить результат этих выражений.

    • 2.5.A.1 Логические операторы ! (не), && (и) и || (или) используются с булевскими выражениями. Выражение !a вычисляется как true, если a равно false, и вычисляется как false в противном случае. Выражение a && b вычисляется как true, если оба выражения a и b равны true, и вычисляется как false в противном случае. Выражение a || b вычисляется как true, если a равно true, b равно true или оба, и вычисляется как false в противном случае. Порядок приоритета вычисления логических операторов: ! (не), затем && (и), затем || (или). Выражение, содержащее логические операторы, вычисляется как булево значение.
    • 2.5.A.2 Короткое замыкание (short-circuit evaluation) происходит, когда результат логической операции с использованием && или || может быть определен путем вычисления только первого булевого выражения. В этом случае второе булево выражение не вычисляется.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English
    Short-circuit evaluation

    Logical operators 逻辑运算符 combine conditions: && (and – both true), || (or – at least one true), ! (not – reverse). Java uses short-circuit evaluation 短路求值: && stops if the left side is false, and || stops if the left side is true – useful to guard against errors, e.g. if (n != 0 && total / n > 5).

    Русский
    Короткое замыкание при вычислении

    Логические операторы объединяют условия: && (and – оба истинны), || (or – хотя бы один истинен), ! (not – инверсия). Java использует короткое замыкание при вычислении: && останавливается, если левая часть ложна, а || останавливается, если левая часть истинна – это полезно для защиты от ошибок, например, if (n != 0 && total / n > 5).

    2.6

    Comparing Boolean Expressions · ⁨Сравнение булевых выражений⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.6.A: Compare equivalent Boolean expressions.

    • 2.6.A.1 Two Boolean expressions are equivalent if they evaluate to the same value in all cases. Truth tables can be used to prove Boolean expressions are equivalent.
    • 2.6.A.2 De Morgan's law can be applied to Boolean expressions to create equivalent Boolean expressions. Under De Morgan's law, the Boolean expression !(a && b) is equivalent to !a || !b and the Boolean expression !(a || b) is equivalent to !a && !b.

    Learning Objective 2.6.B: Develop code to compare object references using Boolean expressions and determine the result of these expressions.

    • 2.6.B.1 Two different variables can hold references to the same object. Object references can be compared using == and !=.
    • 2.6.B.2 An object reference can be compared with null, using == or !=, to determine if the reference actually references an object.
    • 2.6.B.3 Classes often define their own equals method, which can be used to specify the criteria for equivalency for two objects of the class. The equivalency of two objects is most often determined using attributes from the two objects.
      • Exclusion statement: Overriding the equals method is outside the scope of the AP Computer Science A course and exam.
    Русский

    Цель обучения 2.6.A: Сравнивать эквивалентные булевские выражения.

    • 2.6.A.1 Два булевских выражения являются эквивалентными, если они вычисляются как одно и то же значение во всех случаях. Таблицы истинности могут использоваться для доказательства эквивалентности булевских выражений.
    • 2.6.A.2 Закон де Моргана может быть применен к булевским выражениям для создания эквивалентных булевских выражений. Согласно закону де Моргана, булево выражение !(a && b) эквивалентно !a || !b, а булево выражение !(a || b) эквивалентно !a && !b.

    Цель обучения 2.6.B: Разработать код для сравнения ссылочных переменных объектов с использованием булевских выражений и определить результат этих выражений.

    • 2.6.B.1 Две разные переменные могут хранить ссылки на один и тот же объект. Ссылочные переменные объектов можно сравнивать с помощью == и !=.
    • 2.6.B.2 Ссылочную переменную объекта можно сравнить с null, используя == или !=, чтобы определить, действительно ли ссылка указывает на объект.
    • 2.6.B.3 Классы часто определяют свой собственный метод equals, который можно использовать для определения критериев эквивалентности для двух объектов данного класса. Эквивалентность двух объектов чаще всего определяется на основе атрибутов этих двух объектов.
      • Исключение: Переопределение метода equals не входит в рамки курса и экзамена по информатике AP.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    De Morgan's laws 德摩根定律 rewrite negations: !(a && b) equals !a || !b, and !(a || b) equals !a && !b. Two boolean expressions are equivalent if they give the same result for every input – a truth table proves it. Simplifying conditions this way is a common exam task.

    Русский

    Законы де Моргана преобразуют отрицания: !(a && b) равно !a || !b, а !(a || b) равно !a && !b. Два булевых выражения считаются эквивалентными, если они дают одинаковый результат для любого набора входных данных — это подтверждается таблицей истинности. Упрощение условий таким образом является типичным заданием на экзамене.

    2.7

    while Loops · ⁨Циклы while⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.7.A: Identify when an iterative process is required to achieve a desired result.

    • 2.7.A.1 Iteration is a form of repetition. Iteration statements change the flow of control by repeating a segment of code zero or more times as long as the Boolean expression controlling the loop evaluates to true.
    • 2.7.A.2 An infinite loop occurs when the Boolean expression in an iterative statement always evaluates to true.
    • 2.7.A.3 The loop body of an iterative statement will not execute if the Boolean expression initially evaluates to false.
    • 2.7.A.4 Off by one errors occur when the iteration statement loops one time too many or one time too few.

    Learning Objective 2.7.B: Develop code to represent iterative processes using while loops and determine the result of these processes.

    • 2.7.B.1 A while loop is a type of iterative statement. In while loops, the Boolean expression is evaluated before each iteration of the loop body, including the first. When the expression evaluates to true, the loop body is executed. This continues until the Boolean expression evaluates to false, whereupon the iteration terminates.
    Русский

    Цель обучения 2.7.A: Определять, когда для достижения желаемого результата требуется итеративный процесс.

    • 2.7.A.1 Итерация — это форма повторения. Операторы итерации изменяют поток управления, повторяя фрагмент кода ноль или более раз, пока логическое выражение, управляющее циклом, оценивается как true.
    • 2.7.A.2 Бесконечный цикл возникает, когда логическое выражение в операторе итерации всегда оценивается как true.
    • 2.7.A.3 Тело цикла оператора итерации не выполнится, если логическое выражение изначально оценивается как false.
    • 2.7.A.4 Ошибки off by one (на единицу больше/меньше) возникают, когда оператор итерации выполняется на один раз слишком много или на один раз слишком мало.

    Цель обучения 2.7.B: Разработать код для представления итеративных процессов с использованием циклов while и определить результат этих процессов.

    • 2.7.B.1 Цикл while является видом итеративного оператора. В циклах while логическое выражение вычисляется перед каждой итерацией тела цикла, включая первую. Когда выражение принимает значение true, выполняется тело цикла. Это продолжается до тех пор, пока логическое выражение не примет значение false, после чего итерация завершается.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    A while loop 循环 repeats while its condition stays true, testing before each pass. You must change something inside so the loop eventually stops, or it becomes an infinite loop 无限循环:

    Русский

    Цикл while повторяется пока его условие остаётся истинным, проверяя его перед каждой итерацией. Вы должны изменить что-то внутри, чтобы цикл в конце прекратился, иначе он станет бесконечным циклом:

    Три типа циклов различаются местом проверки условия
    Три типа циклов различаются тем, где проверяется условие
    int i = 0;
    while (i < 5) {
        System.out.println(i);
        i++;
    }
    
    Explore · ⁨Исследовать⁩

    Trace a while loop · ⁨Отследите цикл while⁩

    A while loop repeats as long as its condition stays true, updating its variables each pass. Step through to see the sum of squares build up. · ⁨Цикл while повторяется, пока его условие остается истинным, обновляя свои переменные на каждом проходе. Пройдитесь по шагам, чтобы увидеть, как накапливается сумма квадратов.⁩

    2.8

    for Loops · ⁨Циклы for⁩

    Syllabus · ⁨Программа⁩
    Learning ObjectiveEssential Knowledge

    2.8.A
    Develop code to represent iterative processes using for loops and determine the result of these processes.

    • 2.8.A.1 A for loop is a type of iterative statement. There are three parts in a for loop header: the initialization, the Boolean expression, and the update.
    • 2.8.A.2 In a for loop, the initialization statement is only executed once before the first Boolean expression evaluation. The variable being initialized is referred to as a loop control variable. The Boolean expression is evaluated immediately after the loop control variable is initialized and then following each execution of the increment statement until it is false. In each iteration, the update is executed after the entire loop body is executed and before the Boolean expression is evaluated again.
    • 2.8.A.3 A for loop can be rewritten into an equivalent while loop (and vice versa).

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    A for loop packs initialization, condition, and update into one line – best when you know the count:

    A for and an equivalent while do the same work; be able to convert between them.

    Русский

    Цикл for упаковывает инициализацию, условие и обновление в одну строку – лучше всего подходит, когда вы знаете количество:

    for (int i = 0; i < n; i++) {
        // runs n times, i = 0..n-1
    }
    

    Структура for и эквивалентная структура while выполняют ту же работу; нужно уметь конвертировать между ними.

    Конвейер: циклы повторяют процесс для каждого элемента, подобно конструкциям for и while
    Конвейер: циклы повторяют процесс для каждого элемента, как in for и while
    Explore · ⁨Исследовать⁩

    Trace a for loop · ⁨Отследите цикл for⁩

    A for loop runs a fixed number of times, its counter stepping through a range. Watch the counter and running total advance one pass at a time. · ⁨Цикл for выполняется фиксированное количество раз, его счетчик проходит по диапазону. Наблюдайте, как счетчик и накопленная сумма увеличиваются на один проход за раз.⁩

    2.9

    Building Complete Selection and Iteration Algorithms · ⁨Создание полных алгоритмов выбора и итерации⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.9.A: Develop code for standard and original algorithms (without data structures) and determine the result of these algorithms.

    • 2.9.A.1 There are standard algorithms to:
      • identify if an integer is or is not evenly divisible by another integer
      • identify the individual digits in an integer
      • determine the frequency with which a specific criterion is met
      • determine a minimum or maximum value
      • compute a sum or average
    Русский

    Цель обучения 2.9.A: Разработать код для стандартных и оригинальных алгоритмов (без структур данных) и определить результат этих алгоритмов.

    • 2.9.A.1 Существуют стандартные алгоритмы для:
      • определения, кратно ли целое число другому целому числу или нет
      • определения отдельных цифр в целом числе
      • определения частоты выполнения определенного критерия
      • определения минимального или максимального значения
      • вычисления суммы или среднего значения

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Combine loops and conditions to solve real problems – count, sum, find a maximum, or test a property:

    Two integer patterns the exam tests directly use % and /. To read the digits of an integer one at a time, repeatedly take n % 10 (the last digit) and then n = n / 10 (drop it). To test divisibility, n % d == 0 means n is evenly divisible by d. Combine them with a counter to find the frequency with which some criterion is met.

    Standard patterns like a running total, a counter, or a flag 标志 (a boolean that records whether something happened) recur throughout the course.

    Русский

    Объедините циклы и условия для решения реальных задач – подсчет, суммирование, поиск максимума или проверка свойства:

    int max = arr[0];
    for (int k = 1; k < arr.length; k++) {
        if (arr[k] > max) max = arr[k];
    }
    

    Два целочисленных паттерна, которые непосредственно проверяются на экзамене, используют % и /. Чтобы читать цифры целого числа по одной, необходимо последовательно брать n % 10 (последнюю цифру), а затем выполнять n = n / 10 (убрать её). Для проверки делимости n % d == 0 означает, что n делится на d без остатка. Объедините их со счетчиком, чтобы найти частоту, с которой выполняется определенное условие.

    Стандартные паттерны, такие как накопительная сумма, счетчик или флаг (булево значение, фиксирующее, произошло ли что-то), встречаются на протяжении всего курса.

    2.10

    String Algorithms · ⁨Алгоритмы со строками⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.10.A: Develop code for standard and original algorithms that involve strings and determine the result of these algorithms.

    • 2.10.A.1 There are standard string algorithms to:
      • find if one or more substrings have a particular property
      • determine the number of substrings that meet specific criteria
      • create a new string with the characters reversed
    Русский

    Цель обучения 2.10.A: Разрабатывать код для стандартных и оригинальных алгоритмов, связанных со строками, и определять результат этих алгоритмов.

    • 2.10.A.1 Существуют стандартные строчные алгоритмы для:
      • поиска наличия у одной или нескольких подстрок определенного свойства
      • определения количества подстрок, соответствующих определенным критериям
      • создания новой строки с обратным порядком символов

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Loop through a string by index to process each character:

    Typical tasks: count occurrences, build a reversed or filtered copy, or test whether one string contains another.

    Русский

    Проход по строке по индексам для обработки каждого символа:

    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        // count vowels, reverse, check for a substring, ...
    }
    

    Типичные задачи: подсчет вхождений, создание перевернутой или отфильтрованной копии, или проверка содержит ли одна строку другую.

    2.11

    Nested Iteration · ⁨Вложенная итерация⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.11.A: Develop code to represent nested iterative processes and determine the result of these processes.

    • 2.11.A.1 Nested iteration statements are iteration statements that appear in the body of another iteration statement. When a loop is nested inside another loop, the inner loop must complete all its iterations before the outer loop can continue to its next iteration.
    Русский

    Цель обучения 2.11.A: Разработать код для представления вложенных итеративных процессов и определить результат этих процессов.

    • 2.11.A.1 Вложенные операторы итерации — это операторы итерации, которые находятся внутри тела другого оператора итерации. Когда цикл вложен внутрь другого цикла, внутренний цикл должен завершить все свои итерации, прежде чем внешний цикл сможет перейти к своей следующей итерации.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    A nested loop 嵌套循环 puts one loop inside another; the inner loop completes fully for each pass of the outer. If the outer runs $n$ times and the inner $m$ times, the body runs $n\times m$ times – the basis for processing grids and comparing all pairs.

    Русский

    Вложенный цикл помещает один цикл внутрь другого; внутренний цикл полностью завершается для каждой итерации внешнего. Если внешний выполняется $n$ раз, а внутренний $m$ раз, тело выполняется $n\times m$ раз – основа для обработки сеток и сравнения всех пар.

    2.12

    Informal Run-Time Analysis · ⁨Неформальный анализ времени выполнения⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 2.12.A: Calculate statement execution counts and informal run-time comparison of iterative statements.

    • 2.12.A.1 A statement execution count indicates the number of times a statement is executed by the program. Statement execution counts are often calculated informally through tracing and analysis of the iterative statements.
    Русский

    Цель обучения 2.12.A: Вычислять количество выполнений операторов и проводить неформальное сравнение по времени выполнения итеративных операторов.

    • 2.12.A.1 Количество выполнений оператора указывает на число раз, когда программа выполняет данный оператор. Количество выполнений операторов часто вычисляется неформально путем трассировки и анализа итеративных операторов.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English
    Big-O growth rates

    Run-time analysis 运行时间分析 counts how many basic steps an algorithm takes as the input size $n$ grows. Count the executions of the innermost statement: a single loop over $n$ items is linear ($n$ steps); two nested loops over $n$ are quadratic ($n^2$). This informal counting lets you compare two algorithms' efficiency.

    Exam skill: for a nested loop, be able to state how many times the inner statement runs in terms of the loop bounds – a frequent multiple-choice question.

    Worked example. How many stars does this print?

    The inner loop runs i times for each outer i: 0 + 1 + 2 + 3 = 6 stars. When the inner bound is the outer variable, the total is the triangular sum $0+1+\dots+(n-1)=\dfrac{n(n-1)}{2}$ – here $\dfrac{4\times3}{2}=6$ – not the full $n^2=16$ of a rectangular nested loop.

    Русский
    Темпы роста Big-O

    Анализ времени выполнения считает, сколько базовых шагов выполняет алгоритм по мере роста размера входных данных $n$. Подсчитайте выполнение самого внутреннего утверждения: одиночный цикл по $n$ элементам является линейным ($n$ шагов); два вложенных цикла по $n$ являются квадратичными ($n^2$). Этот неформальный подсчет позволяет сравнить эффективность двух алгоритмов.

    Как время выполнения растет вместе с количеством элементов n
    Как время выполнения растет с количеством элементов n

    Навык для экзамена: для вложенного цикла нужно уметь stating, сколько раз выполняется внутреннее утверждение в зависимости от границ циклов – частый вопрос с множественным выбором.

    Разобранный пример. Сколько звезд будет напечатано?

    for (int i = 0; i < 4; i++)
        for (int j = 0; j < i; j++)
            System.out.print("*");
    

    Внутренний цикл выполняется i раз для каждого внешнего i: 0 + 1 + 2 + 3 = 6 звёздочек. Когда внутренняя граница зависит от внешней переменной, общее количество равно треугольной сумме $0+1+\dots+(n-1)=\dfrac{n(n-1)}{2}$ – здесь $\dfrac{4\times3}{2}=6$ – а не полной $n^2=16$ прямоугольного вложенного цикла.

    Explore · ⁨Исследовать⁩

    Compare how algorithms scale · ⁨Сравните масштабирование алгоритмов⁩

    Run-time describes how the number of steps grows with the input size $n$. Increase $n$ and watch a linear $O(n)$ pull far ahead of a quadratic $O(n^2)$. · ⁨Временна́я сложность описывает, как растет количество шагов с размером входных данных $n$. Увеличьте $n$ и наблюдайте, как линейная $O(n)$ значительно опережает квадратичную $O(n^2)$.⁩

    2.12

    Exam tips · ⁨Советы для экзамена⁩

    English
    • Get boundary conditions right: use < vs <= deliberately, and watch the first and last iteration of every loop (off-by-one is the classic bug).
    • Build compound conditions with &&, ||, ! and remember short-circuit evaluation (put the null check first).
    • Trace nested loops by counting how many times the inner body runs in total.
    • Choose the right structure — if/else if for ranges, a loop for repetition — and avoid an infinite loop by updating the loop variable.
    • Apply De Morgan's laws when you simplify or negate a boolean condition.
    Русский
    • Правильно задавайте граничные условия: сознательно используйте < или <= и следите за первой и последней итерацией каждого цикла (ошибка на единицу — классическая ошибка).
    • Составляйте сложные условия с помощью &&, || и ! и помните о коротком замыкании (коротком вычислении) логических выражений (первым ставьте проверку на null).
    • Отслеживайте вложенные циклы, подсчитывая, сколько раз всего выполняется тело внутреннего цикла.
    • Выбирайте правильную структуру — if/else if для диапазонов, цикл для повторений — и избегайте бесконечного цикла, обновляя переменную цикла.
    • Применяйте законы де Моргана при упрощении или отрицании булевого условия.
  • 3

    Class Creation · ⁨Создание классов⁩

    Watch lesson · ⁨Смотреть урок⁩
    3.1

    Abstraction and Program Design · ⁨Абстракция и проектирование программ⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 3.1.A: Represent the design of a program by using natural language or creating diagrams that indicate the classes in the program and the data and procedural abstractions found in each class by including all attributes and behaviors.

    • 3.1.A.1 Abstraction is the process of reducing complexity by focusing on the main idea. By hiding details irrelevant to the question at hand and bringing together related and useful details, abstraction reduces complexity and allows one to focus on the idea.
    • 3.1.A.2 Data abstraction provides a separation between the abstract properties of a data type and the concrete details of its representation. Data abstraction manages complexity by giving data a name without referencing the specific details of the representation. Data can take the form of a single variable or a collection of data, such as in a class or a set of data.
    • 3.1.A.3 An attribute is a type of data abstraction that is defined in a class outside any method or constructor. An instance variable is an attribute whose value is unique to each instance of the class. A class variable is an attribute shared by all instances of the class.
    • 3.1.A.4 Procedural abstraction provides a name for a process and allows a method to be used only knowing what it does, not how it does it. Through method decomposition, a programmer breaks down larger behaviors of the class into smaller behaviors by creating methods to represent each individual smaller behavior. A procedural abstraction may extract shared features to generalize functionality instead of duplicating code. This allows for code reuse, which helps manage complexity.
    • 3.1.A.5 Using parameters allows procedures to be generalized, enabling the procedures to be reused with a range of input values or arguments.
    • 3.1.A.6 Using procedural abstraction in a program allows programmers to change the internals of a method (to make it faster, more efficient, use less storage, etc.) without needing to notify method users of the change as long as the method signature and what the method does is preserved.
    • 3.1.A.7 Prior to implementing a class, it is helpful to take time to design each class including its attributes and behaviors. This design can be represented using natural language or diagrams.
    Русский

    Цель обучения 3.1.A: Представлять проект программы с помощью естественного языка или диаграмм, указывающих классы в программе и данные и процедурные абстракции, найденные в каждом классе, включая все атрибуты и поведения.

    • 3.1.A.1 Абстракция — это процесс снижения сложности путем сосредоточения на основной идее. Скрывая детали, не относящиеся к текущему вопросу, и объединяя связанные и полезные детали, абстракция снижает сложность и позволяет сосредоточиться на идее.
    • 3.1.A.2 Абстракция данных обеспечивает разделение между абстрактными свойствами типа данных и конкретными деталями его представления. Абстракция данных управляет сложностью, предоставляя данным имя без ссылки на конкретные детали представления. Данные могут принимать форму одной переменной или набора данных, например, в классе или наборе данных.
    • 3.1.A.3 Атрибут — это вид абстракции данных, который определяется в классе вне любого метода или конструктора. Переменная экземпляра — это атрибут, значение которого уникально для каждого экземпляра класса. Переменная класса — это атрибут, общий для всех экземпляров класса.
    • 3.1.A.4 Процедурная абстракция предоставляет имя процессу и позволяет использовать метод, зная только то, что он делает, а не как он это делает. Посредством декомпозиции методов программист разбивает крупные поведения класса на более мелкие, создавая методы для представления каждого отдельного мелкого поведения. Процедурная абстракция может извлекать общие черты для обобщения функциональности вместо дублирования кода. Это позволяет использовать код повторно, что помогает управлять сложностью.
    • 3.1.A.5 Использование параметров позволяет обобщать процедуры, позволяя использовать их с различными входными значениями или аргументами.
    • 3.1.A.6 Использование процедурной абстракции в программе позволяет программистам изменять внутреннюю часть метода (например, ускорить его, повысить эффективность, уменьшить потребление памяти и т. д.) без необходимости уведомлять пользователей метода об изменениях, при условии сохранения подписи метода и того, что он делает.
    • 3.1.A.7 Перед реализацией класса полезно уделить время проектированию каждого класса, включая его атрибуты и поведение. Этот проект может быть представлен с помощью естественного языка или диаграмм.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Abstraction 抽象 means hiding detail behind a simple interface – you use a String without knowing how it stores characters. Good design breaks a problem into classes, each responsible for one idea. This topic is about writing your own classes.

    Русский
    Сборка пазла в процессе: классы и методы — это модульные части более крупного проекта программы
    Сборка пазла в процессе: классы и методы — это модульные части более крупного проекта программы

    Абстракция означает сокрытие деталей за простым интерфейсом — вы используете String, не зная, как он хранит символы. Хороший дизайн разбивает задачу на классы, каждый из которых отвечает за одну концепцию. Эта тема посвящена написанию ваших собственных классов.

    Декомпозиция программы на модули и подмодули
    Декомпозиция программы на модули и подмодули
    3.2

    The Impact of Program Design · ⁨Влияние проектирования программ⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 3.2.A: Explain the social and ethical implications of computing systems.

    • 3.2.A.1 System reliability refers to the program being able to perform its tasks as expected under stated conditions without failure. Programmers should make an effort to maximize system reliability by testing the program with a variety of conditions.
    • 3.2.A.2 The creation of programs has impacts on society, the economy, and culture. These impacts can be both beneficial and harmful. Programs meant to fill a need or solve a problem can have unintended harmful effects beyond their intended use.
    • 3.2.A.3 Legal issues and intellectual property concerns arise when creating programs. Programmers often reuse code written by others and published as open source and free to use. Incorporation of code that is not published as open source requires the programmer to obtain permission and often purchase the code before integrating it into their program.
    Русский

    Цель обучения 3.2.A: Объяснять социальные и этические последствия вычислительных систем.

    • 3.2.A.1 Надежность системы означает способность программы выполнять свои задачи ожидаемым образом в stated условиях без сбоев. Программисты должны предпринимать усилия по максимизации надежности системы, тестируя программу с использованием различных условий.
    • 3.2.A.2 Создание программ оказывает влияние на общество, экономику и культуру. Это влияние может быть как положительным, так и отрицательным. Программы, предназначенные для удовлетворения потребностей или решения проблем, могут иметь нежелательные вредные последствия за пределами их прямого назначения.
    • 3.2.A.3 При создании программ возникают правовые вопросы и проблемы, связанные с интеллектуальной собственностью. Программисты часто переиспользуют код, написанный другими и опубликованный в виде открытого исходного кода (open source), доступный бесплатно. Использование кода, который не является открытым исходным кодом, требует получения разрешения у автора и часто покупки лицензии перед интеграцией этого кода в свою программу.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Design choices affect whether code is correct, readable, and reusable. Encapsulation 封装 – keeping data private and exposing it only through methods – protects an object's state from misuse and lets you change the inside without breaking users of the class. Thoughtful naming, single-purpose methods, and testing reduce bugs.

    Design also carries responsibility beyond the code. System reliability 系统可靠性 - a program performing its tasks as expected, without failure - is something programmers should maximise through careful design and testing. Programs have real impacts on society, the economy, and culture that can be both beneficial and harmful. And creating programs raises legal and intellectual-property 知识产权 concerns: programmers often reuse code published as open source 开源 and free to use, but must respect its licence and give credit rather than copy others' work as their own.

    Русский

    Выборы в дизайне влияют на то, является ли код правильным, читаемым и повторно используемым. Инкапсуляция — сохранение данных в приватном доступе и предоставление к ним доступа только через методы — защищает состояние объекта от неправильного использования и позволяет изменять внутреннюю часть, не нарушая работу пользователей класса. Продуманное именование, методы с одной целью и тестирование снижают количество ошибок.

    Дизайн также несет ответственность, выходящую за рамки кода. Надежность системы — способность программы выполнять свои задачи так, как ожидалось, без сбоев, — это то, что программисты должны максимизировать благодаря тщательному дизайну и тестированию. Программы оказывают реальное влияние на общество, экономику и культуру, которое может быть как положительным, так и отрицательным. Создание программ поднимает юридические вопросы и вопросы интеллектуальной собственности: программисты часто используют код, опубликованный как открытый исходный код и свободный для использования, но должны соблюдать его лицензию и указывать авторство, а не копировать чужие работы как свои собственные.

    3.3

    The Anatomy of a Class · ⁨Анатомия класса⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 3.3.A: Develop code to designate access and visibility constraints to classes, data, constructors, and methods.

    • 3.3.A.1 Data encapsulation is a technique in which the implementation details of a class are kept hidden from external classes. The keywords public and private affect the access of classes, data, constructors, and methods. The keyword private restricts access to the declaring class, while the keyword public allows access from classes outside the declaring class.
    • 3.3.A.2 In this course, classes are always designated public and are declared with the keyword class.
    • 3.3.A.3 In this course, constructors are always designated public.
    • 3.3.A.4 Instance variables belong to the object, and each object has its own copy of the variable.
    • 3.3.A.5 Access to attributes should be kept internal to the class in order to accomplish encapsulation. Therefore, it is good programming practice to designate the instance variables for these attributes as private unless the class specification states otherwise.
    • 3.3.A.6 Access to behaviors can be internal or external to the class. Methods designated as public can be accessed internally or externally to a class, whereas methods designated as private can only be accessed internally to the class.
    Русский

    Цель обучения 3.3.A: Написать код для определения ограничений доступа и видимости классов, данных, конструкторов и методов.

    • 3.3.A.1 Инкапсуляция данных — это техника, при которой детали реализации класса скрыты от внешних классов. Ключевые слова public и private влияют на уровень доступа к классам, данным, конструкторам и методам. Ключевое слово private ограничивает доступ только объявляющим классом, в то время как ключевое слово public позволяет доступ со стороны классов, находящихся вне объявляющего класса.
    • 3.3.A.2 В данном курсе классы всегда обозначаются как public и объявляются с использованием ключевого слова class.
    • 3.3.A.3 В данном курсе конструкторы всегда обозначаются как public.
    • 3.3.A.4 Экземплярные переменные принадлежат объекту, и каждый объект имеет свою собственную копию такой переменной.
    • 3.3.A.5 Доступ к атрибутам должен быть ограничен внутренним пространством класса для обеспечения инкапсуляции. Поэтому хорошей практикой программирования является обозначение экземплярных переменных для этих атрибутов как private, если иное не указано в спецификации класса.
    • 3.3.A.6 Доступ к поведению (методам) может быть как внутренним, так и внешним относительно класса. Методы, обозначенные как public, могут вызываться как изнутри, так и снаружи класса, тогда как методы, обозначенные как private, доступны только внутри класса.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    A class has three parts: instance variables 实例变量 (fields – the object's data), constructors (build objects), and methods (behavior). Fields are usually private; methods are usually public:

    Русский

    Класс состоит из трех частей: экземплярных переменных (полей — данных объекта), конструкторов (создания объектов) и методов (поведения). Поля обычно объявляются private; методы обычно объявляются public:

    Диаграмма классов: приватные атрибуты и публичные методы
    Диаграмма классов: приватные атрибуты и публичные методы
    public class Student {
        private String name;      // instance variable
        private int score;
    
        public Student(String n, int s) {   // constructor
            name = n;
            score = s;
        }
        public int getScore() { return score; }   // accessor
    }
    
    Чертеж: класс — это шаблон, определяющий, как создаются объекты этого типа
    Чертеж: класс — это шаблон, определяющий, как создаются объекты этого типа
    Explore · ⁨Исследовать⁩

    See an object's fields as boxes · ⁨Представьте поля объекта как контейнеры⁩

    A class groups related data (its fields) and methods. Each object gets its own set of field boxes; assigning to one changes that object only. · ⁨Класс объединяет связанные данные (его поля) и методы. Каждый объект получает собственный набор контейнеров для полей; изменение одного влияет только на этот объект.⁩

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    Abstraction/əbˈstrækʃn/ Абстрагирование
    Encapsulation/ɪnˌkæpsjʊˈleɪʃn/ Инкапсуляция
    System reliability/ˈsɪstəm rɪˌlaɪəˈbɪlɪti/ Надежность системы
    legal and intellectual-property/ˈliːɡl ænd ˌɪntəˈlektʃuːəl ˈprɒpəti/ правовые вопросы и интеллектуальная собственность
    open source/ˈəʊpən sɔːs/ open source
    instance variables/ˈɪnstəns ˈveərɪəblz/ переменные экземпляра
    constructor/kənˈstrʌktə/ конструктор
    overloading/ˌəʊvəˈləʊdɪŋ/ перегрузкой
    accessor (getter)/əkˈsesə/ геттер (accessor)
    3.4

    Constructors · ⁨Конструкторы⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 3.4.A: Develop code to declare instance variables for the attributes to be initialized in the body of the constructors of a class.

    • 3.4.A.1 An object's state refers to its attributes and their values at a given time and is defined by instance variables belonging to the object. This defines a has-a relationship between the object and its instance variables.
    • 3.4.A.2 A constructor is used to set the initial state of an object, which should include initial values for all instance variables. When a constructor is called, memory is allocated for the object and the associated object reference is returned. Constructor parameters, if specified, provide data to initialize instance variables.
    • 3.4.A.3 When a mutable object is a constructor parameter, the instance variable should be initialized with a copy of the referenced object. In this way, the instance variable does not hold a reference to the original object, and methods are prevented from modifying the state of the original object.
    • 3.4.A.4 When no constructor is written, Java provides a no-parameter constructor, and the instance variables are set to default values according to the data type of the attribute. This constructor is called the default constructor.
    • 3.4.A.5 The default value for an attribute of type int is 0. The default value of an attribute of type double is 0.0. The default value of an attribute of type boolean is false. The default value of a reference type is null.
    Русский

    Цель обучения 3.4.A: Написать код для объявления экземплярных переменных для атрибутов, которые должны быть инициализированы в теле конструкторов класса.

    • 3.4.A.1 Состояние объекта относится к его атрибутам и их значениям в определенный момент времени и определяется экземплярными переменными, принадлежащими этому объекту. Это определяет отношение «имеет» (has-a) между объектом и его экземплярными переменными.
    • 3.4.A.2 Конструктор используется для установки начального состояния объекта, которое должно включать начальные значения для всех экземплярных переменных. При вызове конструктора выделяется память под объект, и возвращается ссылка на этот объект. Параметры конструктора, если они указаны, передают данные для инициализации экземплярных переменных.
    • 3.4.A.3 Когда изменяемый объект является параметром конструктора, экземплярная переменная должна быть инициализирована копией этого объекта. Таким образом, экземплярная переменная не будет содержать ссылку на оригинальный объект, что предотвращает возможность изменения состояния оригинального объекта через методы.
    • 3.4.A.4 Если конструктор не написан явно, Java предоставляет конструктор без параметров, а экземплярные переменные устанавливаются в значения по умолчанию в соответствии с типом данных атрибута. Этот конструктор называется конструктором по умолчанию.
    • 3.4.A.5 Значение по умолчанию для атрибута типа int равно 0. Значение по умолчанию для атрибута типа double равно 0.0. Значение по умолчанию для атрибута типа boolean равно false. Значение по умолчанию для ссылочного типа равно null.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    A constructor 构造函数 has the same name as the class and no return type. It runs when you write new, and its job is to initialize the fields. A class can have several constructors with different parameter lists (overloading 重载); a no-argument constructor sets defaults.

    Русский

    Конструктор имеет то же имя, что и класс, и не имеет возвращаемого типа. Он вызывается при записи new, и его задача — инициализировать поля. Класс может иметь несколько конструкторов с разными списками параметров (перегрузка); конструктор без параметров устанавливает значения по умолчанию.

    3.5

    Methods: How to Write Them · ⁨Методы: Как их писать⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 3.5.A: Develop code to define behaviors of an object through methods written in a class using primitive values and determine the result of calling these methods.

    • 3.5.A.1 A void method does not return a value. Its header contains the keyword void before the method name.
    • 3.5.A.2 A non-void method returns a single value. Its header includes the return type in place of the keyword void.
    • 3.5.A.3 In non-void methods, a return expression compatible with the return type is evaluated, and the value is returned. This is referred to as return by value.
    • 3.5.A.4 The return keyword is used to return the flow of control to the point where the method or constructor was called. Any code that is sequentially after a return statement will never be executed. Executing a return statement inside a selection or iteration statement will halt the statement and exit the method or constructor.
    • 3.5.A.5 An accessor method allows objects of other classes to obtain a copy of the value of instance variables or class variables. An accessor method is a non-void method.
    • 3.5.A.6 A mutator (modifier) method is a method that changes the values of the instance variables or class variables. A mutator method is often a void method.
    • 3.5.A.7 Methods with parameters receive values through those parameters and use those values in accomplishing the method's task.
    • 3.5.A.8 When an argument is a primitive value, the parameter is initialized with a copy of that value. Changes to the parameter have no effect on the corresponding argument.
    Русский

    Цель обучения 3.5.A: Написать код для определения поведения объекта через методы, написанные в классе, используя примитивные значения, и определить результат вызова этих методов.

    • 3.5.A.1 Метод void не возвращает значение. В его заголовке перед именем метода содержится ключевое слово void.
    • 3.5.A.2 Непустой метод (возвращающий значение) возвращает одно значение. В его заголовке вместо ключевого слова void указывается тип возвращаемого значения.
    • 3.5.A.3 В непустых методах вычисляется выражение возврата, совместимое с типом возвращаемого значения, и оно возвращается. Это называется возвратом по значению.
    • 3.5.A.4 Ключевое слово return используется для возврата потока управления в точку, где был вызван метод или конструктор. Любой код, следующий последовательно после оператора return, никогда не будет выполнен. Выполнение оператора return внутри условия выбора или цикла остановит выполнение данного блока и завершит работу метода или конструктора.
    • 3.5.A.5 Метод-аксессуар (accessor method) позволяет объектам других классов получать копию значения экземплярных переменных или переменных класса. Метод-аксессуар является непустым методом.
    • 3.5.A.6 Мутатор (mutator method) — это метод, который изменяет значения экземплярных переменных или переменных класса. Мутатор часто является методом без возвращаемого значения (void-методом).
    • 3.5.A.7 Методы с параметрами получают значения через эти параметры и используют их для выполнения задачи метода.
    • 3.5.A.8 Когда аргумент является примитивным значением, параметр инициализируется копией этого значения. Изменения, внесенные в параметр, не оказывают влияния на соответствующий аргумент.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    A method has a signature, a return type, and a body. An accessor (getter) 访问器 returns information without changing the object; a mutator (setter) 修改器 changes a field. A method returning a value must have a return of the right type on every path; a void method returns nothing.

    Русский

    Метод имеет сигнатуру, тип возвращаемого значения и тело. Аксессор (getter) возвращает информацию, не изменяя объект; мутатор (setter) изменяет поле. Метод, возвращающий значение, должен иметь оператор return правильного типа на каждом пути; метод void ничего не возвращает.

    public void setScore(int s) { score = s; }   // mutator
    public String toString() { return name + ": " + score; }
    
    Explore · ⁨Исследовать⁩

    Follow a method call and its return · ⁨Отследите вызов метода и его возвращение⁩

    Calling a method pushes a frame with its parameters; when it hits return, the frame pops and the value goes back to the caller. · ⁨Вызов метода помещает фрейм с его параметрами; когда он достигает return, фрейм удаляется, и значение возвращается вызывающей функции.⁩

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    mutator (setter)/mjuːˈteɪtə/ сеттер (mutator)
    static (class) variable/ˈstætɪk ˈveərɪəbl/ статическая (классовая) переменная
    3.6

    Passing and Returning References of an Object · ⁨Передача и возврат ссылок на объект⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 3.6.A: Develop code to define behaviors of an object through methods written in a class using object references and determine the result of calling these methods.

    • 3.6.A.1 When an argument is an object reference, the parameter is initialized with a copy of that reference; it does not create a new independent copy of the object. If the parameter refers to a mutable object, the method or constructor can use this reference to alter the state of the object. It is good programming practice to not modify mutable objects that are passed as parameters unless required in the specification.
    • 3.6.A.2 When the return expression evaluates to an object reference, the reference is returned, not a reference to a new copy of the object.
    • 3.6.A.3 Methods cannot access the private data and methods of a parameter that holds a reference to an object unless the parameter is the same type as the method's enclosing class.
    Русский

    Цель обучения 3.6.A: Написать код для определения поведения объекта через методы, написанные в классе, используя ссылки на объекты, и определить результат вызова этих методов.

    • 3.6.A.1 Когда аргументом является ссылка на объект, параметр инициализируется копией этой ссылки; при этом не создается новая независимая копия самого объекта. Если параметр ссылается на изменяемый объект, метод или конструктор может использовать эту ссылку для изменения состояния объекта. Хорошей практикой программирования считается не изменять изменяемые объекты, передаваемые в качестве параметров, если это не требуется в спецификации.
    • 3.6.A.2 Когда возвращаемое выражение вычисляется как ссылка на объект, возвращается сама ссылка, а не ссылка на новую копию этого объекта.
    • 3.6.A.3 Методы не могут получить доступ к приватным данным и методам параметра, хранящего ссылку на объект, если только этот параметр не имеет того же типа, что и класс-обладатель данного метода.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English
    = copies the reference, not the object

    When you pass an object to a method, Java copies the reference, so the method acts on the same object – changes to its fields are visible to the caller. (Primitives are copied by value, so changes to them are not.) A method can also return a reference to an object. Because a String is immutable, passing one is safe; passing a mutable object lets a method change it.

    Exam skill: know that mutating an object's fields inside a method affects the original, but reassigning the parameter (param = new...) does not affect the caller.

    Worked example. Suppose s is a Student with score 50, and we call tweak(s):

    Line (1) changes the object s points to, so the caller now sees 100. Line (2) makes the method's own copy of the reference point at a fresh object – the caller's s is untouched – and line (3) affects only that new object. After the call, s.getScore() is 100: the mutation stuck, the reassignment did not.

    Русский
    = копирует ссылку, а не объект

    Когда вы передаете объект методу, Java копирует ссылку, поэтому метод действует с тем же объектом — изменения его полей видны вызывающей стороне. (Примитивы копируются по значению, поэтому изменения в них не видны.) Метод также может возвращать ссылку на объект. Поскольку String неизменяем (immutable), передача его безопасна; передача изменяемого объекта позволяет методу изменить его.

    Java передает по значению: метод получает копию; истинная передача по ссылке, которой нет в Java, позволила бы ему переназначить переменную вызывающей стороны
    Java всегда передает по значению (слева): метод получает копию ссылки. Истинная передача по ссылке (справа) — которой нет в Java — позволила бы методу переназначить собственную переменную вызывающей стороны.

    Экзаменационный навык: знайте, что изменение полей объекта внутри метода влияет на оригинал, но переназначение параметра (param = new...) не влияет на вызывающую сторону.

    Разобраный пример. Предположим, что s — это Student со счетом 50, и мы вызываем tweak(s):

    public static void tweak(Student a) {
        a.setScore(100);          // (1) mutates the shared object
        a = new Student("Z", 0);  // (2) repoints the local copy only
        a.setScore(5);            // (3) changes only the new local object
    }
    

    Строка (1) изменяет объект, на который указывает s, поэтому вызывающий код теперь видит 100. Строка (2) создает собственную копию ссылки метода, направленную на новый объект — при этом s вызывающего кода остается нетронутым, а строка (3) влияет только на этот новый объект. После завершения вызова s.getScore() остается 100: мутация сохранилась, а переназначение не изменило исходную ссылку.

    3.7

    Class Variables and Class Methods · ⁨Переменные и методы класса⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 3.7.A: Develop code to define behaviors of a class through class methods.

    • 3.7.A.1 Class methods cannot access or change the values of instance variables or call instance methods without being passed an instance of the class via a parameter.
    • 3.7.A.2 Class methods can access or change the values of class variables and can call other class methods.

    Learning Objective 3.7.B: Develop code to declare the class variables that belong to the class.

    • 3.7.B.1 Class variables belong to the class, with all objects of a class sharing a single copy of the class variable. Class variables are designated with the static keyword before the variable type.
    • 3.7.B.2 Class variables that are designated public are accessed outside of the class by using the class name and the dot operator, since they are associated with a class, not objects of a class.
    • 3.7.B.3 When a variable is declared final, its value cannot be modified.
    Русский

    Цель обучения 3.7.A: Написать код для определения поведения класса с помощью классовых методов.

    • 3.7.A.1 Классовые методы не могут получить доступ к значениям экземплярных переменных или вызывать экземплярные методы без передачи экземпляра класса через параметр.
    • 3.7.A.2 Классовые методы могут получать доступ к значениям классовых переменных, изменять их, а также вызывать другие классовые методы.

    Цель обучения 3.7.B: Написать код для объявления классовых переменных, принадлежащих классу.

    • 3.7.B.1 Классовые переменные принадлежат классу, и все объекты одного класса разделяют единственную копию такой переменной. Классовые переменные обозначаются ключевым словом static перед типом переменной.
    • 3.7.B.2 Классовые переменные, обозначенные public, вне классаAccessed with the class name and the dot operator, since they are associated with a class, not objects of a class.
    • 3.7.B.3 Когда переменная объявлена со словом final, её значение не может быть изменено.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English
    static vs instance fields

    A static (class) variable 类变量, marked static, is shared by all objects of the class – one copy total (e.g. a counter of how many objects exist). A static method belongs to the class and cannot use instance fields directly. Access them by class name: Student.getCount().

    Русский
    статические против экземплярных полей

    Статическая (классовая) переменная, помеченная static, является общей для всех объектов класса — существует одна копия всего (например, счетчик количества существующих объектов). Статический метод принадлежит классу и не может напрямую использовать экземплярные поля. Обращайтесь к ним по имени класса: Student.getCount().

    3.8

    Scope and Access · ⁨Область видимости и модификаторы доступа⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 3.8.A: Explain where variables can be used in the code.

    • 3.8.A.1 Local variables are variables declared in the headers or bodies of blocks of code. Local variables can only be accessed in the block in which they are declared. Since constructors and methods are blocks of code, parameters to constructors or methods are also considered local variables. These variables may only be used within the constructor or method and cannot be declared to be public or private.
    • 3.8.A.2 When there is a local variable or parameter with the same name as an instance variable, the variable name will refer to the local variable instead of the instance variable within the body of the constructor or method.
    Русский

    Цель обучения 3.8.A: Объяснить, где переменные могут использоваться в коде.

    • 3.8.A.1 Локальные переменные — это переменные, объявленные в заголовках или телах блоков кода. Локальные переменные доступны только в том блоке, в котором они объявлены. Поскольку конструкторы и методы являются блоками кода, параметры конструкторов или методов также считаются локальными переменными. Эти переменные могут использоваться только внутри конструктора или метода и не могут быть объявлены как public или private.
    • 3.8.A.2 Когда существует локальная переменная или параметр с тем же именем, что и экземплярная переменная, имя переменной будет ссылаться на локальную переменную, а не на экземплярную переменную внутри тела конструктора или метода.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    Scope 作用域 is where a name is visible. A local variable declared in a method exists only inside it; a parameter exists only in its method; an instance variable is visible throughout the object. Access modifiers control visibility across classes: private (this class only) versus public (anywhere). Local variables shadow fields of the same name – a source of bugs.

    Русский

    Область видимости — это место, где имя noticeably. Локальная переменная, объявленная внутри метода, существует только внутри него; параметр существует только в своем методе; экземплярная переменная доступна на протяжении всего существования объекта. Модификаторы доступа регулируют видимость между классами: private (только этот класс) против public (везде). Локальные переменные затеняют поля того же имени — это источник ошибок.

    Глобальная переменная видна везде; локальная переменная только внутри своего блока
    Глобальная переменная видна везде; локальная переменная только внутри своего блока
    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    Scope/skəʊp/ Область видимости
    3.9

    The this Keyword · ⁨Ключевое слово this⁩

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 3.9.A: Develop code for expressions that are self-referencing and determine the result of these expressions.

    • 3.9.A.1 Within an instance method or a constructor, the keyword this acts as a special variable that holds a reference to the current object—the object whose method or constructor is being called.
    • 3.9.A.2 The keyword this can be used to pass the current object as an argument in a method call.
    • 3.9.A.3 Class methods do not have a this reference.
    Русский

    Цель обучения 3.9.A: Написать код для самоссылающихся выражений и определить результат этих выражений.

    • 3.9.A.1 Внутри экземплярного метода или конструктора ключевое слово this действует как специальная переменная, хранящая ссылку на текущий объект — объект, чей метод или конструктор вызывается.
    • 3.9.A.2 Ключевое слово this может использоваться для передачи текущего объекта в качестве аргумента при вызове метода.
    • 3.9.A.3 У классовых методов нет ссылки на this.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    English

    this is a reference to the current object. Use it to tell a field apart from a parameter with the same name, or to call another method of the same object:

    Exam skill: when a constructor or setter's parameter has the same name as a field, you must write this.field = param – without this, the assignment does nothing useful.

    Русский

    this — это ссылка на текущий объект. Используйте его, чтобы отличить поле от параметра с тем же именем или вызвать другой метод того же объекта:

    public Student(String name, int score) {
        this.name = name;      // this.name is the field; name is the parameter
        this.score = score;
    }
    

    Экзаменационный навык: когда у конструктора или сеттера параметр имеет то же имя, что и поле, вы обязаны писать this.field = param — без this присваивание не будет иметь никакого практического смысла.

    3.9

    Exam tips · ⁨Советы для экзамена⁩

    English
    • Design with methods and classes: encapsulate data as private fields and expose behaviour through public methods.
    • Know the difference between an object and its class, and that objects are passed by value — the parameter gets a copy of the reference, so a method can change the object's state, but reassigning the parameter does not affect the caller (Java has no pass-by-reference).
    • Traverse arrays and ArrayLists safely — size is length vs .size(), and removing during a loop shifts indices.
    • Trace a recursive method to determine its result: find the base case first, then follow each recursive call to its return value (writing recursive code is outside the exam's scope).
    • Recognise inheritance vocabulary — superclass, subclass, method overriding, and that every class is a subclass of Object (designing and implementing inheritance is outside the exam's scope).
    Русский
    • Проектирование с использованием методов и классов: инкапсулируйте данные как поля private и открывайте доступ к поведению через публичные методы.
    • Знать разницу между объектом и его классом, а также то, что объекты передаются по значению — параметр получает копию ссылки, поэтому метод может изменить состояние объекта, но переназначение параметра не влияет на вызывающий код (в Java нет передачи по ссылке).
    • Безопасно обходите массивы и ArrayListы — размер равен length против .size(), а удаление во время цикла смещает индексы.
    • Трассировать рекурсивный метод для определения его результата: сначала найдите базовый случай, затем проследите каждое рекурсивное вызов до получения возвращаемого значения (написание рекурсивного кода выходит за рамки экзамена).
    • Распознавать терминологию наследования — суперкласс, подкласс, переопределение метода, а также тот факт, что каждый класс является подклассом Object (проектирование и реализация наследования выходят за рамки экзамена).
  • 4

    Data Collections · ⁨Data Collections (Наборы данных)⁩

    Watch lesson · ⁨Смотреть урок⁩
    4.1

    The Ethics of Collecting Data

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.1.A: Explain the risks to privacy from collecting and storing personal data on computer systems.

    • 4.1.A.1 When using a computer, personal privacy is at risk. When developing new programs, programmers should attempt to safeguard the personal privacy of the user.

    Learning Objective 4.1.B: Explain the importance of recognizing data quality and potential issues when using a data set.

    • 4.1.B.1 Algorithmic bias describes systemic and repeated errors in a program that create unfair outcomes for a specific group of users.
    • 4.1.B.2 Programmers should be aware of the data set collection method and the potential for bias when using this method before using the data to extrapolate new information or drawing conclusions.
    • 4.1.B.3 Some data sets are incomplete or contain inaccurate data. Using such data in the development or use of a program can cause the program to work incorrectly or inefficiently.

    Learning Objective 4.1.C: Identify an appropriate data set to use in order to solve a problem or answer a specific question.

    • 4.1.C.1 Contents of a data set might be related to a specific question or topic and might not be appropriate to give correct answers or extrapolate information for a different question or topic.
    Русский

    Цель обучения 4.1.A: Объяснить риски для конфиденциальности при сборе и хранении персональных данных на компьютерных системах.

    • 4.1.A.1 При использовании компьютера возникает угроза конфиденциальности. При разработке новых программ разработчики должны стремиться защитить личную конфиденциальность пользователя.

    Цель обучения 4.1.B: Объяснить важность оценки качества данных и потенциальных проблем при работе с набором данных.

    • 4.1.B.1 Алгоритмическая предвзятость описывает систематические и повторяющиеся ошибки в программе, которые приводят к несправедливым результатам для определенной группы пользователей.
    • 4.1.B.2 Разработчики должны знать метод сбора набора данных и потенциал предвзятости при его использовании до применения данных для извлечения новой информации или формулирования выводов.
    • 4.1.B.3 Некоторые наборы данных неполны или содержат неточные данные. Использование таких данных при разработке или эксплуатации программы может привести к неправильной или неэффективной работе программы.

    Цель обучения 4.1.C: Определить подходящий набор данных для решения задачи или ответа на конкретный вопрос.

    • 4.1.C.1 Содержимое набора данных может быть связано с конкретным вопросом или темой и может не подходить для получения правильных ответов или извлечения информации по другому вопросу или теме.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Server racks in a data centre — large collections of data raise ethical questions about collection and use
    Server racks in a data centre — large collections of data raise ethical questions about collection and use

    Programs that gather data raise questions of privacy 隐私 and consent 同意. Collect only what is needed, protect it, and be honest about its use. Data can carry bias 偏见 if it does not represent everyone fairly, leading to unfair results – a responsibility that comes with storing information.

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    privacy/ˈprɪvəsi/ конфиденциальности
    consent/kənˈsent/ согласие
    bias/ˈbaɪəs/ предвзятость
    4.2

    Why We Need Data Structures

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.2.A: Represent patterns and algorithms that involve data sets found in everyday life using written language or diagrams.

    • 4.2.A.1 A data set is a collection of specific pieces of information or data.
    • 4.2.A.2 Data sets can be manipulated and analyzed to solve a problem or answer a question. When analyzing data sets, values within the set are accessed and utilized one at a time and then processed according to the desired outcome.
    • 4.2.A.3 Data can be represented in a diagram by using a chart or table. This visual can be used to plan the algorithm that will be used to manipulate the data.
    Русский

    Цель обучения 4.2.A: Представлять паттерны и алгоритмы, связанные с наборами данных, встречающимися в повседневной жизни, с помощью письменного текста или диаграмм.

    • 4.2.A.1 Набор данных — это совокупность конкретных сведений или данных.
    • 4.2.A.2 Наборы данных можно обрабатывать и анализировать для решения проблемы или ответа на вопрос. При анализе наборов данных значения внутри множества извлекаются и используются по одному, а затем обрабатываются согласно желаемому результату.
    • 4.2.A.3 Данные можно представить в виде диаграммы с использованием графика или таблицы. Эта визуализация может использоваться для планирования алгоритма, который будет применяться для обработки данных.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    A filing cabinet: collections store many values under one name so algorithms can process them
    A filing cabinet: collections store many values under one name so algorithms can process them

    A single variable holds one value; real problems need to store many related values – a class roster, pixels, sensor readings. A data structure 数据结构 organizes a collection so we can store, find, and process items efficiently. The AP course uses three: the array, the ArrayList, and the 2D array.

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    data structure/ˈdeɪtə ˈstrʌktʃə/ структура данных
    4.3

    Making and Reading an Array

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.3.A: Develop code used to represent collections of related data using one-dimensional (1D) array objects.

    • 4.3.A.1 An array stores multiple values of the same type. The values can be either primitive values or object references.
    • 4.3.A.2 The length of an array is established at the time of creation and cannot be changed. The length of an array can be accessed through the length attribute.
    • 4.3.A.3 When an array is created using the keyword new, all of its elements are initialized to the default values for the element data type. The default value for int is 0, for double is 0.0, for boolean is false, and for a reference type is null.
    • 4.3.A.4 Initializer lists can be used to create and initialize arrays.
    • 4.3.A.5 Square brackets [ ] are used to access and modify an element in a 1D array using an index.
    • 4.3.A.6 The valid index values for an array are 0 through one less than the length of the array, inclusive. Using an index value outside of this range will result in an ArrayIndexOutOfBoundsException.
    Русский

    Цель обучения 4.3.A: Разрабатывать код для представления коллекций связанных данных с использованием объектов одномерных (1D) массивов.

    • 4.3.A.1 Массив хранит несколько значений одного типа. Значения могут быть примитивными типами или ссылками на объекты.
    • 4.3.A.2 Длина массива устанавливается во время создания и не может быть изменена. Длину массива можно получить через атрибут length.
    • 4.3.A.3 Когда массив создается с ключевым словом new, все его элементы инициализируются значениями по умолчанию для типа данных элемента. Значение по умолчанию для int равно 0, для double — 0.0, для boolean — false, а для ссылочного типа — null.
    • 4.3.A.4 Для создания и инициализации массивов могут использоваться списки инициализатора.
    • 4.3.A.5 Квадратные скобки [ ] используются для доступа и изменения элемента в 1D массиве с помощью индекса.
    • 4.3.A.6 Допустимые значения индексов для массива находятся в диапазоне от 0 до длины массива минус один включительно. Использование значения индекса вне этого диапазона приведет к возникновению ошибки ArrayIndexOutOfBoundsException.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    An array 数组 is a fixed-size, ordered collection of same-type values. Indices run from 0 to length - 1:

    A one-dimensional array (a list) with its indices and bounds
    A one-dimensional array (a list) with its indices and bounds
    int[] nums = new int[5];        // five zeros
    int[] vals = {3, 1, 4, 1, 5};   // initialized
    int first = vals[0];            // 3
    int n = vals.length;            // 5 (a field, not a method)
    

    Accessing an index outside 0..length-1 throws an ArrayIndexOutOfBoundsException.

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    array/əˈreɪ/ массив (array)
    4.4

    Visiting Every Element of an Array

    Syllabus · ⁨Программа⁩
    Learning ObjectiveEssential Knowledge

    4.4.A
    Develop code used to traverse the elements in a 1D array and determine the result of these traversals.

    • 4.4.A.1 Traversing an array is when repetition statements are used to access all or an ordered sequence of elements in an array.
    • 4.4.A.2 Traversing an array with an indexed for loop or while loop requires elements to be accessed using their indices.
    • 4.4.A.3 An enhanced for loop header includes a variable, referred to as the enhanced for loop variable. For each iteration of the enhanced for loop, the enhanced for loop variable is assigned a copy of an element without using its index.
    • 4.4.A.4 Assigning a new value to the enhanced for loop variable does not change the value stored in the array.
    • 4.4.A.5 When an array stores object references, the attributes can be modified by calling methods on the enhanced for loop variable. This does not change the object references stored in the array.
    • 4.4.A.6 Code written using an enhanced for loop to traverse elements in an array can be rewritten using an indexed for loop or a while loop.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Traverse 遍历 an array with a for loop (gives the index) or an enhanced for / for-each loop (gives each value, read-only):

    for (int i = 0; i < a.length; i++) { a[i] *= 2; }   // can modify
    for (int v : a) { System.out.println(v); }          // read each value
    
    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    Traverse/trəˈvɜːs/ Обход
    4.5

    Standard Array Algorithms

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.5.A: Develop code for standard and original algorithms for a particular context or specification that involves arrays and determine the result of these algorithms.

    • 4.5.A.1 There are standard algorithms that utilize array traversals to:
      • determine a minimum or maximum value
      • compute a sum or average
      • determine if at least one element has a particular property
      • determine if all elements have a particular property
      • determine the number of elements having a particular property
      • access all consecutive pairs of elements
      • determine the presence or absence of duplicate elements
      • shift or rotate elements left or right
      • reverse the order of the elements
    Русский

    Цель обучения 4.5.A: Разработать код для стандартных и оригинальных алгоритмов в конкретном контексте или спецификации, включающем массивы, и определить результат работы этих алгоритмов.

    • 4.5.A.1 Существуют стандартные алгоритмы, использующие обход массивов для:
      • определения минимального или максимального значения
      • вычисления суммы или среднего значения
      • определения наличия хотя бы одного элемента с определенным свойством
      • определения наличия свойства у всех элементов
      • подсчета количества элементов с определенным свойством
      • доступа ко всем последовательным парам элементов
      • определения наличия или отсутствия дубликатов элементов
      • перемещения или поворота элементов влево или вправо
      • реверсирования порядка элементов

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Master these patterns: compute a sum or average, find the max/min, count items meeting a condition, check for a duplicate, and reverse or shift elements. Each is a traversal with a running result:

    int sum = 0;
    for (int v : a) sum += v;
    double avg = (double) sum / a.length;
    
    4.6

    Reading Data from a Text File

    Syllabus · ⁨Программа⁩
    Learning ObjectiveEssential Knowledge

    4.6.A
    Develop code to read data from a text file.

    • 4.6.A.1 A file is storage for data that persists when the program is not running. The data in a file can be retrieved during program execution.
    • 4.6.A.2 A file can be connected to the program using the File and Scanner classes.
    • 4.6.A.3 A file can be opened by creating a File object, using the name of the file as the argument of the constructor.
      • File(String str) is the File constructor that accepts a String file name to open for reading, where str is the pathname for the file.
    • 4.6.A.4 When using the File class, it is required to indicate what to do if the file with the provided name cannot be opened. One way to accomplish this is to add throws IOException to the header of the method that uses the file. If the file name is invalid, the program will terminate.
    • 4.6.A.5 The File and IOException classes are part of the java.io package. An import statement must be used to make these classes available for use in the program.
    • 4.6.A.6 The following Scanner methods and constructor—including what they do and when they are used—are part of the Java Quick Reference:
      • Scanner(File f) is the Scanner constructor that accepts a File for reading.
      • int nextInt() returns the next int read from the file or input source if available. If the next int does not exist or is out of range, it will result in an InputMismatchException.
      • double nextDouble() returns the next double read from the file or input source. If the next double does not exist, it will result in an InputMismatchException.
      • boolean nextBoolean() returns the next boolean read from the file or input source. If the next boolean does not exist, it will result in an InputMismatchException.
      • String nextLine() returns the next line of text as a String read from the file or input source; can return the empty string if called immediately after another Scanner method that is reading from the file or input source.
      • String next() returns the next String read from the file or input source.
      • boolean hasNext() returns true if there is a next item to read in the file or input source; returns false otherwise.
      • void close() closes this scanner.
      • Exclusion statement: Accepting input from the keyboard is outside the scope of the AP Computer Science A course and exam.
    • 4.6.A.7 Using nextLine and the other Scanner methods together on the same input source sometimes requires code to adjust for the methods' different ways of handling whitespace.
      • Exclusion statement: Writing or analyzing code that uses both nextLine and other Scanner methods on the same input source is outside the scope of the AP Computer Science A course and exam.
    • 4.6.A.8 The following additional String method—including what it does and when it is used—is part of the Java Quick Reference:
      • String[] split(String del) returns a String array where each element is a substring of this String, which has been split around matches of the given expression del.
      • Exclusion statement: The parameter del uses a format called a regular expression. Writing or analyzing code that uses any of the special properties of regular expressions (e.g., \\*, \\.) is outside the scope of the AP Computer Science A course and exam.
    • 4.6.A.9 A while loop can be used to detect if the file still contains elements to read by using the hasNext method as the condition of the loop.
    • 4.6.A.10 A file should be closed when the program is finished using it. The close method from Scanner is called to close the file.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    File and IOException live in java.io, so a program that reads a file needs import java.io.*;. Opening a file can fail (it might not exist), and Java forces you to handle that – the simplest way is to add throws IOException to the method header. A Scanner then reads the file line by line, using hasNext... to test before reading:

    import java.io.*;
    ...
    public static void readFile() throws IOException {
        Scanner f = new Scanner(new File("data.txt"));
        while (f.hasNextLine()) {
            String line = f.nextLine();
        }
    }
    

    Reading typed tokens with nextInt(), nextDouble(), or nextBoolean() throws an InputMismatchException if the next token is the wrong type – for example calling nextInt() when the next thing in the file is the word cat.

    4.7

    Wrapping a Number in an Object

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.7.A: Develop code to use Integer and Double objects from their primitive counterparts and determine the result of using these objects.

    • 4.7.A.1 The Integer class and Double class are part of the java.lang package. An Integer object is immutable, meaning once an Integer object is created, its attributes cannot be changed. A Double object is immutable, meaning once a Double object is created, its attributes cannot be changed.
    • 4.7.A.2 Autoboxing is the automatic conversion that the Java compiler makes between primitive types and their corresponding object wrapper classes. This includes converting an int to an Integer and a double to a Double. The Java compiler applies autoboxing when a primitive value is:
      • passed as a parameter to a method that expects an object of the corresponding wrapper class
      • assigned to a variable of the corresponding wrapper class
    • 4.7.A.3 Unboxing is the automatic conversion that the Java compiler makes from the wrapper class to the primitive type. This includes converting an Integer to an int and a Double to a double. The Java compiler applies unboxing when a wrapper class object is:
      • passed as a parameter to a method that expects a value of the corresponding primitive type
      • assigned to a variable of the corresponding primitive type
    • 4.7.A.4 The following class Integer method—including what it does and when it is used—is part of the Java Quick Reference:
      • static int parseInt(String s) returns the String argument as an int.
    • 4.7.A.5 The following class Double method—including what it does and when it is used—is part of the Java Quick Reference:
      • static double parseDouble(String s) returns the String argument as a double.
    Русский

    Цель обучения 4.7.A: Разработать код для использования объектов Integer и Double вместо примитивных аналогов и определить результат применения этих объектов.

    • 4.7.A.1 Класс Integer и класс Double являются частью пакета java.lang. Объект Integer является неизменяемым (immutable), то есть после создания объекта Integer его атрибуты нельзя изменить. Объект Double является неизменяемым, то есть после создания объекта Double его атрибуты нельзя изменить.
    • 4.7.A.2 Аутоупаковка (Autoboxing) — это автоматическое преобразование, которое компилятор Java выполняет между примитивными типами и соответствующими им классами-обертками объектов. Это включает преобразование int в Integer и double в Double. Компилятор Java применяет аутоупаковку, когда примитивное значение:
      • передается в качестве параметра методу, ожидающему объект соответствующего оберточного класса
      • присваивается переменной соответствующего оберточного класса
    • 4.7.A.3 Автоматическое распаковывание (unboxing) — это автоматическое преобразование, которое компилятор Java выполняет из класса-обёртки в примитивный тип. Это включает преобразование Integer в int и Double в double. Компилятор Java применяет автоматическое распаковывание, когда объект класса-обёртки:
      • передается в качестве параметра методу, ожидающему значение соответствующего примитивного типа
      • присваивается переменной соответствующего примитивного типа
    • 4.7.A.4 Следующий метод класса Integer — включая его назначение и моменты применения — входит в Справочник по Java (Java Quick Reference):
      • static int parseInt(String s) возвращает аргумент типа String как значение типа int.
    • 4.7.A.5 Следующий метод класса Double — включая его назначение и моменты применения — входит в Справочник по Java (Java Quick Reference):
      • static double parseDouble(String s) возвращает аргумент типа String как строковое значение double.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    An ArrayList stores objects, not primitives, so a primitive is wrapped in an object: Integer wraps int, Double wraps double. Java does this with autoboxing 自动装箱 (int to Integer) and unboxing (back again) automatically, so you can write list.add(5) and int x = list.get(0).

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    autoboxing/ˌɔːtəʊˈbɒksɪŋ/ автоупаковкой
    4.8

    The ArrayList Toolbox

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.8.A: Develop code for collections of related objects using ArrayList objects and determine the result of calling methods on these objects.

    • 4.8.A.1 An ArrayList object is mutable in size and contains object references.
    • 4.8.A.2 The ArrayList constructor ArrayList() constructs an empty list.
    • 4.8.A.3 Java allows the generic type ArrayList<E>, where the type parameter E specifies the type of the elements. When ArrayList<E> is specified, the types of the reference parameters and return type when using the ArrayList methods are type E. ArrayList<E> is preferred over ArrayList. For example, ArrayList<String> names = new ArrayList<String>(); allows the compiler to find errors that would otherwise be found at run-time.
    • 4.8.A.4 The ArrayList class is part of the java.util package. An import statement must be used to make this class available for use in the program.
    • 4.8.A.5 The following ArrayList methods—including what they do and when they are used—are part of the Java Quick Reference:
      • int size() returns the number of elements in the list.
      • boolean add(E obj) appends obj to end of list; returns true.
      • void add(int index, E obj) inserts obj at position index (0 <= index <= size), moving elements at position index and higher to the right (adds 1 to their indices) and adds 1 to size.
      • E get(int index) returns the element at position index in the list.
      • E set(int index, E obj) replaces the element at position index with obj; returns the element formerly at position index.
      • E remove(int index) removes element from position index, moving elements at position index + 1 and higher to the left (subtracts 1 from their indices) and subtracts 1 from size; returns the element formerly at position index.
    • 4.8.A.6 The indices for an ArrayList start at 0 and end at the number of elements - 1.
    Русский

    Цель обучения 4.8.A: Разработать код для коллекций связанных объектов с использованием объектов ArrayList и определить результат вызова методов на этих объектах.

    • 4.8.A.1 Объект ArrayList изменяем по размеру и содержит ссылки на объекты.
    • 4.8.A.2 Конструктор ArrayList ArrayList() создает пустой список.
    • 4.8.A.3 Java позволяет использовать обобщенный тип ArrayList<E>, где параметр типа E указывает тип элементов. Когда ArrayList<E> указан, типы параметров-ссылок и возвращаемого типа при использовании методов ArrayList являются типом E. ArrayList<E> предпочтительнее, чем ArrayList. Например, ArrayList<String> names = new ArrayList<String>(); позволяет компилятору находить ошибки, которые в противном случае были бы обнаружены во время выполнения программы.
    • 4.8.A.4 Класс ArrayList является частью пакета java.util. Для использования этого класса в программе необходимо использовать оператор/инструкцию import.
    • 4.8.A.5 Следующие методы ArrayList — включая их назначение и моменты использования — входят в Справочник по Java:
      • int size() возвращает количество элементов в списке.
      • boolean add(E obj) добавляет obj в конец списка; возвращает true.
      • void add(int index, E obj) вставляет obj на позицию index (0 <= index <= size), сдвигая элементы на позициях index и выше вправо (добавляя 1 к их индексам) и увеличивая размер на 1.
      • E get(int index) возвращает элемент в позиции index в списке.
      • E set(int index, E obj) заменяет элемент на позиции index на obj; возвращает элемент, который ранее находился на позиции index.
      • E remove(int index) удаляет элемент из позиции index, перемещая элементы в позициях index + 1 и выше влево (уменьшая их индексы на 1) и уменьшая размер на 1; возвращает элемент, который ранее находился в позиции index.
    • 4.8.A.6 Индексы для объекта ArrayList начинаются с 0 и заканчиваются количеством элементов - 1.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    What an ArrayList really is

    An ArrayList 动态数组 grows and shrinks as you add or remove items. Declare it with the element type in <>:

    ArrayList<String> names = new ArrayList<String>();
    names.add("Amy");           // append
    names.add(0, "Bob");        // insert at index
    names.get(0);               // read
    names.set(1, "Cara");       // replace
    names.remove(0);            // delete, shifts the rest left
    names.size();               // count (a method, unlike array.length)
    
    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    ArrayList/əˈreɪ lɪst/ ArrayList
    4.9

    Visiting Every Element of an ArrayList

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.9.A: Develop code used to traverse the elements of an ArrayList and determine the results of these traversals.

    • 4.9.A.1 Traversing an ArrayList is when iteration or recursive statements are used to access all or an ordered sequence of the elements in an ArrayList.
    • 4.9.A.2 Deleting elements during a traversal of an ArrayList requires the use of special techniques to avoid skipping elements.
    • 4.9.A.3 Attempting to access an index value outside of its range will result in an IndexOutOfBoundsException.
    • 4.9.A.4 Changing the size of an ArrayList while traversing it using an enhanced for loop can result in a ConcurrentModificationException. Therefore, when using an enhanced for loop to traverse an ArrayList, you should not add or remove elements.
    Русский

    Цель обучения 4.9.A: Написать код для обхода элементов объекта ArrayList и определить результаты этих обходов.

    • 4.9.A.1 Обход объекта ArrayList — это использование циклов или рекурсивных инструкций для доступа ко всем элементам или упорядоченной последовательности элементов в объекте ArrayList.
    • 4.9.A.2 Удаление элементов во время обхода объекта ArrayList требует использования специальных техник во избежание пропуска элементов.
    • 4.9.A.3 Попытка обращения к значению индекса вне допустимого диапазона приведет к возникновению ошибки IndexOutOfBoundsException.
    • 4.9.A.4 Изменение размера объекта ArrayList во время его обхода с использованием улучшенного цикла for может привести к ошибке ConcurrentModificationException. Поэтому, используя улучшенный цикл for для обхода объекта ArrayList, не следует добавлять или удалять элементы.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Traverse with an index loop or a for-each loop, just like arrays (use size() and get(i)):

    for (int i = 0; i < list.size(); i++) { ... list.get(i) ... }
    for (String s : list) { ... }
    

    Exam skill: when removing items in an index loop, either loop backwards or do not increment i after a removal – otherwise removing shifts elements left and you skip one. And never add or remove elements while traversing an ArrayList with a for-each loop: changing its size mid-loop throws a ConcurrentModificationException, so use an index loop (backwards, as above) whenever you must remove.

    4.10

    Standard ArrayList Algorithms

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.10.A: Develop code for standard and original algorithms for a particular context or specification that involve ArrayList objects and determine the result of these algorithms.

    • 4.10.A.1 There are standard ArrayList algorithms that utilize traversals to:
      • determine a minimum or maximum value
      • compute a sum or average
      • determine if at least one element has a particular property
      • determine if all elements have a particular property
      • determine the number of elements having a particular property
      • access all consecutive pairs of elements
      • determine the presence or absence of duplicate elements
      • shift or rotate elements left or right
      • reverse the order of the elements
      • insert elements
      • delete elements
    • 4.10.A.2 Some algorithms require multiple String, array, or ArrayList objects to be traversed simultaneously.
    Русский

    Цель обучения 4.10.A: Разрабатывать код для стандартных и оригинальных алгоритмов для конкретного контекста или спецификации, включающих объекты ArrayList, и определять результат этих алгоритмов.

    • 4.10.A.1 Существуют стандартные алгоритмы для ArrayList, использующие обход для:
      • определения минимального или максимального значения
      • вычисления суммы или среднего значения
      • определения наличия хотя бы одного элемента с определенным свойством
      • определения наличия свойства у всех элементов
      • подсчета количества элементов с определенным свойством
      • доступа ко всем последовательным парам элементов
      • определения наличия или отсутствия дубликатов элементов
      • перемещения или поворота элементов влево или вправо
      • реверсирования порядка элементов
      • вставки элементов
      • удаления элементов
    • 4.10.A.2 Некоторые алгоритмы требуют одновременного обхода нескольких объектов String, массивов или объектов ArrayList.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    The same algorithms as arrays – max/min, count, sum – plus insertion and deletion that arrays cannot do easily. A common task is to remove all elements matching a condition, handling the index-shift carefully.

    4.11

    Grids: Two-Dimensional Arrays

    Syllabus · ⁨Программа⁩
    Learning ObjectiveEssential Knowledge

    4.11.A
    Develop code used to represent collections of related data using two-dimensional (2D) array objects.

    • 4.11.A.1 A 2D array is stored as an array of arrays. Therefore, the way 2D arrays are created and indexed is similar to 1D array objects. The size of a 2D array is established at the time of creation and cannot be changed. 2D arrays can store either primitive data or object reference data.
      • Exclusion statement: Nonrectangular 2D array objects are outside the scope of the AP Computer Science A course and exam.
    • 4.11.A.2 When a 2D array is created using the keyword new, all of its elements are initialized to the default values for the element data type. The default value for int is 0, for double is 0.0, for boolean is false, and for a reference type is null.
    • 4.11.A.3 The initializer list used to create and initialize a 2D array consists of initializer lists that represent 1D arrays; for example, int[][] arr2D = { {1, 2, 3}, {4, 5, 6} };.
    • 4.11.A.4 The square brackets [row][col] are used to access and modify an element in a 2D array. For the purposes of the exam, when accessing the element at arr[first][second], the first index is used for rows, the second index is used for columns.
    • 4.11.A.5 A single array that is a row of a 2D array can be accessed using the 2D array name and a single set of square brackets containing the row index.
    • 4.11.A.6 The number of rows contained in a 2D array can be accessed through the length attribute. The valid row index values for a 2D array are 0 through one less than the number of rows or the length of the array, inclusive. The number of columns contained in a 2D array can be accessed through the length attribute of one of the rows. The valid column index values for a 2D array are 0 through one less than the number of columns or the length of any given row of the array, inclusive. For example, given a 2D array named values, the number of rows is values.length and the number of columns is values[0].length. Using an index value outside of these ranges will result in an ArrayIndexOutOfBoundsException.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    A 2D array 二维数组 is a grid (rows and columns) – an array of arrays:

    A two-dimensional array (a table) with row and column indices
    A two-dimensional array (a table) with row and column indices
    int[][] grid = new int[3][4];   // 3 rows, 4 columns
    grid[r][c] = 7;                 // row r, column c
    int rows = grid.length;         // 3
    int cols = grid[0].length;      // 4
    
    Explore · ⁨Исследовать⁩

    Index a 2D array by row and column

    A 2D array is a grid addressed by [row][col]. Move the indices and watch which cell they select — row first, then column, both counting from 0.

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    2D array/ˌtuː ˈdiː əˈreɪ/ 2-мерный массив
    4.12

    Walking Through a Grid

    Syllabus · ⁨Программа⁩
    Learning ObjectiveEssential Knowledge

    4.12.A
    Develop code used to traverse the elements in a 2D array and determine the result of these traversals.

    • 4.12.A.1 Nested iteration statements are used to traverse and access all or an ordered sequence of elements in a 2D array. Since 2D arrays are stored as arrays of arrays, the way 2D arrays are traversed using for loops and enhanced for loops is similar to 1D array objects. Nested iteration statements can be written to traverse the 2D array in row-major order, column-major order, or a uniquely defined order. Row-major order refers to an ordering of 2D array elements where traversal occurs across each row, whereas column-major order traversal occurs down each column.
    • 4.12.A.2 The outer loop of a nested enhanced for loop used to traverse a 2D array traverses the rows. Therefore, the enhanced for loop variable must be the type of each row, which is a 1D array. The inner loop traverses a single row. Therefore, the inner enhanced for loop variable must be the same type as the elements stored in the 1D array. Assigning a new value to the enhanced for loop variable does not change the value stored in the array.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Traversing a 2-D array

    Visit every cell with nested loops – the outer over rows, the inner over columns (row-major order 行主序):

    for (int r = 0; r < grid.length; r++)
        for (int c = 0; c < grid[0].length; c++)
            System.out.print(grid[r][c]);
    
    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    row-major order/rəʊ ˈmeɪdʒə ˈɔːdə/ порядок по строкам
    4.13

    Standard 2D Array Algorithms

    Syllabus · ⁨Программа⁩
    Learning ObjectiveEssential Knowledge

    4.13.A
    Develop code for standard and original algorithms for a particular context or specification that involves 2D arrays and determine the result of these algorithms.

    • 4.13.A.1 There are standard algorithms that utilize 2D array traversals to:
      • determine a minimum or maximum value of all the elements or for a designated row, column, or other subsection
      • compute a sum or average of all the elements or for a designated row, column, or other subsection
      • determine if at least one element has a particular property in the entire 2D array or for a designated row, column, or other subsection
      • determine if all elements of the 2D array or a designated row, column, or other subsection have a particular property
      • determine the number of elements in the 2D array or in a designated row, column, or other subsection having a particular property
      • access all consecutive pairs of elements
      • determine the presence or absence of duplicate elements in the 2D array or in a designated row, column, or other subsection
      • shift or rotate elements in a row left or right or in a column up or down
      • reverse the order of the elements in a row or column

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Typical grid tasks: sum a row or column, find the max in the grid, count matching cells, or sum a diagonal (where r == c). Each is a nested traversal with a running result.

    4.14

    Finding a Value: Linear and Binary Search

    Syllabus · ⁨Программа⁩
    Learning ObjectiveEssential Knowledge

    4.14.A
    Develop code used for linear search algorithms to search for specific information in a collection and determine the results of executing a search.

    • 4.14.A.1 Linear search algorithms are standard algorithms that check each element in order until the desired value is found or all elements in the array or ArrayList have been checked. Linear search algorithms can begin the search process from either end of the array or ArrayList.
    • 4.14.A.2 When applying linear search algorithms to 2D arrays, each row must be accessed then linear search applied to each row of the 2D array.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Binary search: halve and conquer
    • Linear search 线性搜索 checks each element in turn – works on any list, taking up to $n$ steps.
    • Binary search 二分搜索 works only on a sorted list: check the middle, then discard the half that cannot contain the target, repeating. It takes about $\log_2 n$ steps – far faster on large data.
    Binary search halves the range at each step
    Binary search halves the range at each step
    Linear search checks every element in turn until the target is found
    Linear search checks every element in turn until the target is found
    int lo = 0, hi = a.length - 1;
    while (lo <= hi) {
        int mid = (lo + hi) / 2;
        if (a[mid] == target) return mid;
        else if (a[mid] < target) lo = mid + 1;
        else hi = mid - 1;
    }
    

    Exam skill: binary search requires sorted data; know how many comparisons it makes and how lo, hi, mid update.

    Worked example. Search for target = 40 in the sorted array {3, 9, 14, 23, 31, 42, 55} (indices 0–6). Start lo=0, hi=6:

    • mid = (0+6)/2 = 3, a[3]=23 < 40, so lo = 4;
    • mid = (4+6)/2 = 5, a[5]=42 > 40, so hi = 4;
    • mid = (4+4)/2 = 4, a[4]=31 < 40, so lo = 5;
    • now lo (5) > hi (4), so the loop ends – 40 is not present.

    Each step halved the range, so even this miss took only three comparisons.

    Explore · ⁨Исследовать⁩

    Compare linear and binary search

    Linear search checks every element in turn; binary search halves a sorted list each step. Watch binary search reach the target in far fewer comparisons.

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    Linear search/ˈlɪnɪə sɜːtʃ/ Линейный поиск
    Binary search/ˈbaɪnəri sɜːtʃ/ Бинарный поиск
    4.15

    Putting Data in Order: Selection and Insertion Sort

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.15.A: Determine the result of executing each step of sorting algorithms to sort the elements of a collection.

    • 4.15.A.1 Selection sort and insertion sort are iterative sorting algorithms that can be used to sort elements in an array or ArrayList.
    • 4.15.A.2 Selection sort repeatedly selects the smallest (or largest) element from the unsorted portion of the list and swaps it into its correct (and final) position in the sorted portion of the list.
    • 4.15.A.3 Insertion sort inserts an element from the unsorted portion of a list into its correct (but not necessarily final) position in the sorted portion of the list by shifting elements of the sorted portion to make room for the new element.
    Русский

    Цель обучения 4.15.A: Определить результат выполнения каждого шага алгоритмов сортировки для сортировки элементов коллекции.

    • 4.15.A.1 Сортировка выбором (selection sort) и сортировка вставками (insertion sort) — это итеративные алгоритмы сортировки, которые могут использоваться для сортировки элементов в массиве или списке ArrayList.
    • 4.15.A.2 Сортировка выбором многократно выбирает наименьший (или наибольший) элемент из неотсортированной части списка и меняет его местами с элементом, стоящим на правильной (и окончательной) позиции в отсортированной части списка.
    • 4.15.A.3 Сортировка вставками помещает элемент из неотсортированной части списка на его правильное (но не обязательно конечное) место в отсортированной части списка, сдвигая элементы отсортированной части, чтобы освободить место для нового элемента.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Insertion sort
    Bubble sort, pass by pass
    • Selection sort 选择排序 repeatedly finds the smallest remaining element and swaps it into place.
    • Insertion sort 插入排序 grows a sorted front, inserting each new element where it belongs.
    An insertion sort, shifting each key into place pass by pass
    An insertion sort, shifting each key into place pass by pass

    Both are simple and take about $n^2$ steps on average – fine for small arrays. Be able to trace the array after each pass.

    Explore · ⁨Исследовать⁩

    Watch a sorting algorithm order a list

    A sort rearranges elements into order. Step through selection/insertion sort to see the sorted region grow one element at a time.

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    Selection sort/sɪˈlekʃn sɔːt/ Сортировка выбором
    Insertion sort/ɪnˈsɜːʃn sɔːt/ Сортировка вставками
    4.16

    Methods That Call Themselves: Recursion

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.16.A: Determine the result of calling recursive methods.

    • 4.16.A.1 A recursive method is a method that calls itself. Recursive methods contain at least one base case, which halts the recursion, and at least one recursive call. Recursion is another form of repetition.
    • 4.16.A.2 Each recursive call has its own set of local variables, including the parameters. Parameter values capture the progress of a recursive process, much like loop control variable values capture the progress of a loop.
    • 4.16.A.3 Any recursive solution can be replicated through the use of an iterative approach and vice versa.
      • Exclusion statement: Writing recursive code is outside the scope of the AP Computer Science A course and exam.
    Русский

    Цель обучения 4.16.A: Определять результат вызова рекурсивных методов.

    • 4.16.A.1 Рекурсивный метод — это метод, который вызывает сам себя. Рекурсивные методы содержат как минимум одно базовое условие, останавливающее рекурсию, и как минимум один рекурсивный вызов. Рекурсия является еще одной формой повторения.
    • 4.16.A.2 Каждый рекурсивный вызов имеет свой собственный набор локальных переменных, включая параметры. Значения параметров фиксируют прогресс рекурсивного процесса, подобно тому, как значения управляющей переменной цикла фиксируют прогресс цикла.
    • 4.16.A.3 Любое рекурсивное решение может быть реализовано с помощью итеративного подхода, и наоборот.
      • Исключение: Написание рекурсивного кода не входит в курс и экзамен по информатике AP Computer Science A.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Recursion & the call stack

    Recursion 递归 is a method that calls itself on a smaller input. It needs a base case 基本情况 that stops the calls, and a recursive case that moves toward the base:

    public static int factorial(int n) {
        if (n <= 1) return 1;          // base case
        return n * factorial(n - 1);   // recursive case
    }
    

    Without a reachable base case, recursion never stops (a stack overflow).

    Recursion and iteration are interchangeable. Any recursive solution can be rewritten with a loop (an iterative approach), and any loop can be rewritten with recursion - they solve the same problems. The factorial above is identical in effect to an iterative version:

    public static int factorial(int n) {
        int result = 1;
        for (int i = 2; i <= n; i++) result *= i;   // same answer, no self-call
        return result;
    }
    

    So the choice is about clarity, not capability: recursion reads naturally for problems with a self-similar structure (trees, merge sort), while iteration avoids the memory cost of stacking a call frame per step. The exam may ask you to convert one into the other.

    Explore · ⁨Исследовать⁩

    Unfold a recursive call

    A recursive method calls itself on a smaller input until it hits a base case, then the results fold back up. Step through to watch the calls stack and unwind.

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    Recursion/rɪˈkɜːʃn/ Рекурсия
    base case/beɪs keɪs/ базовым случаем
    4.17

    Recursive Search and Merge Sort

    Syllabus · ⁨Программа⁩
    English

    Learning Objective 4.17.A: Determine the result of executing recursive algorithms that use strings or collections.

    • 4.17.A.1 Recursion can be used to traverse String objects, arrays, and ArrayList objects.

    Learning Objective 4.17.B: Determine the result of each iteration of a binary search algorithm used to search for information in a collection.

    • 4.17.B.1 Data must be in sorted order to use the binary search algorithm. Binary search starts at the middle of a sorted array or ArrayList and eliminates half of the array or ArrayList in each recursive call until the desired value is found or all elements have been eliminated.
    • 4.17.B.2 Binary search is typically more efficient than linear search.
      • Exclusion statement: Search algorithms other than linear and binary search are outside the scope of the AP Computer Science A course and exam.
    • 4.17.B.3 The binary search algorithm can be written either iteratively or recursively.

    Learning Objective 4.17.C: Determine the result of each iteration of the merge sort algorithm when used to sort a collection.

    • 4.17.C.1 Merge sort is a recursive sorting algorithm that can be used to sort elements in an array or ArrayList.
      • Exclusion statement: Sorting algorithms other than selection, insertion, and merge sort are outside the scope of the AP Computer Science A course and exam.
    • 4.17.C.2 Merge sort repeatedly divides an array into smaller subarrays until each subarray is one element and then recursively merges the sorted subarrays back together in sorted order to form the final sorted array.
    Русский

    Цель обучения 4.17.A: Определять результат выполнения рекурсивных алгоритмов, использующих строки или коллекции.

    • 4.17.A.1 Рекурсию можно использовать для обхода String объектов, массивов и ArrayList объектов.

    Цель обучения 4.17.B: Определять результат каждой итерации алгоритма бинарного поиска, используемого для поиска информации в коллекции.

    • 4.17.B.1 Данные должны быть отсортированы для использования алгоритма бинарного поиска. Бинарный поиск начинается с середины отсортированного массива или ArrayList и отбрасывает половину массива или ArrayList при каждом рекурсивном вызове, пока не будет найдено нужное значение или все элементы не будут исключены.
    • 4.17.B.2 Бинарный поиск обычно эффективнее линейного поиска.
      • Исключение: Алгоритмы поиска, отличные от линейного и бинарного, не входят в курс и экзамен по информатике AP Computer Science A.
    • 4.17.B.3 Алгоритм бинарного поиска может быть написан как итеративно, так и рекурсивно.

    Цель обучения 4.17.C: Определять результат каждой итерации алгоритма сортировки слиянием при использовании для сортировки коллекции.

    • 4.17.C.1 Сортировка слиянием — это рекурсивный алгоритм сортировки, который можно использовать для упорядочивания элементов в массиве или ArrayList.
      • Исключение: Алгоритмы сортировки, отличные от сортировки выбором, сортировки вставками и сортировки слиянием, не входят в курс и экзамен по информатике AP Computer Science A.
    • 4.17.C.2 Сортировка слиянием постоянно делит массив на меньшие подмассивы до тех пор, пока каждый подмассив не станет состоять из одного элемента, а затем рекурсивно объединяет отсортированные подмассивы обратно в отсортированном порядке, образуя итоговый отсортированный массив.

    Source: College Board AP Course and Exam Description · ⁨Источник: Описание курса и экзамена College Board AP⁩

    Merge sort: split, then merge

    Recursion powers efficient algorithms. Binary search can be written recursively (search the correct half). Merge sort 归并排序 splits the array in half, sorts each half recursively, then merges the two sorted halves – taking about $n\log_2 n$ steps, much faster than selection or insertion sort on large data.

    Merge sort splits the array to single elements, then merges sorted halves back up
    Merge sort splits the array to single elements, then merges sorted halves back up

    Worked example. Trace factorial(4). Each call defers to a smaller one: factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * 2 * factorial(1). factorial(1) hits the base case and returns 1, so the calls unwind inward: 2 * 1 = 2, then 3 * 2 = 6, then 4 * 6 = 24. Writing each call above its returned value is the reliable way to trace recursion.

    Exam skill: trace a recursive method by writing out each call and its return value, and know that merge sort's efficiency ($n\log n$) beats the $n^2$ simple sorts.

    Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
    English Русский
    Merge sort/mɜːdʒ sɔːt/ Сортировка слиянием
    4.17

    Exam tips

    • Weigh both benefits and harms of collecting data — this unit is tested through short written justification, not code.
    • Protect personally identifiable information (PII) and explain privacy and security risks in context.
    • Name real harms: data breaches, surveillance, and algorithmic bias from unrepresentative data.
    • Respect intellectual property and licensing when you reuse code or data.
    • Give a specific, reasoned answer — a vague "it could be bad" earns no marks.

Log in or create account · ⁨Войти или создать аккаунт⁩

IGCSE, A-Level & AP