Passer au contenu
Sujets

AP Informatique A

Conseils

Informatique AP A est un cours de Java : objets et classes, types primitifs et flux de contrôle, écriture de classes, tableaux et ArrayLists, tableaux 2D, héritage et polymorphisme, et récursion. C'est un premier cours de programmation enseigné avec du vrai code orienté objet, et non du pseudocode.

Les quatre questions à développement sont en Java manuscrit. Aucun compilateur ne détectera une virgule manquante ou un mauvais type de retour pour vous, alors écrivez du code sur papier pendant la révision — c'est une compétence différente de la taper.

Tableaux et ArrayLists sont le sujet le plus testé. Être à l'aise avec la traversée, l'insertion et la suppression, et savoir quel index se déplace lors de la suppression d'un élément, rapporte plus que n'importe quelle autre heure unique de pratique.

Les notes couvrent les unités du CED en Java, avec des exemples exécutables que vous pouvez éditer dans le navigateur. Les anciens FRQs et critères de notation sont dans la bibliothèque — tous les quatre sont des questions d'écriture de code, donc les solutions expliquées sont des méthodes complètes plutôt que des fragments.

  • 1

    Utilisation d'objets et de méthodes

    Regarder la leçon
    1.1

    Introduction aux Algorithmes, Programmation et Compilateurs

    Programme

    Objectif d'apprentissage 1.1.A : Représenter les modèles et algorithmes trouvés dans la vie quotidienne à l'aide du langage écrit ou de diagrammes.

    • 1.1.A.1 Les algorithmes définissent des processus étape par étape à suivre lors de l'accomplissement d'une tâche ou de la résolution d'un problème. Ces algorithmes peuvent être représentés à l'aide du langage écrit ou de diagrammes.
    • 1.1.A.2 La séquençage définit un ordre pour l'accomplissement des étapes d'un processus. Les étapes d'un processus sont accomplies une à la fois.

    Objectif d'apprentissage 1.1.B : Expliquer le processus de compilation et d'exécution du code.

    • 1.1.B.1 Le code peut être écrit dans n'importe quel éditeur de texte ; toutefois, un environnement de développement intégré (IDE) est souvent utilisé pour écrire des programmes car il fournit des outils permettant à un programmeur d'écrire, compiler et exécuter du code.
    • 1.1.B.2 Un compilateur vérifie le code pour certaines erreurs. Les erreurs détectables par le compilateur doivent être corrigées avant que le programme puisse être exécuté.

    Objectif d'apprentissage 1.1.C : Identifier les types d'erreurs de programmation.

    • 1.1.C.1 Une erreur de syntaxe est une erreur dans le programme où les règles du langage de programmation ne sont pas respectées. Ces erreurs sont détectées par le compilateur.
    • 1.1.C.2 Une erreur logique est une erreur dans l'algorithme ou le programme qui provoque un comportement incorrect ou inattendu. Ces erreurs sont détectées en testant le programme avec des données spécifiques pour voir s'il produit le résultat attendu.
    • 1.1.C.3 Une erreur d'exécution est une erreur dans le programme qui se produit pendant l'exécution d'un programme. Les erreurs d'exécution provoquent généralement la terminaison anormale du programme.
    • 1.1.C.4 Une exception est un type d'erreur d'exécution qui survient en raison d'une erreur inattendue non détectée par le compilateur. Elle interrompt le flux normal de l'exécution du programme.

    Source : Description du cours et de l'examen AP College Board

    Code source sur une station de travail — les programmes sont écrits, compilés et exécutés en tant qu'instructions précises
    Code source sur un poste de travail — les programmes sont écrits, compilés et exécutés comme des instructions précises

    Un algorithme 算法 est une procédure finie étape par étape qui résout un problème. Un programme 程序 exprime un algorithme dans un langage exécutable par un ordinateur. Java est compilé 编译 : le compilateur 编译器 traduit votre code source en bytecode, que la Machine Virtuelle Java (JVM) exécute. Une erreur de syntaxe 语法错误 (violant la grammaire) est détectée par le compilateur ; une erreur logique 逻辑错误 (mauvais résultat) ne l'est pas – le programme s'exécute mais se comporte mal.

    Un compilateur traduit tout le programme d'un coup ; un interpréteur l'exécute ligne par ligne
    Un compilateur traduit tout le programme d'un coup ; un interpréteur l'exécute ligne par ligne
    Plusieurs puces de processeur d'ordinateur vues de dessous
    Votre programme Java est compilé en instructions qu'un CPU comme celui-ci exécute réellement
    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    algorithm/ˈælɡərɪθəm/ 算法 suàn fǎ
    program/ˈprəʊɡræm/ 程序 chéng xù
    compiled/kəmˈpaɪld/ 编译 biān yì
    compiler/kəmˈpaɪlə/ 编译器 biān yì qì
    syntax error/ˈsɪntæks ˈerə/ 语法错误 yǔ fǎ cuò wù
    logic error/ˈlɒdʒɪk ˈerə/ 逻辑错误 luó jí cuò wù
    1.2

    Variables et Types de Données

    Programme

    Objectif d'apprentissage 1.2.A : Identifier la catégorie de type de données la plus appropriée pour une spécification donnée.

    • 1.2.A.1 Un type de données est un ensemble de valeurs et un ensemble correspondant d'opérations sur ces valeurs. Les types de données peuvent être catégorisés comme primitifs ou références.
    • 1.2.A.2 Les types de données primitifs utilisés dans ce cours définissent l'ensemble des valeurs et les opérations correspondantes sur ces valeurs pour les nombres et les valeurs booléennes.
    • 1.2.A.3 Un type de référence est utilisé pour définir des objets qui ne sont pas des types primitifs.

    Objectif d'apprentissage 1.2.B : Développer du code pour déclarer des variables stockant des nombres et des valeurs booléennes.

    • 1.2.B.1 Les trois types de données primitifs utilisés dans ce cours sont int, double et boolean. Une valeur int est un entier. Une valeur double est un nombre réel. Une valeur boolean est soit true soit false.
      • Énoncé d'exclusion : Les cinq autres types de données primitifs (long, short, byte, float et char) sont hors du programme du cours et de l'examen AP Computer Science A.
    • 1.2.B.2 Une variable est un emplacement de stockage contenant une valeur qui peut changer pendant l'exécution du programme. Chaque variable a un nom et un type de données associé. Une variable de type primitif contient une valeur primitive de ce type.

    Source : Description du cours et de l'examen AP College Board

    Une variable 变量 est une boîte nommée stockant une valeur d'un type 类型 fixe. Les principaux types primitifs 基本类型 de Java sont int (nombres entiers), double (décimaux) et boolean (true/false). Déclarez avec le type d'abord :

    Les types de données de base de Java, chacun stockant un type de valeur différent
    Les types de données de base de Java, chacun stockant un type de valeur différent
    int score = 90;
    double price = 4.99;
    boolean passed = true;
    
    Explorer

    Explorer comment une variable contient une seule valeur à la fois

    Une variable est une boîte nommée qui stocke une valeur d'un type fixe. Parcourez les lignes et observez chaque boîte prendre sa valeur ; notez que la réassignation score écrase l'ancien nombre au lieu de créer une nouvelle boîte.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    variable/ˈveərɪəbl/ 变量 biàn liàng
    type/taɪp/ 类型 lèi xíng
    primitive types/ˈprɪmɪtɪv taɪps/ 基本类型 jī běn lèi xíng
    1.3

    Expressions et Sortie

    Programme

    Objectif d'apprentissage 1.3.A : Développer du code pour générer une sortie et déterminer le résultat qui serait affiché.

    • 1.3.A.1 System.out.print et System.out.println affichent des informations sur l'écran de l'ordinateur. System.out.println déplace le curseur sur une nouvelle ligne après l'affichage des informations, tandis que System.out.print ne le fait pas.

    Objectif d'apprentissage 1.3.B : Développer du code pour utiliser des littérales de chaîne et déterminer le résultat de l'utilisation de littérales de chaîne.

    • 1.3.B.1 Une littérale est la représentation codée d'une valeur fixe.
    • 1.3.B.2 Une littérale de chaîne est une séquence de caractères enfermée entre guillemets doubles.
    • 1.3.B.3 Les séquences d'échappement sont des séquences spéciales de caractères qui peuvent être incluses dans une chaîne. Elles commencent par un \ et ont une signification spéciale en Java. Les séquences d'échappement utilisées dans ce cours incluent guillemet double \", trait de soulignement inversé \\ et nouveau trait de soulignement \n.

    Objectif d'apprentissage 1.3.C : Développer du code pour des expressions arithmétiques et déterminer le résultat de ces expressions.

    • 1.3.C.1 Les expressions arithmétiques, qui consistent en des valeurs numériques, des variables et des opérateurs, incluent des expressions de type int et double.
    • 1.3.C.2 Les opérateurs arithmétiques consistent en l'addition +, la soustraction -, la multiplication *, la division / et le reste %. Une opération arithmétique utilisant deux valeurs int évaluera vers une valeur int. Une opération arithmétique utilisant au moins une valeur double évaluera vers une valeur double.
      • Énoncé d'exclusion : Les expressions qui aboutissent à des valeurs doubles spéciales (par exemple, les infinis et NaN) sont hors du programme du cours et de l'examen AP Computer Science A.
    • 1.3.C.3 En divisant des valeurs numériques qui sont toutes deux des valeurs int, le résultat n'est que la portion entière du quotient. En divisant des valeurs numériques utilisant au moins une valeur double, le résultat est le quotient.
    • 1.3.C.4 L'opérateur reste % est utilisé pour calculer le reste lorsque le nombre a est divisé par un autre nombre b.
      • Énoncé d'exclusion : L'utilisation de valeurs inférieures à 0 pour a et l'utilisation de valeurs inférieures ou égales à 0 pour b est hors du programme du cours et de l'examen AP Computer Science A.
    • 1.3.C.5 Les opérateurs peuvent être utilisés pour construire des expressions composées. Au moment de la compilation, les valeurs numériques sont associées aux opérateurs selon la priorité des opérateurs pour déterminer comment ils sont groupés. Des parenthèses peuvent être utilisées pour modifier la priorité des opérateurs. La multiplication, la division et le reste ont une priorité supérieure à l'addition et à la soustraction. Les opérateurs ayant la même priorité sont évalués de gauche à droite.
    • 1.3.C.6 Une tentative de division d'un entier par zéro entraînera une ArithmeticException.
      • Énoncé d'exclusion : L'utilisation de la division par zéro lorsque l'une des valeurs numériques est une double est hors du programme du cours et de l'examen AP Computer Science A.

    Source : Description du cours et de l'examen AP College Board

    Une expression 表达式 combine des valeurs et des opérateurs pour calculer un résultat : + - * / et % (modulo 取模, le reste). La division entière tronque : 7 / 2 est 3, tandis que 7 % 2 est 1. La précedence des opérateurs suit les mathématiques (*,/,% avant +,-). Imprimer avec :

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

    Diviser un entier par l'entier 0 (comme 7 / 0) n'est pas autorisé et provoque une ArithmeticException à l'exécution. Dans une chaîne, une barre oblique inverse marque une séquence d'échappement 转义序列 : \" imprime une guillemet double, \\ une barre oblique simple, et \n commence une nouvelle ligne – donc System.out.println("She said \"hi\""); imprime She said "hi".

    Explorer

    Explorer l'ordre des opérations étape par étape

    Java applique *, /, % avant + et -, en travaillant de gauche à droite. Observez chaque étape et voyez pourquoi 2 + 3 * 4 vaut $14$, et non $20$ — la multiplication se produit en premier.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    expression/ekˈspreʃn/ 表达式 biǎo dá shì
    modulus/ˈmɒdjʊləs/ 取模 qǔ mó
    escape sequence/eˈskeɪp ˈsiːkwəns/ 转义序列 zhuǎn yì xù liè
    assignment/əˈsaɪnmənt/ 赋值 fù zhí
    1.4

    Instructions d'Affectation et Entrée

    Programme

    Objectif d'apprentissage 1.4.A : Développer du code pour des instructions d'affectation avec des expressions et déterminer la valeur stockée dans la variable en conséquence.

    • 1.4.A.1 Toute variable doit être affectée d'une valeur avant qu'elle puisse être utilisée dans une expression. Cette valeur doit provenir d'un type de données compatible. Une variable est initialisée la première fois qu'elle reçoit une valeur. Les types de référence peuvent être affectés à un nouvel objet ou à null s'il n'y a pas d'objet. La littérale null est une valeur spéciale utilisée pour indiquer qu'une référence n'est associée à aucun objet.
    • 1.4.A.2 L'opérateur d'affectation = permet à un programme d'initialiser ou de modifier la valeur stockée dans une variable. La valeur de l'expression située à droite est stockée dans la variable située à gauche.
      • Déclaration d'exclusion : L'utilisation d'opérateurs d'affectation à l'intérieur d'expressions (p. ex., a = b = 4; ou a[i += 5]) est hors du programme et de l'examen AP Computer Science A.
    • 1.4.A.3 Lors de l'exécution, une expression est évaluée pour produire une valeur unique. La valeur d'une expression a un type basé sur l'évaluation de cette expression.

    Objectif d'apprentissage 1.4.B : Développer du code pour lire des entrées.

    • 1.4.B.1 Les entrées peuvent provenir de diverses formes, telles que tactiles, audio, visuelles ou textuelles. La classe Scanner est un moyen d'obtenir des entrées textuelles depuis le clavier.
      • Déclaration d'exclusion : Toute forme spécifique d'entrée provenant de l'utilisateur est hors du programme et de l'examen AP Computer Science A.

    Source : Description du cours et de l'examen AP College Board

    Une affectation 赋值 x = expr; évalue le côté droit et le stocke dans la variable de gauche. Lire l'entrée avec un Scanner :

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

    Casting et Plage des Variables

    Programme

    Objectif d'apprentissage 1.5.A : Développer du code pour convertir des valeurs primitives en différents types primitifs dans des expressions arithmétiques et déterminer la valeur produite comme résultat.

    • 1.5.A.1 Les opérateurs de conversion (int) et (double) peuvent être utilisés pour convertir une valeur de type double vers un type int (ou inversement).
    • 1.5.A.2 Convertir une valeur de type double en type int entraîne la troncature des chiffres situés à droite de la virgule décimale.
    • 1.5.A.3 Certains codes provoquent que les valeurs int soient automatiquement converties (élargies) en valeurs double.
    • 1.5.A.4 Les valeurs de type double peuvent être arrondies à l'entier le plus proche par (int)(x + 0.5) pour les nombres non négatifs ou (int)(x - 0.5) pour les nombres négatifs.

    Objectif d'apprentissage 1.5.B : Décrire les conditions dans lesquelles une expression entière évalue à une valeur hors limite.

    • 1.5.B.1 La constante Integer.MAX_VALUE contient la valeur de la plus grande valeur possible de type int. La constante Integer.MIN_VALUE contient la valeur de la plus petite valeur possible de type int.
    • 1.5.B.2 Les valeurs entières en Java sont représentées par des valeurs de type int, qui sont stockées en utilisant une quantité finie (4 octets) de mémoire. Par conséquent, une valeur de type int doit se situer dans la plage de Integer.MIN_VALUE à Integer.MAX_VALUE inclusivement.
    • 1.5.B.3 Si une expression évaluerait à une valeur de type int hors de la plage autorisée, un dépassement d'entier se produit. Le résultat est une valeur de type int dans la plage autorisée mais pas nécessairement la valeur attendue.

    Objectif d'apprentissage 1.5.C : Décrire les conditions limitant la précision des expressions.

    • 1.5.C.1 Les ordinateurs allouent une quantité spécifiée de mémoire pour stocker des données selon le type de données. Si une expression évaluerait à une valeur de type double plus précise que ce qui peut être stocké dans la quantité de mémoire allouée, une erreur d'arrondi se produit. Le résultat sera arrondi à la valeur représentable. Pour éviter les erreurs d'arrondi inévitables, utilisez des valeurs de type int.
      • Déclaration d'exclusion : D'autres types de données décimales spéciales pouvant être utilisées pour éviter les erreurs d'arrondi sont hors du programme et de l'examen AP Computer Science A.

    Source : Description du cours et de l'examen AP College Board

    plage int, dépassement et troncature

    Chaque type a une plage fixe ; un int dépasse environ 2.1 milliards. Casting Type conversion convertit entre les types. L'élargissement (de int à double) est automatique ; le rétrécissement nécessite un cast explicite, qui tronque (ne fait pas d'arrondi) :

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

    Compétence d'examen : surveiller la division entière produisant un résultat tronqué alors qu'un décimal était attendu – castez un opérande en double d'abord.

    Exemple résolu. Suivez chaque expression :

    • 7 / 2 → 3 (les deux int, donc la division tronque) ;
    • 7.0 / 2 → 3.5 (un double force la division réelle) ;
    • 7 % 2 → 1 (le reste) ;
    • (double) 7 / 2 → 3.5 (le casting se lie plus fortement que /, donc c'est 7.0 / 2) ;
    • (double) (7 / 2) → 3.0 (les parenthèses calculent 7 / 2 = 3 en int d'abord, puis élargissent).

    Les deux derniers semblent similaires mais diffèrent – la position du casting décide si la troncature se produit.

    Explorer

    Pourquoi int et double stockent les nombres différemment

    Un int ne contient que des nombres entiers dans une plage fixe ; un double stocke une mantisse et un exposant, échangeant la précision exacte contre une plage immense. Cast double→int jette la fraction, et une valeur dépassant la plage d'un int provoque un débordement.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    Casting/ˈkæstɪŋ/ 类型转换 lèi xíng zhuǎn huàn
    library/ˈlaɪbrəri/ 库 kù
    1.6

    Opérateurs d'Affectation Composée

    Programme

    Objectif d'apprentissage 1.6.A : Développer du code pour des instructions d'affectation avec des opérateurs d'affectation composés et déterminer la valeur stockée dans la variable en tant que résultat.

    • 1.6.A.1 Les opérateurs d'affectation composés +=, -=, *=, /= et %= peuvent être utilisés à la place de l'opérateur d'affectation dans des expressions numériques. Un opérateur d'affectation composé effectue l'opération arithmétique indiquée entre la valeur de gauche et la valeur de droite, puis assigne le résultat à la variable de gauche.
    • 1.6.A.2 L'opérateur d'incrémentation postérieure ++ et l'opérateur de décrémentation postérieure -- sont utilisés pour ajouter 1 ou soustraire 1 de la valeur stockée dans une variable numérique. La nouvelle valeur est assignée à la variable.
      • Déclaration d'exclusion : L'utilisation d'opérateurs d'incrémentation et de décrémentation sous forme préfixe (p. ex., ++x) est hors du programme et de l'examen AP Computer Science A. L'utilisation d'opérateurs d'incrémentation et de décrémentation à l'intérieur d'autres expressions (p. ex., arr[x++]) est hors du programme et de l'examen AP Computer Science A.

    Source : Description du cours et de l'examen AP College Board

    Des raccourcis combinent une opération avec une affectation : x += 5 signifie x = x + 5 ; de même -=, *=, /=, %=. Les opérateurs incrémentation et décrémentation x++ et x-- ajoutent ou soustrait un.

    1.7

    Interface de Programme Application (API) et Bibliothèques

    Programme

    Objectif d'apprentissage 1.7.A : Identifier les attributs et comportements d'une classe trouvée dans les bibliothèques contenues dans une API.

    • 1.7.A.1 Les bibliothèques sont des collections de classes. Une spécification d'application programming interface (API) informe le programmeur comment utiliser ces classes. La documentation trouvée dans les spécifications API et les bibliothèques est essentielle pour comprendre les attributs et comportements d'une classe définie par l'API. Une classe définit un type de référence spécifique. Les classes dans les APIs et les bibliothèques sont regroupées en paquets. Des classes existantes et des bibliothèques de classes peuvent être utilisées pour créer des objets.
    • 1.7.A.2 Les attributs se réfèrent aux données liées à la classe et sont stockés dans des variables. Les comportements se réfèrent à ce que les instances de la classe peuvent faire (ou ce qui peut être fait avec elles) et sont définis par des méthodes.

    Source : Description du cours et de l'examen AP College Board

    Une API (Application Programming Interface) 应用程序接口 est la liste publiée de classes et méthodes que vous pouvez utiliser. Une bibliothèque 库 est un ensemble de classes préfabriquées (comme Math, String, Scanner). Vous lisez la documentation API pour apprendre ce dont une méthode a besoin (ses paramètres) et ce qu'elle retourne, sans voir son code interne – un exemple d'abstraction 抽象.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    abstraction/əbˈstrækʃn/ 抽象 chōu xiàng
    Comments/ˈkɒments/ 注释 zhù shì
    method signature/ˈmeθəd ˈsɪɡnɪtʃə/ 方法签名 fāng fǎ qiān míng
    Interface/ˈɪntəfeɪs/ 应用程序接口 yìng yòng chéng xù jiē kǒu
    1.8

    Documentation avec Commentaires

    Programme

    Objectif d'apprentissage 1.8.A : Décrire la fonctionnalité et l'utilisation du code via des commentaires.

    • 1.8.A.1 Les commentaires sont écrits pour le programmeur original et d'autres programmeurs afin de comprendre le code et sa fonctionnalité, mais ils sont ignorés par le compilateur et ne sont pas exécutés lors de l'exécution du programme. Trois types de commentaires en Java incluent /* */, qui génère un bloc de commentaires ; //, qui génère un commentaire sur une seule ligne ; et /** */, qui sont des commentaires Javadoc et sont utilisés pour créer de la documentation API.
    • 1.8.A.2 Une précondition est une condition qui doit être vraie juste avant l'exécution d'une méthode afin qu'elle se comporte comme prévu. Il n'y a aucune attente que la méthode vérifie si les préconditions sont satisfaites.
    • 1.8.A.3 Une postcondition est une condition qui doit toujours être vraie après l'exécution d'une méthode. Les postconditions décrivent le résultat de l'exécution en termes de ce qui est retourné ou de la valeur actuelle des attributs d'un objet.

    Source : Description du cours et de l'examen AP College Board

    Les commentaires 注释 sont ignorés par le compilateur mais expliquent le code aux humains : // pour une seule ligne, /* ... */ pour un bloc, et /** ... */ pour un commentaire Javadoc documentant le but, les paramètres et la valeur de retour d'une méthode. Des préconditions et postconditions précises y sont écrites.

    1.9

    Signatures de Méthodes

    Programme

    Objectif d'apprentissage 1.9.A : Identifier la bonne méthode à appeler en se basant sur la documentation et les signatures de méthodes.

    • 1.9.A.1 Une méthode est un bloc de code nommé qui ne s'exécute que lorsqu'elle est appelée. Un bloc de code est toute section de code enfermée entre accolades. L'abstraction procédurale permet à un programmeur d'utiliser une méthode en sachant ce qu'elle fait, même s'il ne sait pas comment elle a été écrite.
    • 1.9.A.2 Un paramètre est une variable déclarée dans l'en-tête d'une méthode ou d'un constructeur et peut être utilisé à l'intérieur du corps de la méthode. Cela permet de passer et d'utiliser des valeurs ou arguments par une méthode ou un constructeur. Une signature de méthode pour une méthode avec des paramètres consiste en le nom de la méthode et la liste ordonnée des types de paramètres. Une signature de méthode pour une méthode sans paramètres consiste en le nom de la méthode et une liste de paramètres vide.

    Objectif d'apprentissage 1.9.B : Décrire comment appeler des méthodes.

    • 1.9.B.1 Une méthode void n'a pas de valeur de retour et n'est donc pas appelée dans le cadre d'une expression.
    • 1.9.B.2 Une méthode non-void retourne une valeur qui est du même type que le type de retour dans l'en-tête. Pour utiliser la valeur de retour lors de l'appel d'une méthode non-void, elle doit être stockée dans une variable ou utilisée comme partie d'une expression.
    • 1.9.B.3 Un argument est une valeur qui est passée à une méthode lors de son appel. Les arguments passés à une méthode doivent être compatibles en nombre et ordre avec les types identifiés dans la liste des paramètres de la signature de méthode. Lors de l'appel de méthodes, les arguments sont passés par valeur. Passage par valeur initialise les paramètres avec des copies des arguments.
    • 1.9.B.4 Les méthodes sont dites surchargées lorsqu'il existe plusieurs méthodes ayant le même nom mais des signatures différentes.
    • 1.9.B.5 Un appel de méthode interrompt l'exécution séquentielle des instructions, faisant en sorte que le programme exécute d'abord les instructions dans la méthode avant de continuer. Une fois la dernière instruction de la méthode exécutée ou qu'une instruction return est exécutée, le flux de contrôle retourne au point immédiatement après où la méthode a été appelée.

    Source : Description du cours et de l'examen AP College Board

    Une signature de méthode 方法签名 est le nom d'une méthode suivi des types de ses paramètres, par ex. nextInt() ou substring(int, int). Pour appeler une méthode, vous devez fournir des arguments 实参 qui correspondent aux paramètres en nombre, type et ordre. L'en-tête de la méthode (la déclaration complète) indique également le type de retour – le type de valeur que la méthode renvoie (void si aucun) – mais le type de retour n'est pas partie de la signature, c'est pourquoi deux méthodes ne peuvent différer uniquement par leur type de retour.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    arguments/ˈɑːɡjuːmənts/ 实参 shí cān
    class (static) method/klæs ˈmeθəd/ 类方法 lèi fāng fǎ
    1.10

    Appeler des méthodes de classe

    Programme

    Objectif d'apprentissage 1.10.A : Développer du code pour appeler des méthodes de classe et déterminer le résultat de ces appels.

    • 1.10.A.1 Les méthodes de classe sont associées à la classe, pas aux instances de la classe. Les méthodes de classe comprennent le mot-clé static dans l'en-tête avant le nom de la méthode.
    • 1.10.A.2 Les méthodes de classe sont généralement appelées en utilisant le nom de la classe avec l'opérateur point. Lorsque l'appel de méthode se produit dans la classe définissante, l'utilisation du nom de la classe est optionnelle dans l'appel.

    Source : Description du cours et de l'examen AP College Board

    Une méthode de classe (statique) 类方法 appartient à la classe elle-même, donc on l'appelle sur le nom de la classe : ClassName.method(args). Aucun objet n'est nécessaire.

    Explorer

    Suivre un appel de méthode de classe sur la pile

    Appeler une méthode de classe comme Math.max pousse un nouveau cadre sur la pile d'appels ; lorsque la méthode retourne une valeur, son cadre est retiré et le contrôle revient à l'appelant. Parcourez pour voir la pile grandir et rétrécir.

    1.11

    Classe Math

    Programme

    Objectif d'apprentissage 1.11.A : Développer du code pour écrire des expressions intégrant des appels à des bibliothèques mathématiques intégrées et déterminer la valeur produite en résultat.

    • 1.11.A.1 La classe Math fait partie du package java.lang. Les classes du package java.lang sont disponibles par défaut.
    • 1.11.A.2 La classe Math contient uniquement des méthodes de classe. Les méthodes de classe suivantes de Math—y compris ce qu'elles font et quand elles sont utilisées—font partie de la référence rapide Java :
      • static int abs(int x) retourne la valeur absolue d'une valeur int.
      • static double abs(double x) retourne la valeur absolue d'une valeur double.
      • static double pow(double base, double exponent) retourne la valeur du premier paramètre élevé à la puissance du deuxième paramètre.
      • static double sqrt(double x) retourne la racine carrée positive d'une valeur double.
      • static double random() retourne une valeur double supérieure ou égale à 0.0 et inférieure à 1.0.
    • 1.11.A.3 Les valeurs retournées par Math.random() peuvent être manipulées à l'aide d'opérateurs arithmétiques et de cast pour produire un int ou un double aléatoire dans une plage définie basée sur des critères spécifiés. Chaque extrémité de la plage peut être inclusive, signifiant que la valeur est incluse, ou exclusive, signifiant que la valeur n'est pas incluse.

    Source : Description du cours et de l'examen AP College Board

    La classe Math fournit des méthodes mathématiques statiques : Math.abs(x), Math.pow(base, exp), Math.sqrt(x), et Math.random() (un double dans $[0,1)$). Pour obtenir un entier aléatoire entre 0 et n-1 : (int)(Math.random() * n).

    1.12

    Objets : Instances de Classes

    Programme

    Objectif d'apprentissage 1.12.A : Expliquer la relation entre une classe et un objet.

    • 1.12.A.1 Un objet est une instance spécifique d'une classe avec des attributs définis. Une classe est l'implémentation formelle, ou plan, des attributs et comportements d'un objet.
    • 1.12.A.2 Une hiérarchie de classes peut être développée en regroupant les attributs et comportements communs de classes apparentées dans une seule classe appelée superclasse. Les classes qui étendent une superclasse, appelées sous-classes, peuvent puiser dans les attributs et comportements existants de la superclasse sans les remplacer dans le code. Cela crée une relation d'héritage des sous-classes vers la superclasse.
      • Énoncé d'exclusion : La conception et l'implémentation de relations d'héritage sont hors du programme du cours et de l'examen AP Computer Science A.
    • 1.12.A.3 Toutes les classes en Java sont des sous-classes de la classe Object.

    Objectif d'apprentissage 1.12.B : Développer du code pour déclarer des variables afin de stocker des types de référence.

    • 1.12.B.1 Une variable de type de référence contient une référence d'objet, qui peut être considérée comme l'adresse mémoire de cet objet.

    Source : Description du cours et de l'examen AP College Board

    = copie la référence, pas l'objet

    Une classe 类 est un modèle ; un objet 对象 est une instance 实例 concrète construite à partir de celui-ci. Une classe regroupe des données (champs) avec du comportement (méthodes) – le cœur de la programmation orientée objet 面向对象编程. String, Scanner, et ArrayList sont toutes des classes que vous instanciez.

    Les classes peuvent être organisées en hiérarchie. Un super-classe 父类 contient les attributs et comportements partagés par plusieurs sous-classes 子类 qui extend ce super-classe – une relation d'héritage 继承关系. Chaque classe en Java est ultimement une sous-classe de la classe intégrée Object, c'est pourquoi chaque objet possède déjà une méthode toString ; écrire une méthode de sous-classe avec la même signature qu'une méthode de super-classe est un redéfinition de méthode 方法重写. (Concevoir votre propre héritage dépasse le cadre de ce cours, mais vous êtes censé reconnaître ce vocabulaire.)

    Diagramme de classe : attributs privés et méthodes publiques
    Diagramme de classe : attributs privés et méthodes publiques
    Une classe est un modèle ; chaque objet est une instance construite à partir de celle-ci
    Une classe est un modèle ; chaque objet est une instance construite à partir de celle-ci
    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    class/klæs/ 类 lèi
    object/ˈɒbdʒekt/ 对象 duì xiàng
    instance/ˈɪnstəns/ 实例 shí lì
    object-oriented programming/ˈɒbdʒekt ˈɔːrɪəntɪd ˈprəʊɡræmɪŋ/ 面向对象编程 miàn xiàng duì xiàng biān chéng
    superclass/ˈsuːpəklæs/ 父类 fù lèi
    subclasses/ˈsʌbklæsɪz/ 子类 zi lèi
    inheritance relationship/ɪnˈherɪtəns rɪˈleɪʃənʃɪp/ 继承关系 jì chéng guān xì
    method overriding/ˈmeθəd ˌəʊvəˈraɪdɪŋ/ 方法重写 fāng fǎ zhòng xiě
    Instantiation/ˌɪnstænʃɪˈeɪʃn/ 实例化 shí lì huà
    constructor/kənˈstrʌktə/ 构造函数 gòu zào hán shù
    reference/ˈrefrəns/ 引用 yǐn yòng
    1.13

    Création et stockage d'objets (Instantiation)

    Programme

    Objectif d'apprentissage 1.13.A : Identifier, en utilisant sa signature, le constructeur correct appelé.

    • 1.13.A.1 Une classe contient des constructeurs qui sont appelés pour créer des objets. Ils ont le même nom que la classe.
    • 1.13.A.2 Une signature de constructeur consiste en le nom du constructeur, qui est le même que celui de la classe, et dans la liste ordonnée des types de paramètres. La liste des paramètres, dans l'en-tête d'un constructeur, répertorie les types des valeurs transmises ainsi que leurs noms de variables.
    • 1.13.A.3 Les constructeurs sont dit surchargés lorsqu'il existe plusieurs constructeurs avec des signatures différentes.

    Objectif d'apprentissage 1.13.B : Développer du code pour déclarer des variables des types corrects afin de contenir des références d'objets.

    • 1.13.B.1 Une variable de type référence contient une référence d'objet ou, s'il n'y a pas d'objet, null.

    Objectif d'apprentissage 1.13.C : Développer du code pour créer un objet en appelant un constructeur.

    • 1.13.C.1 Un objet est généralement créé à l'aide du mot-clé new suivi d'un appel à l'un des constructeurs de la classe.
    • 1.13.C.2 Les paramètres permettent aux constructeurs d'accepter des valeurs pour définir les valeurs initiales des attributs de l'objet.
    • 1.13.C.3 Un argument de constructeur est une valeur qui est passée à un constructeur lors de son appel. Les arguments passés à un constructeur doivent être compatibles par ordre et nombre avec les types identifiés dans la liste des paramètres de la signature du constructeur. Lors de l'appel aux constructeurs, les arguments sont passés par valeur. Le passage par valeur initialise les paramètres avec des copies des arguments.
    • 1.13.C.4 Un appel de constructeur interrompt l'exécution séquentielle des instructions, amenant le programme à exécuter d'abord les instructions du constructeur avant de continuer. Une fois la dernière instruction du constructeur exécutée, le flux de contrôle retourne au point immédiatement après l'endroit où le constructeur a été appelé.

    Source : Description du cours et de l'examen AP College Board

    L'instanciation 实例化 crée un objet avec le mot-clé new, qui appelle un constructeur 构造函数 :

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

    La variable contient une référence 引用 (l'adresse de l'objet), pas l'objet lui-même. Deux références peuvent pointer vers le même objet ; les comparer avec == compare les adresses, pas le contenu.

    Une référence peut aussi ne pointer vers rien : la valeur spéciale null 空值 signifie "non attaché à aucun objet". Appeler une méthode sur une référence null provoque une erreur à l'exécution avec un NullPointerException. Protégez-vous contre cela en testant avec ==/!= et en vérifiant null en premier, afin que && court-circuite avant l'exécution de la méthode : if (s != null && s.length() > 0).

    Une variable primitive stocke sa valeur directement, une référence contient une flèche vers l'objet
    Une variable primitive stocke sa valeur directement, une référence contient une flèche vers l'objet
    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    null/nʌl/ 空值 kōng zhí
    instance method/ˈɪnstəns ˈmeθəd/ 实例方法 shí lì fāng fǎ
    immutable/ɪˈmjuːtəbl/ 不可变 bù kě biàn
    1.14

    Appeler des méthodes d'instance

    Programme

    Objectif d'apprentissage 1.14.A : Développer du code pour appeler des méthodes d'instance et déterminer le résultat de ces appels.

    • 1.14.A.1 Les méthodes d'instance sont appelées sur des objets de la classe. L'opérateur point est utilisé avec le nom de l'objet pour appeler des méthodes d'instance.
    • 1.14.A.2 Un appel de méthode sur une référence null entraînera une NullPointerException.

    Source : Description du cours et de l'examen AP College Board

    Une méthode d'instance 实例 méthode agit sur un objet spécifique, donc on l'appelle sur la référence à l'objet : object.method(args). Exemple : in.nextInt(), word.length().

    1.15

    Manipulation de chaînes

    Programme

    Objectif d'apprentissage 1.15.A : Développer du code pour créer des objets de chaîne de caractères et déterminer le résultat de la création et de la combinaison de chaînes.

    • 1.15.A.1 Un objet String représente une séquence de caractères et peut être créé en utilisant une littérale de chaîne ou en appelant le constructeur de la classe String.
    • 1.15.A.2 La classe String fait partie du package java.lang. Les classes du package java.lang sont disponibles par défaut.
    • 1.15.A.3 Un objet String est immuable, ce qui signifie qu'une fois qu'un objet String est créé, ses attributs ne peuvent pas être modifiés. Les méthodes appelées sur un objet String ne changent pas le contenu de l'objet String.
    • 1.15.A.4 Deux objets String peuvent être concaténés ensemble ou combinés à l'aide de l'opérateur + ou +=, résultant en un nouvel objet String. Une valeur primitive peut être concaténée avec un objet String. Cela provoque la conversion implicite de la valeur primitive en un objet String.
    • 1.15.A.5 Un objet String peut être concaténé avec n'importe quel objet, ce qui appelle implicitement la méthode toString de l'objet (un comportement garanti par la relation d'héritage que toute classe entretient avec la classe Object). La méthode toString d'un objet retourne une valeur de chaîne représentant l'objet. Les sous-classes de Object remplacent souvent la méthode toString par une implémentation spécifique à la classe. Le remplacement de méthode se produit lorsqu'une méthode publique dans une sous-classe a la même signature de méthode qu'une méthode publique dans la classe parente, mais que le comportement de la méthode est spécifique à la sous-classe.
      • Énoncé d'exclusion : Remplacer la méthode toString d'une classe est hors du programme du cours et de l'examen AP Computer Science A.

    Objectif d'apprentissage 1.15.B : Développer du code pour appeler des méthodes sur des objets de chaîne de caractères et déterminer le résultat de l'appel de ces méthodes.

    • 1.15.B.1 Un objet String a des valeurs d'index allant de 0 à un moins que la longueur de la chaîne. Tenter d'accéder à des indices en dehors de cette plage entraînera une StringIndexOutOfBoundsException.
    • 1.15.B.2 Les méthodes String suivantes — incluant ce qu'elles font et quand elles sont utilisées — font partie de la Référence Rapide Java :
      • int length() retourne le nombre de caractères dans un objet String.
      • String substring(int from, int to) renvoie la sous-chaîne commençant à l'index from et se terminant à l'index to - 1.
      • String substring(int from) retourne substring(from, length()).
      • int indexOf(String str) retourne l'index de la première occurrence de str ; retourne -1 si non trouvé.
      • boolean equals(Object other) retourne true si this correspond à la même séquence de caractères que other ; retourne false sinon.
      • int compareTo(String other) retourne une valeur < 0 if this is less than other; returns zero if this is equal to other; returns a value > 0 si this est supérieur à other. Les chaînes sont ordonnées selon l'alphabet.
      • Énoncé d'exclusion : L'utilisation de la méthode equals pour comparer un objet String avec un objet d'un autre type que String est hors du programme du cours et de l'examen AP Computer Science A.
    • 1.15.B.3 Une chaîne identique au seul élément de la sous-chaîne à la position index peut être créée en appelant substring(index, index + 1).

    Source : Description du cours et de l'examen AP College Board

    Les chaînes sont immuables

    Les objets String sont immuables 不可变 – les méthodes retournent une nouvelle chaîne plutôt que de modifier l'originale. Méthodes clés (tous les indices commencent à 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
    

    Compétence d'examen : substring(a, b) inclut l'indice a mais exclut b, et la comparaison de chaînes doit utiliser .equals, pas == – deux des pièges les plus testés concernant les String.

    Exemple résolu. Soit String s = "COMPUTER"; (indices 0–7). Alors s.length() vaut 8 ; s.substring(0, 4) vaut "COMP" (indices 0,1,2,3 – l'indice 4 exclu) ; s.substring(4) vaut "UTER" (de l'indice 4 jusqu'à la fin) ; s.indexOf("PU") vaut 3 ; et s.indexOf("X") vaut -1 (non trouvé). Compter l'extrémité exclue de substring est l'erreur la plus fréquente.

    Demander un indice en dehors de 0 à length()-1 (un mauvais argument substring ou charAt, par ex. s.substring(0, 20) ici) provoque une erreur avec un StringIndexOutOfBoundsException – le cousin de l'erreur d'index de tableau pour les chaînes.

    Les indices de chaîne commencent à 0
    Les indices de chaîne commencent à 0
    Explorer

    Explorer les indices de chaîne et le découpage

    Chaque caractère a un index, et la numérotation commence à 0. Faites glisser le début et la fin pour voir comment substring(from, to) prend les caractères de from jusqu'à — mais sans inclure — to.

    1.15

    Conseils d'examen

    • Tracez le code main à la main ligne par ligne, en suivant la valeur de chaque variable dans un tableau – l'examen récompense une trace soignée plutôt que les devinettes.
    • Connaissez les types primitifs de Java et le fait que la division entière tronque ($7/2$ donne $3$) ; utilisez un cast ou un double pour une division réelle.
    • Distinguez les erreurs de compilation (syntaxe, types) des erreurs d'exécution – connaissez leurs noms : ArithmeticException (int ÷ 0), NullPointerException (méthode sur une référence null), StringIndexOutOfBoundsException / ArrayIndexOutOfBoundsException – ainsi que les erreurs de logique (mauvais résultat).
    • Respectez la priorité des opérateurs et initialisez chaque variable avant de l'utiliser.
    • Pour la question ouverte, écrivez du Java complet et compilable – retournez le bon type et correspondez exactement à l'en-tête de la méthode.
  • 2

    Sélection et itération

    Regarder la leçon
    2.1

    Sélection et répétition dans les algorithmes

    Programme

    Objectif d'apprentissage 2.1.A : Représenter des modèles et algorithmes impliquant sélection et répétition trouvés dans la vie quotidienne en langage écrit ou diagrammes.

    • 2.1.A.1 Les briques de base des algorithmes comprennent la séquence, la sélection et la répétition.
    • 2.1.A.2 Les algorithmes peuvent contenir une sélection, par prise de décision, et une répétition, via des boucles.
    • 2.1.A.3 La sélection se produit lorsque le choix de la façon dont l'exécution d'un algorithme va procéder est basé sur une décision vraie ou fausse.
    • 2.1.A.4 La répétition est quand un processus se répète jusqu'à ce qu'un résultat souhaité soit atteint.
    • 2.1.A.5 L'ordre dans lequel la séquence, la sélection et la répétition sont utilisées contribue au résultat de l'algorithme.

    Source : Description du cours et de l'examen AP College Board

    Un organigramme avec losange de décision : la sélection choisit quel chemin l'algorithme suit
    Un organigramme avec losange de décision : la sélection choisit quel chemin l'algorithme suit

    Les algorithmes sont constitués de trois structures de contrôle 控制结构 : séquence (étapes dans l'ordre), sélection 选择 (choisir un chemin), et itération 迭代 (répéter des étapes). Ce sujet couvre la sélection et l'itération – les outils qui permettent à un programme de prendre des décisions et de boucler.

    Les trois structures de contrôle : séquence, sélection et itération
    Les trois structures de contrôle : séquence, sélection et itération
    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    control structures/kənˈtrəʊl ˈstrʌktʃəz/ 控制结构 kòng zhì jié gòu
    selection/sɪˈlekʃn/ 选择 xuǎn zé
    iteration/ˌɪtəˈreɪʃn/ 迭代 dié dài
    boolean expression/ˈbuːlɪən ekˈspreʃn/ 布尔表达式 bù ěr biǎo dá shì
    relational operators/rɪˈleɪʃənl ˈɒpəreɪtəz/ 关系运算符 guān xì yùn suàn fú
    if statement/ɪf ˈsteɪtmənt/ 条件语句 tiáo jiàn yǔ jù
    Logical operators/ˈlɒdʒɪkl ˈɒpəreɪtəz/ 逻辑运算符 luó jí yùn suàn fú
    short-circuit evaluation/ʃɔːt ˈsɜːkɪt ɪˌvæljuːˈeɪʃn/ 短路求值 duǎn lù qiú zhí
    De Morgan's laws/də ˈmɔːɡənz lɔːz/ 德摩根定律 dé mó gēn dìng lǜ
    while loop/waɪl luːp/ 循环 xún huán
    infinite loop/ˈɪnfɪnət luːp/ 无限循环 wú xiàn xún huán
    2.2

    Expressions booléennes

    Programme

    Objectif d'apprentissage 2.2.A : Développer du code pour créer des expressions booléennes avec des opérateurs relationnels et déterminer le résultat de ces expressions.

    • 2.2.A.1 Les valeurs peuvent être comparées en utilisant les opérateurs relationnels == et != pour déterminer si les valeurs sont identiques. Avec les types primitifs, cela compare les valeurs primitives réelles. Avec les types de référence, cela compare les références d'objet.
    • 2.2.A.2 Les valeurs numériques peuvent être comparées à l'aide des opérateurs relationnels <, >, <= et >= pour déterminer la relation entre les valeurs.
    • 2.2.A.3 Une expression impliquant des opérateurs relationnels évalue une valeur booléenne.

    Source : Description du cours et de l'examen AP College Board

    Portes logiques et demi-additionneur

    Une expression booléenne 布尔表达式 évalue à true ou false, en utilisant des opérateurs relationnels 关系运算符 : == (égal), != (différent), <, >, <=, >=. Notez que == compare les valeurs primitives mais les références d'objets pour les objets, donc utilisez .equals pour les Strings.

    Les trois familles d'opérateurs : arithmétiques, relationnels et logiques
    Les trois familles d'opérateurs : arithmétiques, relationnels et logiques
    Explorer

    Explorer la table de vérité AND

    Une expression booléenne évalue à true ou false. AND est vrai uniquement lorsque les deux opérandes sont vrais ; basculez les entrées pour voir les quatre cas.

    2.3

    La instruction if

    Programme

    Objectif d'apprentissage 2.3.A : Développer du code pour représenter des processus logiques de branchement en utilisant des instructions de sélection et déterminer le résultat de ces processus.

    • 2.3.A.1 Les instructions de sélection modifient l'exécution séquentielle des instructions.
    • 2.3.A.2 Une instruction if est un type d'instruction de sélection qui affecte le flux de contrôle en exécutant différents segments de code en fonction de la valeur d'une expression booléenne.
    • 2.3.A.3 Une sélection à un seul chemin (instruction if) est utilisée lorsqu'il y a un segment de code à exécuter sous une certaine condition. Dans ce cas, le corps n'est exécuté que lorsque l'expression booléenne est true.
    • 2.3.A.4 Une sélection à deux chemins (instruction if-else) est utilisée lorsqu'il y a deux segments de code — l'un à exécuter lorsque l'expression booléenne est true et un autre segment pour le cas où l'expression booléenne est false. Dans ce cas, le corps de la⟩if⟩ est exécuté lorsque l'expression booléenne est true, et le corps de la⟩else⟩ est exécuté lorsque l'expression booléenne est false.

    Source : Description du cours et de l'examen AP College Board

    Une instruction if 条件语句 exécute un bloc seulement lorsque sa condition est vraie ; un else optionnel donne une alternative :

    if (score >= 60) {
        System.out.println("Pass");
    } else {
        System.out.println("Fail");
    }
    
    Feux tricolores : la sélection choisit quelle branche s'exécute, tout comme les instructions if choisissent les chemins de code
    Feux tricolores : la sélection choisit quelle branche s'exécute, tout comme les instructions if choisissent les chemins de code
    Explorer

    Voir quelle branche un if choisit

    Une instruction si exécute son corps uniquement lorsque la condition est vraie, sinon elle saute vers else. Faites glisser le score à travers les limites et observez la note changer.

    2.4

    Instructions if imbriquées

    Programme

    Objectif d'apprentissage 2.4.A : Développer du code pour représenter des processus logiques de branchement imbriqués et déterminer le résultat de ces processus.

    • 2.4.A.1 Les instructions if imbriquées consistent en des instructions if, if-else ou if-else-if situées dans des instructions if, if-else ou if-else-if.
    • 2.4.A.2 L'expression booléenne de l'instruction if imbriquée intérieure n'est évaluée que si l'expression booléenne de l'instruction if extérieure évalue à true.
    • 2.4.A.3 Une sélection multi-chemin (if-else-if) est utilisée lorsqu'il existe une série d'expressions avec des segments de code différents pour chaque condition. La sélection multi-chemin se fait de sorte qu'aucun plus d'un segment de code n'est exécuté basé sur la première expression qui évalue à true. Si aucune expression n'évalue à true et qu'il y a une instruction else finale, alors le corps de la⟩else⟩ est exécuté.

    Source : Description du cours et de l'examen AP College Board

    Placer un if à l'intérieur d'un autre, ou enchaîner avec else if, teste plusieurs cas dans l'ordre. Seule la première branche correspondante s'exécute :

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

    Expressions booléennes composées

    Programme

    Objectif d'apprentissage 2.5.A : Développer du code pour représenter des expressions booléennes composées et déterminer le résultat de ces expressions.

    • 2.5.A.1 Les opérateurs logiques ! (non), && (et), et || (ou) sont utilisés avec des expressions booléennes. L'expression !a évalue à true si a est false et évalue à false sinon. L'expression a && b évalue à true si les deux a et b sont true et évalue à false sinon. L'expression a || b évalue à true si a est true, b est true, ou les deux, et évalue à false sinon. L'ordre de priorité pour l'évaluation des opérateurs logiques est ! (non), && (et), puis || (ou). Une expression impliquant des opérateurs logiques évalue à une valeur booléenne.
    • 2.5.A.2 L'évaluation en court-circuit se produit lorsque le résultat d'une opération logique utilisant && ou || peut être déterminé en évaluant uniquement la première expression booléenne. Dans ce cas, la seconde expression booléenne n'est pas évaluée.

    Source : Description du cours et de l'examen AP College Board

    Évaluation court-circuit

    Les opérateurs logiques 逻辑运算符 combinent des conditions : && (et – les deux vrais), || (ou – au moins un vrai), ! (non – inverser). Java utilise l'évaluation court-circuit 短路求值 : && s'arrête si le côté gauche est faux, et || s'arrête si le côté gauche est vrai – utile pour protéger contre les erreurs, par ex. if (n != 0 && total / n > 5).

    2.6

    Comparaison d'expressions booléennes

    Programme

    Objectif d'apprentissage 2.6.A : Comparer des expressions booléennes équivalentes.

    • 2.6.A.1 Deux expressions booléennes sont équivalentes si elles évaluent à la même valeur dans tous les cas. Des tables de vérité peuvent être utilisées pour prouver que des expressions booléennes sont équivalentes.
    • 2.6.A.2 La loi de De Morgan peut être appliquée aux expressions booléennes pour créer des expressions booléennes équivalentes. Selon la loi de De Morgan, l'expression booléenne !(a && b) est équivalente à !a || !b et l'expression booléenne !(a || b) est équivalente à !a && !b.

    Objectif d'apprentissage 2.6.B : Développer du code pour comparer des références d'objets à l'aide d'expressions booléennes et déterminer le résultat de ces expressions.

    • 2.6.B.1 Deux variables différentes peuvent contenir des références vers le même objet. Les références d'objet peuvent être comparées à l'aide de == et !=.
    • 2.6.B.2 Une référence d'objet peut être comparée avec null, en utilisant == ou !=, pour déterminer si la référence pointe réellement vers un objet.
    • 2.6.B.3 Les classes définissent souvent leur propre méthode equals, qui peut être utilisée pour spécifier les critères d'équivalence pour deux objets de la classe. L'équivalence de deux objets est généralement déterminée à l'aide d'attributs provenant des deux objets.
      • Instruction d'exclusion : Redéfinir la méthode equals sort du champ d'application du cours et de l'examen AP Computer Science A.

    Source : Description du cours et de l'examen AP College Board

    Les lois de De Morgan 德摩根定律 réécrivent les négations : !(a && b) est égal à !a || !b, et !(a || b) est égal à !a && !b. Deux expressions booléennes sont équivalentes si elles donnent le même résultat pour chaque entrée – une table de vérité le prouve. Simplifier des conditions de cette manière est une tâche d'examen courante.

    2.7

    Boucles while

    Programme

    Objectif d'apprentissage 2.7.A : Identifier quand un processus itératif est nécessaire pour atteindre un résultat souhaité.

    • 2.7.A.1 L'itération est une forme de répétition. Les instructions d'itération modifient le flux de contrôle en répétant un segment de code zéro ou plusieurs fois tant que l'expression booléenne contrôlant la boucle évalue à true.
    • 2.7.A.2 Une boucle infinie se produit lorsque l'expression booléenne dans une instruction itérative évalue toujours à true.
    • 2.7.A.3 Le corps de la boucle d'une instruction itérative ne s'exécutera pas si l'expression booléenne évalue initialement à false.
    • 2.7.A.4 Les erreurs off by one surviennent lorsque l'instruction d'itération parcourt la boucle une fois de trop ou une fois de moins.

    Objectif d'apprentissage 2.7.B : Développer du code pour représenter des processus itératifs en utilisant des boucles while et déterminer le résultat de ces processus.

    • 2.7.B.1 Une boucle while est un type d'instruction itérative. Dans les boucles while, l'expression booléenne est évaluée avant chaque itération du corps de la boucle, y compris la première. Lorsque l'expression évalue à true, le corps de la boucle est exécuté. Cela continue jusqu'à ce que l'expression booléenne évalue à false, moment où l'itération se termine.

    Source : Description du cours et de l'examen AP College Board

    Une boucle while 循环 répète tant que sa condition reste vraie, en testant avant chaque passage. Vous devez changer quelque chose à l'intérieur pour que la boucle s'arrête eventually, sinon elle devient une boucle infinie 无限循环 :

    Les trois types de boucles diffèrent par l'endroit où la condition est testée
    Les trois types de boucles diffèrent par l'endroit où la condition est testée
    int i = 0;
    while (i < 5) {
        System.out.println(i);
        i++;
    }
    
    Explorer

    Tracer une boucle while

    Une boucle while répète tant que sa condition reste vraie, mettant à jour ses variables à chaque passage. Parcourez pour voir la somme des carrés se constituer.

    2.8

    Boucles for

    Programme

    Objectif d'apprentissage 2.8.A : Développer du code pour représenter des processus itératifs à l'aide de boucles for et déterminer le résultat de ces processus.

    • 2.8.A.1 Une boucle for est un type d'instruction itérative. Il y a trois parties dans l'en-tête d'une boucle for : l'initialisation, l'expression booléenne et la mise à jour.
    • 2.8.A.2 Dans une boucle for, l'instruction d'initialisation n'est exécutée qu'une seule fois avant la première évaluation de l'expression booléenne. La variable initialisée est appelée variable de contrôle de boucle. L'expression booléenne est évaluée immédiatement après l'initialisation de la variable de contrôle de boucle, puis après chaque exécution de l'instruction d'incrémentation jusqu'à ce qu'elle soit false. À chaque itération, la mise à jour est exécutée après l'exécution complète du corps de la boucle et avant que l'expression booléenne ne soit évaluée à nouveau.
    • 2.8.A.3 Une boucle for peut être réécrite sous la forme d'une boucle while équivalente (et vice versa).

    Source : Description du cours et de l'examen AP College Board

    Une boucle for regroupe l'initialisation, la condition et la mise à jour en une seule ligne – idéale quand vous connaissez le compteur :

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

    Un for et un while équivalent font le même travail ; soyez capable de convertir entre eux.

    Une chaîne de montage : les boucles répètent un processus pour chaque élément, comme for et while
    Une chaîne de montage : les boucles répètent un processus pour chaque élément, comme for et while
    Explorer

    Tracer une boucle for

    Une boucle for s'exécute un nombre fixe de fois, son compteur parcourant une plage. Observez le compteur et le total en cours avancer d'un passage à la fois.

    2.9

    Construire des algorithmes complets de sélection et d'itération

    Programme

    Objectif d'apprentissage 2.9.A : Développer du code pour des algorithmes standards et originaux (sans structures de données) et déterminer le résultat de ces algorithmes.

    • 2.9.A.1 Il existe des algorithmes standards pour :
      • identifier si un entier est ou non divisible par un autre entier
      • identifier les chiffres individuels d'un entier
      • déterminer la fréquence à laquelle un critère spécifique est rempli
      • déterminer une valeur minimale ou maximale
      • calculer une somme ou une moyenne

    Source : Description du cours et de l'examen AP College Board

    Combinez des boucles et des conditions pour résoudre des problèmes réels – compter, sommer, trouver un maximum, ou tester une propriété :

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

    Deux motifs entiers que l'examen teste directement utilisent % et /. Pour lire les chiffres d'un entier un par un, prenez répétément n % 10 (le dernier chiffre) puis n = n / 10 (supprimez-le). Pour tester la divisibilité, n % d == 0 signifie que n est divisible uniformément par d. Combinez-les avec un compteur pour trouver la fréquence à laquelle certains critères sont satisfaits.

    Des motifs standards comme un total cumulé, un compteur ou un flag 标志 (un booléen qui enregistre si quelque chose s'est produit) reviennent tout au long du cours.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    flag/flæɡ/ 标志 biāo zhì
    nested loop/ˈnestɪd luːp/ 嵌套循环 qiàn tào xún huán
    Run-time analysis/rʌn taɪm əˈnæləsɪs/ 运行时间分析 yùn xíng shí jiān fēn xī
    2.10

    Algorithmes sur les chaînes

    Programme

    Objectif d'apprentissage 2.10.A : Développer du code pour des algorithmes standards et originaux impliquant des chaînes et déterminer le résultat de ces algorithmes.

    • 2.10.A.1 Il existe des algorithmes de chaînes standards pour :
      • trouver si une ou plusieurs sous-chaînes ont une propriété particulière
      • déterminer le nombre de sous-chaînes répondant à des critères spécifiques
      • créer une nouvelle chaîne avec les caractères inversés

    Source : Description du cours et de l'examen AP College Board

    Parcourez une chaîne par indice pour traiter chaque caractère :

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

    Tâches typiques : compter les occurrences, construire une copie inversée ou filtrée, ou tester si une chaîne en contient une autre.

    2.11

    Itération imbriquée

    Programme

    Objectif d'apprentissage 2.11.A : Développer du code pour représenter des processus itératifs imbriqués et déterminer le résultat de ces processus.

    • 2.11.A.1 Les instructions d'itération imbriquées sont des instructions d'itération apparaissant dans le corps d'une autre instruction d'itération. Lorsqu'une boucle est imbriquée dans une autre boucle, la boucle interne doit terminer toutes ses itérations avant que la boucle externe puisse continuer à son prochaine itération.

    Source : Description du cours et de l'examen AP College Board

    Une boucle imbriquée 嵌套循环 place une boucle à l'intérieur d'une autre ; la boucle intérieure se termine complètement pour chaque passage de la boucle extérieure. Si la boucle extérieure tourne $n$ fois et l'intérieure $m$ fois, le corps s'exécute $n\times m$ fois – base pour traiter des grilles et comparer toutes les paires.

    2.12

    Analyse informelle du temps d'exécution

    Programme

    Objectif d'apprentissage 2.12.A : Calculer les comptes d'exécution d'instructions et comparer informellement le temps d'exécution des statements itératifs.

    • 2.12.A.1 Un compte d'exécution d'instruction indique le nombre de fois qu'une instruction est exécutée par le programme. Les comptes d'exécution d'instructions sont souvent calculés informellement par traçage et analyse des instructions itératives.

    Source : Description du cours et de l'examen AP College Board

    Taux de croissance Big-O

    L'analyse du temps d'exécution 运行时间分析 compte combien d'étapes de base un algorithme effectue alors que la taille de l'entrée $n$ croît. Comptez les exécutions de l'instruction la plus interne : une boucle unique sur $n$ éléments est linéaire ($n$ étapes) ; deux boucles imbriquées sur $n$ sont quadratiques ($n^2$). Ce comptage informel permet de comparer l'efficacité de deux algorithmes.

    Comment le temps d'exécution augmente avec le nombre d'éléments n
    Comment le temps d'exécution augmente avec le nombre d'éléments n

    Compétence pour l'examen : pour une boucle imbriquée, savoir énoncer combien de fois la statement intérieure s'exécute en fonction des bornes des boucles – une question à choix multiples fréquente.

    Exemple résolu. Combien d'étoiles cela imprime-t-il ?

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

    La boucle intérieure s'exécute i fois pour chaque i extérieure : 0 + 1 + 2 + 3 = 6 étoiles. Quand la borne intérieure est la variable extérieure, le total est la somme triangulaire $0+1+\dots+(n-1)=\dfrac{n(n-1)}{2}$ – ici $\dfrac{4\times3}{2}=6$ – et non la totale $n^2=16$ d'une boucle imbriquée rectangulaire.

    Explorer

    Comparer comment les algorithmes évoluent

    Le temps d'exécution décrit comment le nombre d'étapes croît avec la taille de l'entrée $n$. Augmentez $n$ et observez une complexité linéaire $O(n)$ devancer largement une complexité quadratique $O(n^2)$.

    2.12

    Conseils d'examen

    • Bien définir les conditions aux limites : utiliser < vs <= délibérément, et surveiller la première et la dernière itération de chaque boucle (l'erreur off-by-one est classique).
    • Construire des conditions composées avec &&, ||, ! et se souvenir de l'évaluation court-circuit (mettre la vérification de null en premier).
    • Tracer les boucles imbriquées en comptant combien de fois le corps intérieur s'exécute au total.
    • Choisir la bonne structure – if/else if pour les plages, une boucle pour la répétition – et éviter une boucle infinie en actualisant la variable de boucle.
    • Appliquer les lois de De Morgan lorsque vous simplifiez ou néguez une condition booléenne.
  • 3

    Création de classes

    Regarder la leçon
    3.1

    Abstraction et Conception de Programme

    Programme

    Objectif d'apprentissage 3.1.A : Représenter la conception d'un programme en utilisant un langage naturel ou en créant des diagrammes indiquant les classes du programme et les abstractions de données et procédurales trouvées dans chaque classe en incluant tous les attributs et comportements.

    • 3.1.A.1 L'abstraction est le processus de réduction de la complexité en se concentrant sur l'idée principale. En masquant les détails irrelevants pour la question en cours et en regroupant des détails connexes et utiles, l'abstraction réduit la complexité et permet de se concentrer sur l'idée.
    • 3.1.A.2 L'abstraction de données fournit une séparation entre les propriétés abstraites d'un type de données et les détails concrets de sa représentation. L'abstraction de données gère la complexité en donnant un nom aux données sans faire référence aux détails spécifiques de la représentation. Les données peuvent prendre la forme d'une variable unique ou d'une collection de données, comme dans une classe ou un ensemble de données.
    • 3.1.A.3 Un attribut est un type d'abstraction de données défini dans une classe hors de toute méthode ou constructeur. Une variable d'instance est un attribut dont la valeur est unique pour chaque instance de la classe. Une variable de classe est un attribut partagé par toutes les instances de la classe.
    • 3.1.A.4 L'abstraction procédurale fournit un nom à un processus et permet à une méthode d'être utilisée en ne sachant que ce qu'elle fait, pas comment elle le fait. Grâce à la décomposition de méthodes, un programmeur décompose les grands comportements de la classe en petits comportements en créant des méthodes pour représenter chaque petit comportement individuel. Une abstraction procédurale peut extraire des caractéristiques partagées pour généraliser la fonctionnalité au lieu de dupliquer du code. Cela permet la réutilisation du code, ce qui aide à gérer la complexité.
    • 3.1.A.5 L'utilisation de paramètres permet de généraliser les procédures, rendant les procédures réutilisables avec une gamme de valeurs d'entrée ou d'arguments.
    • 3.1.A.6 L'utilisation de l'abstraction procédurale dans un programme permet aux programmateurs de modifier l'interne d'une méthode (pour la rendre plus rapide, plus efficace, utiliser moins de stockage, etc.) sans avoir besoin d'avertir les utilisateurs de la méthode du changement, tant que la signature de la méthode et ce que fait la méthode sont préservés.
    • 3.1.A.7 Avant d'implémenter une classe, il est utile de prendre le temps de concevoir chaque classe, y compris ses attributs et comportements. Cette conception peut être représentée à l'aide d'un langage naturel ou de diagrammes.

    Source : Description du cours et de l'examen AP College Board

    Un puzzle en cours : les classes et méthodes sont des pièces modulaires d'une conception de programme plus large
    Un puzzle en cours : les classes et méthodes sont des pièces modulaires d'une conception de programme plus large

    Abstraction 抽象 signifie dissimuler des détails derrière une interface simple – vous utilisez un String sans savoir comment il stocke les caractères. Une bonne conception divise un problème en classes, chacune responsable d'une idée. Ce sujet porte sur l'écriture de vos propres classes.

    Décomposer un programme en modules et sous-modules
    Décomposer un programme en modules et sous-modules
    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    Abstraction/əbˈstrækʃn/ 抽象 chōu xiàng
    3.2

    L'Impact de la Conception de Programme

    Programme

    Objectif d'apprentissage 3.2.A : Expliquer les implications sociales et éthiques des systèmes informatiques.

    • 3.2.A.1 La fiabilité du système désigne la capacité du programme à effectuer ses tâches comme prévu dans des conditions spécifiées sans défaillance. Les programmateurs doivent s'efforcer de maximiser la fiabilité du système en testant le programme avec une variété de conditions.
    • 3.2.A.2 La création de programmes a des impacts sur la société, l'économie et la culture. Ces impacts peuvent être à la fois bénéfiques et préjudiciables. Les programmes conçus pour répondre à un besoin ou résoudre un problème peuvent avoir des effets néfastes involontaires au-delà de leur usage prévu.
    • 3.2.A.3 Des questions juridiques et des préoccupations relatives à la propriété intellectuelle surgissent lors de la création de programmes. Les programmeurs réutilisent souvent du code écrit par d'autres et publié en open source et gratuit. L'intégration de code qui n'est pas publié en open source exige que le programmeur obtienne une autorisation et achète souvent le code avant de l'intégrer à son programme.

    Source : Description du cours et de l'examen AP College Board

    Les choix de conception affectent si le code est correct, lisible et réutilisable. Encapsulation 封装 – garder les données privées et les exposer uniquement via des méthodes – protège l'état d'un objet contre les mauvais usages et permet de changer l'intérieur sans casser les utilisateurs de la classe. Un nommage soigné, des méthodes à usage unique et les tests réduisent les bugs.

    La conception comporte aussi une responsabilité au-delà du code. Fiabilité du système 系统可靠性 - un programme effectuant ses tâches comme prévu, sans défaillance - est quelque chose que les programmeurs devraient maximiser par une conception et des tests minutieux. Les programmes ont des impacts réels sur la société, l'économie et la culture qui peuvent être à la fois bénéfiques et nocifs. Et la création de programmes soulève des questions légales et de propriété intellectuelle 知识产权 : les programmeurs réutilisent souvent du code publié comme code open source 开源 et gratuit à utiliser, mais doivent respecter sa licence et donner crédit plutôt que copier le travail d'autrui comme le leur.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    Encapsulation/ɪnˌkæpsjʊˈleɪʃn/ 封装 fēng zhuāng
    System reliability/ˈsɪstəm rɪˌlaɪəˈbɪlɪti/ 系统可靠性 xì tǒng kě kào xìng
    legal and intellectual-property/ˈliːɡl ænd ˌɪntəˈlektʃuːəl ˈprɒpəti/ 知识产权 zhī shí chǎn quán
    open source/ˈəʊpən sɔːs/ 开源 kāi yuán
    instance variables/ˈɪnstəns ˈveərɪəblz/ 实例变量 shí lì biàn liàng
    3.3

    L'Anatomie d'une Classe

    Programme

    Objectif d'apprentissage 3.3.A : Écrire du code pour définir les contraintes d'accès et de visibilité des classes, des données, des constructeurs et des méthodes.

    • 3.3.A.1 L'encapsulation des données est une technique selon laquelle les détails d'implémentation d'une classe sont cachés aux classes externes. Les mots-clés public et private affectent l'accès des classes, des données, des constructeurs et des méthodes. Le mot-clé private restreint l'accès à la classe déclarante, tandis que le mot-clé public permet l'accès depuis des classes extérieures à la classe déclarante.
    • 3.3.A.2 Dans ce cours, les classes sont toujours désignées public et déclarées avec le mot-clé class.
    • 3.3.A.3 Dans ce cours, les constructeurs sont toujours désignés public.
    • 3.3.A.4 Les variables d'instance appartiennent à l'objet, et chaque objet possède sa propre copie de la variable.
    • 3.3.A.5 L'accès aux attributs doit être maintenu interne à la classe afin de réaliser l'encapsulation. Il s'agit donc d'une bonne pratique de programmation de désigner les variables d'instance pour ces attributs comme private sauf si la spécification de la classe stipule le contraire.
    • 3.3.A.6 L'accès aux comportements peut être interne ou externe à la classe. Les méthodes désignées comme public peuvent être accédées internement ou externement à une classe, tandis que les méthodes désignées comme private ne peuvent être accédées qu'internement à la classe.

    Source : Description du cours et de l'examen AP College Board

    Une classe a trois parties : variables d'instance 实例变量 (champs – les données de l'objet), constructeurs (construisent des objets) et méthodes (comportement). Les champs sont généralement private ; les méthodes sont généralement public :

    Diagramme de classe : attributs privés et méthodes publiques
    Diagramme de classe : attributs privés et méthodes publiques
    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
    }
    
    Un plan : une classe est un modèle qui définit comment les objets de ce type sont construits
    Un plan : une classe est un modèle qui définit comment les objets de ce type sont construits
    Explorer

    Voir les champs d'un objet comme des boîtes

    Une classe regroupe des données liées (ses champs) et des méthodes. Chaque objet obtient son propre ensemble de boîtes de champs ; assigner à l'un ne change que cet objet.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    constructor/kənˈstrʌktə/ 构造函数 gòu zào hán shù
    overloading/ˌəʊvəˈləʊdɪŋ/ 重载 zhòng zài
    3.4

    Constructeurs

    Programme

    Objectif d'apprentissage 3.4.A : Écrire du code pour déclarer des variables d'instance pour les attributs à initialiser dans le corps des constructeurs d'une classe.

    • 3.4.A.1 L'état d'un objet fait référence à ses attributs et à leurs valeurs à un moment donné et est défini par les variables d'instance appartenant à l'objet. Cela définit une relation « posséder » (has-a) entre l'objet et ses variables d'instance.
    • 3.4.A.2 Un constructeur sert à définir l'état initial d'un objet, ce qui devrait inclure des valeurs initiales pour toutes les variables d'instance. Lorsqu'un constructeur est appelé, de la mémoire est allouée pour l'objet et la référence d'objet associée est retournée. Les paramètres du constructeur, s'ils sont spécifiés, fournissent des données pour initialiser les variables d'instance.
    • 3.4.A.3 Lorsqu'un objet mutable est un paramètre de constructeur, la variable d'instance doit être initialisée avec une copie de l'objet référencé. De cette manière, la variable d'instance ne conserve pas une référence à l'objet original, et les méthodes sont empêchées de modifier l'état de l'objet original.
    • 3.4.A.4 Lorsqu'aucun constructeur n'est écrit, Java fournit un constructeur sans paramètre, et les variables d'instance sont définies sur des valeurs par défaut selon le type de donnée de l'attribut. Ce constructeur est appelé le constructeur par défaut.
    • 3.4.A.5 La valeur par défaut pour un attribut de type int est 0. La valeur par défaut d'un attribut de type double est 0.0. La valeur par défaut d'un attribut de type boolean est false. La valeur par défaut d'un type de référence est null.

    Source : Description du cours et de l'examen AP College Board

    Un constructeur 构造函数 a le même nom que la classe et aucun type de retour. Il s'exécute lorsque vous écrivez new, et sa tâche est d'initialiser les champs. Une classe peut avoir plusieurs constructeurs avec des listes de paramètres différentes (surcharge 重载) ; un constructeur sans argument définit des valeurs par défaut.

    3.5

    Méthodes : Comment les Écrire

    Programme

    Objectif d'apprentissage 3.5.A : Écrire du code pour définir les comportements d'un objet via des méthodes écrites dans une classe en utilisant des valeurs primitives et déterminer le résultat de l'appel de ces méthodes.

    • 3.5.A.1 Une méthode void ne retourne pas de valeur. Son en-tête contient le mot-clé void avant le nom de la méthode.
    • 3.5.A.2 Une méthode non-void (non vide) retourne une seule valeur. Son en-tête inclut le type de retour à la place du mot-clé void.
    • 3.5.A.3 Dans les méthodes non-void, une expression de retour compatible avec le type de retour est évaluée, et la valeur est retournée. C'est ce qu'on appelle le retour par valeur.
    • 3.5.A.4 Le mot-clé return est utilisé pour retourner le flux de contrôle au point où la méthode ou le constructeur a été appelé. Tout code situé séquentiellement après une instruction return ne sera jamais exécuté. L'exécution d'une instruction return à l'intérieur d'une instruction de sélection ou d'itération arrêtera cette instruction et sortira de la méthode ou du constructeur.
    • 3.5.A.5 Une méthode d'accès (accessor) permet aux objets d'autres classes d'obtenir une copie de la valeur des variables d'instance ou de classe. Une méthode d'accès est une méthode non-void.
    • 3.5.A.6 Une méthode mutatrice (modificatrice) est une méthode qui modifie les valeurs des variables d'instance ou de classe. Une méthode mutatrice est souvent une méthode void.
    • 3.5.A.7 Les méthodes avec des paramètres reçoivent des valeurs par l'intermédiaire de ces paramètres et utilisent ces valeurs pour accomplir la tâche de la méthode.
    • 3.5.A.8 Lorsqu'un argument est une valeur primitive, le paramètre est initialisé avec une copie de cette valeur. Les modifications apportées au paramètre n'ont aucun effet sur l'argument correspondant.

    Source : Description du cours et de l'examen AP College Board

    Une méthode a une signature, un type de retour et un corps. Un accessor (getter) 访问器 retourne de l'information sans modifier l'objet ; un mutator (setter) 修改器 modifie un champ. Une méthode retournant une valeur doit avoir un return du bon type sur chaque chemin ; une void méthode ne retourne rien.

    public void setScore(int s) { score = s; }   // mutator
    public String toString() { return name + ": " + score; }
    
    Explorer

    Suivre un appel de méthode et son retour

    Appeler une méthode pousse un cadre avec ses paramètres ; lorsqu'elle atteint return, le cadre est retiré et la valeur retourne à l'appelant.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    accessor (getter)/əkˈsesə/ 访问器 fǎng wèn qì
    mutator (setter)/mjuːˈteɪtə/ 修改器 xiū gǎi qì
    static (class) variable/ˈstætɪk ˈveərɪəbl/ 类变量 lèi biàn liàng
    3.6

    Passer et Retourner des Références d'un Objet

    Programme

    Objectif d'apprentissage 3.6.A : Écrire du code pour définir les comportements d'un objet via des méthodes écrites dans une classe en utilisant des références d'objets et déterminer le résultat de l'appel de ces méthodes.

    • 3.6.A.1 Lorsqu'un argument est une référence d'objet, le paramètre est initialisé avec une copie de cette référence ; cela ne crée pas une nouvelle copie indépendante de l'objet. Si le paramètre fait référence à un objet mutable, la méthode ou le constructeur peut utiliser cette référence pour modifier l'état de l'objet. Il s'agit d'une bonne pratique de programmation de ne pas modifier les objets mutables passés en paramètre sauf si requis dans la spécification.
    • 3.6.A.2 Lorsque l'expression de retour évalue une référence d'objet, la référence est retournée, et non une référence vers une nouvelle copie de l'objet.
    • 3.6.A.3 Les méthodes ne peuvent accéder aux données privées et aux méthodes d'un paramètre qui contient une référence vers un objet, sauf si le paramètre est du même type que la classe englobante de la méthode.

    Source : Description du cours et de l'examen AP College Board

    = copie la référence, pas l'objet

    Lorsque vous passez un objet à une méthode, Java copie la référence, donc la méthode agit sur le même objet – les modifications de ses champs sont visibles pour l'appelant. (Les primitives sont copiées par valeur, donc les modifications ne le sont pas.) Une méthode peut également retourner une référence vers un objet. Comme un String est immuable, le passer est sûr ; passer un objet mutable permet à la méthode de le modifier.

    Java passe par valeur : la méthode reçoit une copie ; le vrai passage par référence, dont Java est dépourvu, lui permettrait de réassigner la variable de l'appelant
    Java passe toujours par valeur (gauche) : la méthode reçoit une copie de la référence. Le vrai passage par référence (droite) – que Java ne possède pas – permettrait à la méthode de réassigner la propre variable de l'appelant.

    Compétence pour l'examen : savoir que muter les champs d'un objet à l'intérieur d'une méthode affecte l'original, mais réassigner le paramètre (param = new...) n'affecte pas l'appelant.

    Exemple résolu. Supposons que s soit un Student avec score 50, et que nous appelions 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
    }
    

    La ligne (1) modifie l'objet pointé par s, donc l'appelant voit maintenant 100. La ligne (2) fait en sorte que la propre copie de la référence de la méthode pointe vers un nouvel objet – le s de l'appelant reste intact – et la ligne (3) n'affecte que ce nouvel objet. Après l'appel, s.getScore() est 100 : la mutation a été appliquée, la réassignation non.

    3.7

    Variables et Méthodes de Classe

    Programme

    Objectif d'apprentissage 3.7.A : Écrire du code pour définir les comportements d'une classe via des méthodes de classe.

    • 3.7.A.1 Les méthodes de classe ne peuvent pas accéder ni modifier les valeurs des variables d'instance ni appeler des méthodes d'instance sans recevoir une instance de la classe via un paramètre.
    • 3.7.A.2 Les méthodes de classe peuvent accéder ou modifier les valeurs des variables de classe et peuvent appeler d'autres méthodes de classe.

    Objectif d'apprentissage 3.7.B : Écrire du code pour déclarer les variables de classe qui appartiennent à la classe.

    • 3.7.B.1 Les variables de classe appartiennent à la classe, tous les objets d'une classe partageant une seule copie de la variable de classe. Les variables de classe sont désignées avec le mot-clé static avant le type de variable.
    • 3.7.B.2 Les variables de classe désignées public sont accédées à l'extérieur de la classe en utilisant le nom de la classe et l'opérateur point, car elles sont associées à une classe, et non à des objets d'une classe.
    • 3.7.B.3 Lorsqu'une variable est déclarée final, sa valeur ne peut pas être modifiée.

    Source : Description du cours et de l'examen AP College Board

    champs statiques vs instance

    Une variable statique (de classe) 类变量, marquée static, est partagée par tous les objets de la classe – une seule copie au total (ex. un compteur du nombre d'objets existants). Une méthode statique appartient à la classe et ne peut pas utiliser directement les champs d'instance. Accédez-y par le nom de la classe : Student.getCount().

    3.8

    Portée et Accès

    Programme

    Objectif d'apprentissage 3.8.A : Expliquer où les variables peuvent être utilisées dans le code.

    • 3.8.A.1 Les variables locales sont des variables déclarées dans les en-têtes ou les corps de blocs de code. Les variables locales ne peuvent être accédées que dans le bloc dans lequel elles sont déclarées. Puisque les constructeurs et les méthodes sont des blocs de code, les paramètres des constructeurs ou des méthodes sont également considérés comme des variables locales. Ces variables ne peuvent être utilisées que dans le constructeur ou la méthode et ne peuvent pas être déclarées comme public ou private.
    • 3.8.A.2 Lorsqu'il existe une variable locale ou un paramètre ayant le même nom qu'une variable d'instance, le nom de la variable fera référence à la variable locale plutôt qu'à la variable d'instance à l'intérieur du corps du constructeur ou de la méthode.

    Source : Description du cours et de l'examen AP College Board

    Portée 作用域 est là où un nom est visible. Une variable locale déclarée dans une méthode n'existe qu'à l'intérieur ; un paramètre n'existe que dans sa méthode ; une variable d'instance est visible tout au long de l'objet. Les modificateurs d'accès contrôlent la visibilité entre les classes : private (seulement cette classe) contre public (n'importe où). Les variables locales masquent les champs du même nom – une source de bugs.

    Une variable globale est visible partout ; une variable locale seulement dans son bloc
    Une variable globale est visible partout ; une variable locale seulement dans son bloc
    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    Scope/skəʊp/ 作用域 zuò yòng yù
    3.9

    Le Mot-clé this

    Programme

    Objectif d'apprentissage 3.9.A : Écrire du code pour des expressions auto-référentielles et déterminer le résultat de ces expressions.

    • 3.9.A.1 À l'intérieur d'une méthode d'instance ou d'un constructeur, le mot-clé this agit comme une variable spéciale contenant une référence vers l'objet courant — l'objet dont la méthode ou le constructeur est appelé.
    • 3.9.A.2 Le mot-clé this peut être utilisé pour passer l'objet courant en tant qu'argument dans un appel de méthode.
    • 3.9.A.3 Les méthodes de classe n'ont pas de référence this.

    Source : Description du cours et de l'examen AP College Board

    this est une référence vers l'objet courant. Utilisez-le pour distinguer un champ d'un paramètre ayant le même nom, ou pour appeler une autre méthode du même objet :

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

    Compétence pour l'examen : quand un paramètre de constructeur ou de setter a le même nom qu'un champ, vous devez écrire this.field = param – sans this, l'affectation ne sert à rien.

    3.9

    Conseils d'examen

    • Concevez avec des méthodes et des classes : encapsulez les données en tant que champs private et exposez le comportement via des méthodes publiques.
    • Connaissez la différence entre un objet et sa classe, et que les objets sont passés par valeur – le paramètre reçoit une copie de la référence, donc une méthode peut modifier l'état de l'objet, mais réassigner le paramètre n'affecte pas l'appelant (Java n'a pas de passage par référence).
    • Parcourez les tableaux et les ArrayLists en toute sécurité – la taille est length vs .size(), et la suppression pendant une boucle décale les indices.
    • Tracez une méthode récursive pour déterminer son résultat : trouvez d'abord le cas de base, puis suivez chaque appel récursif jusqu'à sa valeur de retour (l'écriture de code récursif sort du cadre de l'examen).
    • Reconnaissiez le vocabulaire de l'héritage – superclasse, sous-classe, redéfinition de méthode, et que chaque classe est une sous-classe de Object (la conception et l'implémentation de l'héritage sortent du cadre de l'examen).
  • 4

    Collections de données

    Regarder la leçon
    4.1

    Éthique de la Collecte de Données

    Programme

    Objectif d'apprentissage 4.1.A : Expliquer les risques pour la vie privée liés à la collecte et au stockage de données personnelles sur des ordinateurs.

    • 4.1.A.1 Lors de l'utilisation d'un ordinateur, la vie privée personnelle est menacée. Lors du développement de nouveaux programmes, les programmeurs devraient essayer de protéger la vie privée personnelle de l'utilisateur.

    Objectif d'apprentissage 4.1.B : Expliquer l'importance de reconnaître la qualité des données et les problèmes potentiels lors de l'utilisation d'un ensemble de données.

    • 4.1.B.1 Le biais algorithmique décrit des erreurs systémiques et répétées dans un programme qui créent des résultats injustes pour un groupe spécifique d'utilisateurs.
    • 4.1.B.2 Les programmeurs doivent être conscients de la méthode de collecte de l'ensemble de données et du potentiel de biais lors de l'utilisation de cette méthode avant d'utiliser les données pour extrapoler de nouvelles informations ou tirer des conclusions.
    • 4.1.B.3 Certains ensembles de données sont incomplets ou contiennent des données inexactes. L'utilisation de telles données dans le développement ou l'utilisation d'un programme peut entraîner un fonctionnement incorrect ou inefficace du programme.

    Objectif d'apprentissage 4.1.C : Identifier un ensemble de données approprié à utiliser afin de résoudre un problème ou répondre à une question spécifique.

    • 4.1.C.1 Le contenu d'un ensemble de données peut être lié à une question ou un sujet spécifique et pourrait ne pas être approprié pour donner des réponses correctes ou extrapoler des informations pour une autre question ou un autre sujet.

    Source : Description du cours et de l'examen AP College Board

    Des baies de serveurs dans un centre de données – de grands collectes de données soulèvent des questions éthiques sur la collecte et l'utilisation
    Des baies de serveurs dans un centre de données – de grands collectes de données soulèvent des questions éthiques sur la collecte et l'utilisation

    Les programmes qui recueillent des données soulèvent des questions de vie privée 隐私 et de consentement 同意. Ne collectez que ce qui est nécessaire, protégez-le, et soyez honnête sur son utilisation. Les données peuvent comporter un biais 偏见 si elles ne représentent pas tout le monde équitablement, menant à des résultats injustes – une responsabilité qui accompagne le stockage d'informations.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    privacy/ˈprɪvəsi/ 隐私 yǐn sī
    consent/kənˈsent/ 同意 tóng yì
    bias/ˈbaɪəs/ 偏见 piān jiàn
    data structure/ˈdeɪtə ˈstrʌktʃə/ 数据结构 shù jù jié gòu
    4.2

    Pourquoi Nous Avons Besoin de Structures de Données

    Programme

    Objectif d'apprentissage 4.2.A : Représenter des modèles et des algorithmes impliquant des jeux de données trouvés dans la vie quotidienne à l'aide de langage écrit ou de diagrammes.

    • 4.2.A.1 Un jeu de données est une collection de pièces d'informations ou de données spécifiques.
    • 4.2.A.2 Les jeux de données peuvent être manipulés et analysés pour résoudre un problème ou répondre à une question. Lors de l'analyse des jeux de données, les valeurs du jeu sont accédées et utilisées une par une, puis traitées selon le résultat souhaité.
    • 4.2.A.3 Les données peuvent être représentées dans un diagramme en utilisant un graphique ou un tableau. Cette visualisation peut être utilisée pour planifier l'algorithme qui sera utilisé pour manipuler les données.

    Source : Description du cours et de l'examen AP College Board

    Un classeur : les collections stockent de nombreuses valeurs sous un seul nom afin que les algorithmes puissent les traiter
    Un classeur : les collections stockent de nombreuses valeurs sous un seul nom afin que les algorithmes puissent les traiter

    Une seule variable ne contient qu'une valeur ; les problèmes réels nécessitent de stocker de nombreuses valeurs liées – une liste d'élèves, des pixels, des lectures de capteurs. Une structure de données 数据结构 organise une collection pour que nous puissions stocker, trouver et traiter des éléments efficacement. Le cours AP utilise trois structures : le tableau, l'ArrayList, et le tableau 2D.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    array/əˈreɪ/ 数组 shù zǔ
    Traverse/trəˈvɜːs/ 遍历 biàn lì
    4.3

    Créer et Lire un Tableau

    Programme

    Objectif d'apprentissage 4.3.A : Développer du code utilisé pour représenter des collections de données apparentées à l'aide d'objets tableaux unidimensionnels (1D).

    • 4.3.A.1 Un tableau stocke plusieurs valeurs du même type. Les valeurs peuvent être soit des valeurs primitives, soit des références d'objets.
    • 4.3.A.2 La longueur d'un tableau est établie au moment de sa création et ne peut pas être modifiée. La longueur d'un tableau peut être accédée via l'attribut length.
    • 4.3.A.3 Lorsqu'un tableau est créé en utilisant le mot-clé new, tous ses éléments sont initialisés avec les valeurs par défaut pour le type de données des éléments. La valeur par défaut pour int est 0, pour double est 0.0, pour boolean est false, et pour un type de référence est null.
    • 4.3.A.4 Les listes d'initialisation peuvent être utilisées pour créer et initialiser des tableaux.
    • 4.3.A.5 Les crochets [ ] sont utilisés pour accéder à et modifier un élément dans un tableau 1D en utilisant un index.
    • 4.3.A.6 Les valeurs d'index valides pour un tableau s'étendent de 0 à une unité inférieure à la longueur du tableau, inclus. L'utilisation d'une valeur d'index hors de cette plage entraînera une ArrayIndexOutOfBoundsException.

    Source : Description du cours et de l'examen AP College Board

    Un tableau 数组 est une collection ordonnée de taille fixe de valeurs de même type. Les indices vont de 0 à length - 1 :

    Un tableau à une dimension (une liste) avec ses indices et bornes
    Un tableau à une dimension (une liste) avec ses indices et bornes
    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)
    

    Accéder à un indice hors 0..length-1 provoque une ArrayIndexOutOfBoundsException.

    4.4

    Visiter Chaque Élément d'un Tableau

    Programme

    Objectif d'apprentissage 4.4.A : Développer du code servant à parcourir les éléments d'un tableau 1D et déterminer le résultat de ces parcours.

    • 4.4.A.1 Parcourir un tableau consiste à utiliser des instructions de répétition pour accéder à tous ou à une séquence ordonnée d'éléments dans un tableau.
    • 4.4.A.2 Parcourir un tableau avec une boucle for indexée ou une boucle while nécessite l'accès aux éléments via leurs indices.
    • 4.4.A.3 Une en-tête de boucle élargie for comprend une variable, appelée variable de boucle élargie for. Pour chaque itération de la boucle élargie for, la variable de boucle élargie for est affectée d'une copie d'un élément sans utiliser son index.
    • 4.4.A.4 Affecter une nouvelle valeur à la variable de boucle élargie for ne change pas la valeur stockée dans le tableau.
    • 4.4.A.5 Lorsqu'un tableau stocke des références d'objets, les attributs peuvent être modifiés en appelant des méthodes sur la variable de boucle élargie for. Cela ne change pas les références d'objets stockées dans le tableau.
    • 4.4.A.6 Du code écrit avec une boucle élargie for pour parcourir les éléments d'un tableau peut être réécrit en utilisant une boucle indexée for ou une boucle while.

    Source : Description du cours et de l'examen AP College Board

    Parcourir 遍历 un tableau avec une boucle for (donne l'indice) ou une boucle enhanced for / for-each (donne chaque valeur, lecture seule) :

    for (int i = 0; i < a.length; i++) { a[i] *= 2; }   // can modify
    for (int v : a) { System.out.println(v); }          // read each value
    
    4.5

    Algorithmes Standard de Tableau

    Programme

    Objectif d'apprentissage 4.5.A : Développer du code pour des algorithmes standards et originaux dans un contexte ou une spécification donnée impliquant des tableaux et déterminer le résultat de ces algorithmes.

    • 4.5.A.1 Il existe des algorithmes standards qui utilisent des parcours de tableaux pour :
      • déterminer une valeur minimale ou maximale
      • calculer une somme ou une moyenne
      • déterminer si au moins un élément possède une propriété particulière
      • déterminer si tous les éléments possèdent une propriété particulière
      • déterminer le nombre d'éléments ayant une propriété particulière
      • accéder à toutes les paires consécutives d'éléments
      • déterminer la présence ou l'absence d'éléments dupliqués
      • décaler ou faire pivoter des éléments vers la gauche ou la droite
      • inverser l'ordre des éléments

    Source : Description du cours et de l'examen AP College Board

    Maîtrisez ces modèles : calculer une somme ou une moyenne, trouver le max/min, compter les éléments répondant à une condition, vérifier s'il y a un double, et inverser ou décaler des éléments. Chacun est un parcours avec un résultat accumulé :

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

    Lire des Données depuis un Fichier Texte

    Programme

    Objectif d'apprentissage 4.6.A : Développer du code pour lire des données à partir d'un fichier texte.

    • 4.6.A.1 Un fichier est un stockage de données persistant lorsque le programme n'est pas en cours d'exécution. Les données dans un fichier peuvent être récupérées lors de l'exécution du programme.
    • 4.6.A.2 Un fichier peut être connecté au programme en utilisant les classes File et Scanner.
    • 4.6.A.3 Un fichier peut être ouvert en créant un objet File, en utilisant le nom du fichier comme argument du constructeur.
      • File(String str) est le constructeur File qui accepte un nom de fichier String à ouvrir en lecture, où str est le chemin d'accès du fichier.
    • 4.6.A.4 En utilisant la classe File, il est requis d'indiquer quoi faire si le fichier avec le nom fourni ne peut pas être ouvert. Une façon de réaliser cela est d'ajouter throws IOException à l'en-tête de la méthode qui utilise le fichier. Si le nom de fichier est invalide, le programme se terminera.
    • 4.6.A.5 Les classes File et IOException font partie du package java.io. Une instruction import doit être utilisée pour rendre ces classes disponibles pour l'utilisation dans le programme.
    • 4.6.A.6 Les méthodes et constructeurs Scanner suivants — y compris ce qu'ils font et quand ils sont utilisés — font partie de la référence rapide Java :
      • Scanner(File f) est le constructeur Scanner qui accepte un File pour la lecture.
      • int nextInt() retourne le prochain int lu depuis le fichier ou la source d'entrée s'il est disponible. Si le prochain int n'existe pas ou est hors plage, cela entraînera une InputMismatchException.
      • double nextDouble() retourne le prochain double lu depuis le fichier ou la source d'entrée. Si le prochain double n'existe pas, cela entraînera une InputMismatchException.
      • boolean nextBoolean() retourne le prochain boolean lu depuis le fichier ou la source d'entrée. Si le prochain boolean n'existe pas, cela entraînera une InputMismatchException.
      • String nextLine() retourne la prochaine ligne de texte sous forme de String lu depuis le fichier ou la source d'entrée ; peut retourner la chaîne vide si appelée immédiatement après une autre méthode Scanner qui lit depuis le fichier ou la source d'entrée.
      • String next() retourne le prochain String lu dans le fichier ou la source d'entrée.
      • boolean hasNext() retourne true s'il y a un prochain élément à lire dans le fichier ou la source d'entrée ; retourne false sinon.
      • void close() ferme ce scanner.
      • Instruction d'exclusion : Accepter l'entrée clavier est hors du programme du cours et de l'examen AP Computer Science A.
    • 4.6.A.7 L'utilisation de nextLine et des autres méthodes Scanner ensemble sur la même source d'entrée nécessite parfois du code pour ajuster les différentes façons dont les méthodes gèrent les espaces blancs.
      • Instruction d'exclusion : Écrire ou analyser du code utilisant à la fois nextLine et d'autres méthodes Scanner sur la même source d'entrée est hors du programme du cours et de l'examen AP Computer Science A.
    • 4.6.A.8 La méthode additionnelle suivante String — y compris ce qu'elle fait et quand elle est utilisée — fait partie de la référence rapide Java :
      • String[] split(String del) retourne un tableau String où chaque élément est un sous-chaîne de this String, qui a été découpé autour des correspondances de l'expression donnée del.
      • Instruction d'exclusion : Le paramètre del utilise un format appelé expression régulière. Écrire ou analyser du code utilisant l'une des propriétés spéciales des expressions régulières (par exemple, \\*, \\.) est hors du programme du cours et de l'examen AP Computer Science A.
    • 4.6.A.9 Une boucle élargie while peut être utilisée pour détecter si le fichier contient encore des éléments à lire en utilisant la méthode hasNext comme condition de la boucle.
    • 4.6.A.10 Un fichier doit être fermé lorsque le programme a fini de l'utiliser. La méthode close de Scanner est appelée pour fermer le fichier.

    Source : Description du cours et de l'examen AP College Board

    File et IOException vivent dans java.io, donc un programme qui lit un fichier a besoin de import java.io.*;. Ouvrir un fichier peut échouer (il pourrait ne pas exister), et Java vous oblige à gérer cela – la façon la plus simple est d'ajouter throws IOException à l'en-tête de la méthode. Un Scanner lit ensuite le fichier ligne par ligne, utilisant hasNext... pour tester avant de lire :

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

    Lire des jetons typés avec nextInt(), nextDouble(), ou nextBoolean() provoque une InputMismatchException si le prochain jeton est du mauvais type – par exemple appeler nextInt() lorsque la prochaine chose dans le fichier est le mot cat.

    4.7

    Envelopper un Nombre dans un Objet

    Programme

    Objectif d'apprentissage 4.7.A : Développer du code pour utiliser des objets Integer et Double à partir de leurs homologues primitifs et déterminer le résultat de l'utilisation de ces objets.

    • 4.7.A.1 La classe Integer et la classe Double font partie du package java.lang. Un objet Integer est immuable, ce qui signifie qu'une fois un objet Integer créé, ses attributs ne peuvent pas être changés. Un objet Double est immuable, ce qui signifie qu'une fois un objet Double créé, ses attributs ne peuvent pas être changés.
    • 4.7.A.2 L'autoboxing est la conversion automatique que le compilateur Java effectue entre les types primitifs et leurs classes enveloppes d'objet correspondantes. Cela inclut la conversion d'un int en un Integer et d'un double en un Double. Le compilateur Java applique l'autoboxing lorsqu'une valeur primitive est :
      • passée comme paramètre à une méthode attendant un objet de la classe enveloppe correspondante
      • affectée à une variable de la classe enveloppe correspondante
    • 4.7.A.3 L'unboxing est la conversion automatique que le compilateur Java effectue de la classe enveloppe vers le type primitif. Cela inclut la conversion d'un Integer en un int et d'un Double en un double. Le compilateur Java applique l'unboxing lorsqu'un objet de classe enveloppe est :
      • passé comme paramètre à une méthode attendant une valeur du type primitif correspondant
      • affectée à une variable du type primitif correspondant
    • 4.7.A.4 La méthode de classe Integer suivante — y compris ce qu'elle fait et quand elle est utilisée — fait partie de la référence rapide Java :
      • static int parseInt(String s) retourne l'argument String sous forme de int.
    • 4.7.A.5 La méthode de classe Double suivante — y compris ce qu'elle fait et quand elle est utilisée — fait partie de la référence rapide Java :
      • static double parseDouble(String s) retourne l'argument String sous forme de double.

    Source : Description du cours et de l'examen AP College Board

    Un ArrayList stocke des objets, pas des primitifs, donc un primitif est enveloppé dans un objet : Integer enveloppe int, Double enveloppe double. Java fait cela avec l'autoboxing (int vers Integer) et le unboxing (inversement) automatiquement, donc vous pouvez écrire list.add(5) et int x = list.get(0).

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    autoboxing/ˌɔːtəʊˈbɒksɪŋ/ 自动装箱 zì dòng zhuāng xiāng
    4.8

    Boîte à Outils ArrayList

    Programme

    Objectif d'apprentissage 4.8.A : Développer du code pour des collections d'objets liés utilisant des objets ArrayList et déterminer le résultat de l'appel de méthodes sur ces objets.

    • 4.8.A.1 Un objet ArrayList est mutable en taille et contient des références d'objets.
    • 4.8.A.2 Le constructeur ArrayList ArrayList() construit une liste vide.
    • 4.8.A.3 Java permet le type générique ArrayList<E>, où le paramètre de type E spécifie le type des éléments. Lorsque ArrayList<E> est spécifié, les types des paramètres de référence et du type de retour lors de l'utilisation des méthodes ArrayList sont le type E. ArrayList<E> est préféré à ArrayList. Par exemple, ArrayList<String> names = new ArrayList<String>(); permet au compilateur de trouver des erreurs qui seraient autrement trouvées à l'exécution.
    • 4.8.A.4 La classe ArrayList fait partie du package java.util. Une instruction import doit être utilisée pour rendre cette classe disponible pour l'utilisation dans le programme.
    • 4.8.A.5 Les méthodes ArrayList suivantes — y compris ce qu'elles font et quand elles sont utilisées — font partie de la référence rapide Java :
      • int size() retourne le nombre d'éléments dans la liste.
      • boolean add(E obj) ajoute obj à la fin de la liste ; retourne true.
      • void add(int index, E obj) insère obj à la position index (0 <= index <= size), déplaçant les éléments aux positions index et supérieures vers la droite (ajoute 1 à leurs indices) et ajoute 1 à la taille.
      • E get(int index) retourne l'élément à la position index dans la liste.
      • E set(int index, E obj) remplace l'élément à la position index par obj ; retourne l'élément auparavant situé à la position index.
      • E remove(int index) retire l'élément à la position index, déplaçant les éléments aux positions index + 1 et supérieures vers la gauche (soustrait 1 à leurs indices) et soustrait 1 à la taille ; retourne l'élément auparavant situé à la position index.
    • 4.8.A.6 Les indices d'un ArrayList commencent à 0 et se terminent au nombre d'éléments - 1.

    Source : Description du cours et de l'examen AP College Board

    Qu'est-ce qu'un ArrayList est vraiment

    Un ArrayList 动态数组 (tableau dynamique) grandit et se réduit lorsque vous ajoutez ou supprimez des éléments. Déclarez-le avec le type d'élément dans <> :

    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)
    
    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    ArrayList/əˈreɪ lɪst/ 动态数组 dòng tài shù zǔ
    2D array/ˌtuː ˈdiː əˈreɪ/ 二维数组 èr wéi shù zǔ
    row-major order/rəʊ ˈmeɪdʒə ˈɔːdə/ 行主序 xíng zhǔ xù
    4.9

    Parcourir chaque élément d'un ArrayList

    Programme

    Objectif d'apprentissage 4.9.A : Développer du code servant à parcourir les éléments d'un ArrayList et déterminer les résultats de ces parcours.

    • 4.9.A.1 Parcourir un ArrayList consiste à utiliser des instructions d'itération ou récursives pour accéder à tous ou à une séquence ordonnée des éléments dans un ArrayList.
    • 4.9.A.2 Supprimer des éléments pendant un parcours d'un ArrayList nécessite l'utilisation de techniques spéciales pour éviter de sauter des éléments.
    • 4.9.A.3 Tenter d'accéder à une valeur d'index hors de sa plage entraînera une IndexOutOfBoundsException.
    • 4.9.A.4 Changer la taille d'un ArrayList tout en le parcourant avec une boucle élargie for peut entraîner une ConcurrentModificationException. Par conséquent, lorsqu'on utilise une boucle élargie for pour parcourir un ArrayList, vous ne devez pas ajouter ou supprimer d'éléments.

    Source : Description du cours et de l'examen AP College Board

    Parcourez avec une boucle à index ou une boucle for-each, comme pour les tableaux (utilisez size() et get(i)) :

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

    Compétence d'examen : lors de la suppression d'éléments dans une boucle à index, parcourrez soit à l'envers, soit ne n'incrémentez pas i après une suppression – sinon la suppression décale les éléments vers la gauche et vous sautez un élément. Et n'ajoutez ni ne supprimez jamais d'éléments pendant que vous parcourez un ArrayList avec une boucle for-each : modifier sa taille en cours de boucle provoque une ConcurrentModificationException, utilisez donc une boucle à index (à l'envers, comme ci-dessus) chaque fois que vous devez supprimer.

    4.10

    Algorithmes standards pour ArrayList

    Programme

    Objectif d'apprentissage 4.10.A : Écrire du code pour des algorithmes standards et originaux pour un contexte ou une spécification particulière impliquant des objets ArrayList et déterminer le résultat de ces algorithmes.

    • 4.10.A.1 Il existe des algorithmes ArrayList standards qui utilisent des traversées pour :
      • déterminer une valeur minimale ou maximale
      • calculer une somme ou une moyenne
      • déterminer si au moins un élément possède une propriété particulière
      • déterminer si tous les éléments possèdent une propriété particulière
      • déterminer le nombre d'éléments ayant une propriété particulière
      • accéder à toutes les paires consécutives d'éléments
      • déterminer la présence ou l'absence d'éléments dupliqués
      • décaler ou faire pivoter des éléments vers la gauche ou la droite
      • inverser l'ordre des éléments
      • insérer des éléments
      • supprimer des éléments
    • 4.10.A.2 Certains algorithmes nécessitent la traversée simultanée de plusieurs String, tableaux bidimensionnels (array) ou objets ArrayList.

    Source : Description du cours et de l'examen AP College Board

    Les mêmes algorithmes que pour les tableaux – max/min, comptage, somme – plus l'insertion et la suppression que les tableaux ne peuvent pas faire facilement. Une tâche courante consiste à supprimer tous les éléments correspondant à une condition, en gérant soigneusement le décalage des indices.

    4.11

    Grilles : Tableaux bidimensionnels

    Programme

    Objectif d'apprentissage 4.11.A : Développer du code utilisé pour représenter des collections de données apparentées à l'aide d'objets tableaux bidimensionnels (2D).

    • 4.11.A.1 Un tableau 2D est stocké sous forme de tableau de tableaux. Par conséquent, la façon dont les tableaux 2D sont créés et indexés est similaire à celle des objets tableaux unidimensionnels (1D). La taille d'un tableau 2D est établie au moment de sa création et ne peut pas être modifiée. Les tableaux 2D peuvent stocker soit des données primitives, soit des références d'objets.
      • Énoncé d'exclusion : Les objets tableaux 2D non rectangulaires sont hors programme du cours et de l'examen AP Computer Science A.
    • 4.11.A.2 Lorsqu'un tableau 2D est créé en utilisant le mot-clé new, tous ses éléments sont initialisés avec les valeurs par défaut pour le type de données des éléments. La valeur par défaut pour int est 0, pour double est 0.0, pour boolean est false, et pour un type de référence est null.
    • 4.11.A.3 La liste d'initialisation utilisée pour créer et initialiser un tableau 2D consiste en des listes d'initialisation représentant des tableaux 1D ; par exemple, int[][] arr2D = { {1, 2, 3}, {4, 5, 6} };.
    • 4.11.A.4 Les crochets [row][col] sont utilisés pour accéder et modifier un élément dans un tableau 2D. Aux fins de l'examen, lors de l'accès à l'élément à arr[first][second], le premier indice est utilisé pour les lignes, le second indice est utilisé pour les colonnes.
    • 4.11.A.5 Un tableau unique qui constitue une ligne d'un tableau 2D peut être accédé en utilisant le nom du tableau 2D suivi d'une seule paire de crochets contenant l'indice de ligne.
    • 4.11.A.6 Le nombre de lignes contenues dans un tableau 2D peut être accédé via l'attribut length. Les valeurs d'indice de ligne valides pour un tableau 2D s'étendent de 0 jusqu'à une unité inférieure au nombre de lignes ou à la longueur du tableau, inclus. Le nombre de colonnes contenues dans un tableau 2D peut être accédé via l'attribut length de l'une des lignes. Les valeurs d'indice de colonne valides pour un tableau 2D s'étendent de 0 jusqu'à une unité inférieure au nombre de colonnes ou à la longueur de toute ligne donnée du tableau, inclus. Par exemple, étant donné un tableau 2D nommé values, le nombre de lignes est values.length et le nombre de colonnes est values[0].length. L'utilisation d'une valeur d'indice en dehors de ces plages entraînera une ArrayIndexOutOfBoundsException.

    Source : Description du cours et de l'examen AP College Board

    Un tableau 2D 二维数组 est une grille (lignes et colonnes) – un tableau de tableaux :

    Un tableau bidimensionnel (un tableau) avec des indices de ligne et de colonne
    Un tableau bidimensionnel (un tableau) avec des indices de ligne et de colonne
    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
    
    Explorer

    Indexer un tableau 2D par ligne et colonne

    Un tableau 2D est une grille adressée par [row][col]. Déplacez les indices et regardez quelle cellule ils sélectionnent — ligne d'abord, puis colonne, tous deux comptant à partir de 0.

    4.12

    Parcourir une grille

    Programme

    Objectif d'apprentissage 4.12.A : Développer du code utilisé pour parcourir les éléments d'un tableau 2D et déterminer le résultat de ces traversées.

    • 4.12.A.1 Les instructions d'itération imbriquées sont utilisées pour parcourir et accéder à tous ou à une séquence ordonnée d'éléments dans un tableau 2D. Puisque les tableaux 2D sont stockés comme des tableaux de tableaux, la façon dont les tableaux 2D sont parcourus en utilisant des boucles for et des boucles améliorées for est similaire aux objets de tableau 1D. Les instructions d'itération imbriquées peuvent être écrites pour parcourir le tableau 2D en ordre ligne-major, colonne-major, ou un ordre défini de manière unique. L'ordre ligne-major fait référence à un ordre des éléments de tableau 2D où la traversal se fait à travers chaque ligne, tandis que la traversal colonne-major se fait vers le bas chaque colonne.
    • 4.12.A.2 La boucle externe d'une boucle imbriquée for améliorée utilisée pour parcourir un tableau 2D parcourt les lignes. Par conséquent, la variable de boucle for améliorée doit être du type de chaque ligne, c'est-à-dire un tableau 1D. La boucle interne parcourt une ligne unique. Par conséquent, la variable de boucle for améliorée interne doit être du même type que les éléments stockés dans le tableau 1D. L'attribution d'une nouvelle valeur à la variable de boucle for améliorée ne modifie pas la valeur stockée dans le tableau.

    Source : Description du cours et de l'examen AP College Board

    Parcourir un tableau 2-D

    Visitez chaque cellule avec des boucles imbriquées – l'extérieure sur les lignes, l'intérieure sur les colonnes (ordre row-major 行主序) :

    for (int r = 0; r < grid.length; r++)
        for (int c = 0; c < grid[0].length; c++)
            System.out.print(grid[r][c]);
    
    4.13

    Algorithmes standards pour tableaux 2D

    Programme

    Objectif d'apprentissage 4.13.A : Développer du code pour des algorithmes standards et originaux dans un contexte ou une spécification particulière impliquant des tableaux 2D et déterminer le résultat de ces algorithmes.

    • 4.13.A.1 Il existe des algorithmes standards qui utilisent des traversées de tableaux 2D pour :
      • déterminer une valeur minimale ou maximale de tous les éléments ou pour une ligne, colonne ou autre sous-section désignée
      • calculer une somme ou une moyenne de tous les éléments ou pour une ligne, colonne ou autre sous-section désignée
      • déterminer si au moins un élément possède une propriété particulière dans tout le tableau 2D ou pour une ligne, colonne ou autre sous-section désignée
      • déterminer si tous les éléments du tableau 2D ou d'une ligne, colonne ou autre sous-section désignée possèdent une propriété particulière
      • déterminer le nombre d'éléments dans le tableau 2D ou dans une ligne, colonne ou autre sous-section désignée ayant une propriété particulière
      • accéder à toutes les paires consécutives d'éléments
      • déterminer la présence ou l'absence d'éléments dupliqués dans le tableau 2D ou dans une ligne, colonne ou autre sous-section désignée
      • décaler ou faire pivoter des éléments dans une ligne vers la gauche ou la droite ou dans une colonne vers le haut ou le bas
      • inverser l'ordre des éléments dans une ligne ou une colonne

    Source : Description du cours et de l'examen AP College Board

    Tâches typiques de grille : sommer une ligne ou une colonne, trouver le max dans la grille, compter les cellules correspondantes, ou sommer une diagonale (où r == c). Chacune est une traversal imbriquée avec un résultat accumulé.

    4.14

    Trouver une valeur : Recherche linéaire et binaire

    Programme

    Objectif d'apprentissage 4.14.A : Développer du code utilisé pour des algorithmes de recherche linéaire afin de rechercher des informations spécifiques dans une collection et déterminer les résultats de l'exécution d'une recherche.

    • 4.14.A.1 Les algorithmes de recherche linéaire sont des algorithmes standards qui vérifient chaque élément dans l'ordre jusqu'à ce que la valeur souhaitée soit trouvée ou que tous les éléments du tableau ou de ArrayList aient été vérifiés. Les algorithmes de recherche linéaire peuvent commencer le processus de recherche depuis n'importe quelle extrémité du tableau ou de ArrayList.
    • 4.14.A.2 Lors de l'application d'algorithmes de recherche linéaire aux tableaux 2D, chaque ligne doit être accédée puis la recherche linéaire appliquée à chaque ligne du tableau 2D.

    Source : Description du cours et de l'examen AP College Board

    Recherche binaire : diviser par deux et vaincre
    • Recherche linéaire 线性搜索 vérifie chaque élément à tour de rôle – fonctionne sur n'importe quelle liste, prenant jusqu'à $n$ étapes.
    • Recherche binaire 二分搜索 ne fonctionne que sur une liste triée : vérifiez le milieu, puis éliminez la moitié qui ne peut pas contenir la cible, en répétant. Elle prend environ $\log_2 n$ étapes – bien plus rapide sur de grandes données.
    La recherche binaire divise la plage en deux à chaque étape
    La recherche binaire divise la plage en deux à chaque étape
    La recherche linéaire vérifie chaque élément à tour de rôle jusqu'à ce que la cible soit trouvée
    La recherche linéaire vérifie chaque élément à tour de rôle jusqu'à ce que la cible soit trouvée
    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;
    }
    

    Compétence d'examen : la recherche binaire nécessite des données triées ; sachez combien de comparaisons elle effectue et comment lo, hi, mid sont mis à jour.

    Exemple résolu. Cherchez target = 40 dans le tableau trié {3, 9, 14, 23, 31, 42, 55} (indices 0–6). Commencez avec lo=0, hi=6 :

    • mid = (0+6)/2 = 3, a[3]=23 < 40, donc lo = 4;
    • mid = (4+6)/2 = 5, a[5]=42 > 40, donc hi = 4;
    • mid = (4+4)/2 = 4, a[4]=31 < 40, donc lo = 5;
    • maintenant lo (5) > hi (4), donc la boucle se termine – 40 est absent.

    Chaque étape a divisé la plage en deux, donc même cet échec n'a pris que trois comparaisons.

    Explorer

    Comparer recherche linéaire et recherche binaire

    La recherche linéaire vérifie chaque élément à tour de rôle ; la recherche binaire divise par deux une liste triée à chaque étape. Observez la recherche binaire atteindre la cible en bien moins de comparaisons.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    Linear search/ˈlɪnɪə sɜːtʃ/ 线性搜索 xiàn xìng sōu suǒ
    Binary search/ˈbaɪnəri sɜːtʃ/ 二分搜索 èr fēn sōu suǒ
    Selection sort/sɪˈlekʃn sɔːt/ 选择排序 xuǎn zé pái xù
    4.15

    Mettre des données en ordre : Tri par sélection et par insertion

    Programme

    Objectif d'apprentissage 4.15.A : Déterminer le résultat de l'exécution de chaque étape des algorithmes de tri pour trier les éléments d'une collection.

    • 4.15.A.1 Le tri par sélection et le tri par insertion sont des algorithmes de tri itératifs qui peuvent être utilisés pour trier des éléments dans un tableau ou un ArrayList.
    • 4.15.A.2 Le tri par sélection sélectionne répétés le plus petit (ou le plus grand) élément de la partie non triée de la liste et l'échange contre sa position correcte (et finale) dans la partie triée de la liste.
    • 4.15.A.3 Le tri par insertion insère un élément de la partie non triée d'une liste dans sa position correcte (mais pas nécessairement finale) dans la partie triée de la liste en décalant les éléments de la partie triée pour faire de la place au nouvel élément.

    Source : Description du cours et de l'examen AP College Board

    Tri par insertion
    Tri à bulles, passe par passe
    • Tri par sélection 选择排序 trouve répétitivement le plus petit élément restant et l'échange pour le placer correctement.
    • Tri par insertion 插入排序 fait croître un front trié, insérant chaque nouvel élément à l'endroit où il appartient.
    Un tri par insertion, déplaçant chaque clé à sa place itération après itération
    Un tri par insertion, déplaçant chaque clé à sa place itération après itération

    Les deux sont simples et prennent environ $n^2$ étapes en moyenne – parfaits pour de petits tableaux. Soyez capable de tracer le tableau après chaque passe.

    Explorer

    Observer un algorithme de tri ordonner une liste

    Un tri réorganise les éléments dans l'ordre. Parcourez le tri par sélection/insertion pour voir la zone triée grandir d'un élément à la fois.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    Insertion sort/ɪnˈsɜːʃn sɔːt/ 插入排序 chā rù pái xù
    4.16

    Méthodes qui s'appellent elles-mêmes : Récursivité

    Programme

    Objectif d'apprentissage 4.16.A : Déterminer le résultat de l'appel de méthodes récursives.

    • 4.16.A.1 Une méthode récursive est une méthode qui s'appelle elle-même. Les méthodes récursives contiennent au moins un cas de base, qui arrête la récursion, et au moins un appel récursif. La récursivité est une autre forme de répétition.
    • 4.16.A.2 Chaque appel récursif possède son propre ensemble de variables locales, y compris les paramètres. Les valeurs des paramètres capturent les progrès d'un processus récursif, tout comme les valeurs des variables de contrôle de boucle capturent les progrès d'une boucle.
    • 4.16.A.3 Toute solution récursive peut être reproduite par l'utilisation d'une approche itérative et vice versa.
      • Énoncé d'exclusion : L'écriture de code récursif est hors programme du cours et de l'examen AP Computer Science A.

    Source : Description du cours et de l'examen AP College Board

    Récursivité & pile d'appels

    La récursivité 递归 est une méthode qui s'appelle elle-même sur une entrée plus petite. Elle nécessite un cas de base 基本情况 qui arrête les appels, et un cas récursif qui approche du cas de base :

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

    Sans cas de base atteignable, la récursivité ne s'arrête jamais (débordement de pile).

    La récursivité et l'itération sont interchangeables. Toute solution récursive peut être réécrite avec une boucle (approche itérative), et toute boucle peut être réécrite avec la récursivité - ils résolvent les mêmes problèmes. La factorial ci-dessus a le même effet qu'une version itérative :

    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;
    }
    

    Ainsi le choix porte sur la clarté, pas sur la capacité : la récursivité se lit naturellement pour les problèmes ayant une structure auto-similaire (arbres, tri fusion), tandis que l'itération évite le coût mémoire d'une trame d'appel empilée à chaque étape. L'examen peut vous demander de convertir l'un en l'autre.

    Explorer

    Déplier un appel récursif

    Une méthode récursive s'appelle elle-même sur une entrée plus petite jusqu'à ce qu'elle atteigne un cas de base, puis les résultats remontent. Parcourez pour voir les appels empiler et se dérouler.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    Recursion/rɪˈkɜːʃn/ 递归 dì guī
    base case/beɪs keɪs/ 基本情况 jī běn qíng kuàng
    4.17

    Recherche récursive et tri fusion

    Programme

    Objectif d'apprentissage 4.17.A : Déterminer le résultat de l'exécution d'algorithmes récursifs utilisant des chaînes de caractères ou des collections.

    • 4.17.A.1 La récursivité peut être utilisée pour parcourir des objets String, des tableaux et des objets ArrayList.

    Objectif d'apprentissage 4.17.B : Déterminer le résultat de chaque itération d'un algorithme de recherche binaire utilisé pour rechercher des informations dans une collection.

    • 4.17.B.1 Les données doivent être dans un ordre trié pour utiliser l'algorithme de recherche binaire. La recherche binaire commence au milieu d'un tableau trié ou d'un ArrayList et élimine la moitié du tableau ou de ArrayList à chaque appel récursif jusqu'à ce que la valeur souhaitée soit trouvée ou que tous les éléments aient été éliminés.
    • 4.17.B.2 La recherche binaire est généralement plus efficace que la recherche linéaire.
      • Énoncé d'exclusion : Les algorithmes de recherche autres que la recherche linéaire et binaire sont hors programme du cours et de l'examen AP Computer Science A.
    • 4.17.B.3 L'algorithme de recherche binaire peut être écrit de manière itérative ou récursive.

    Objectif d'apprentissage 4.17.C : Déterminer le résultat de chaque itération de l'algorithme de tri fusion (merge sort) lorsqu'il est utilisé pour trier une collection.

    • 4.17.C.1 Le tri fusion est un algorithme de tri récursif qui peut être utilisé pour trier des éléments dans un tableau ou un ArrayList.
      • Énoncé d'exclusion : Les algorithmes de tri autres que le tri par sélection, le tri par insertion et le tri fusion sont hors programme du cours et de l'examen AP Computer Science A.
    • 4.17.C.2 Le tri fusion divise répétés un tableau en sous-tableaux plus petits jusqu'à ce que chaque sous-tableau ne contienne qu'un seul élément, puis fusionne récursivement les sous-tableaux triés ensemble dans l'ordre trié pour former le tableau final trié.

    Source : Description du cours et de l'examen AP College Board

    Tri par fusion : découpage, puis fusion

    La récursivité alimente des algorithmes efficaces. La recherche binaire peut être écrite récursivement (chercher dans la bonne moitié). Le tri fusion 归并排序 divise le tableau en deux, trie chaque moitié récursivement, puis fusionne les deux moitiés triées – prenant environ $n\log_2 n$ étapes, beaucoup plus rapide que le tri par sélection ou insertion sur de grandes données.

    Le tri fusion divise le tableau en éléments individuels, puis fusionne les moitiés triées vers le haut
    Le tri fusion divise le tableau en éléments individuels, puis fusionne les moitiés triées vers le haut

    Exemple résolu. Tracez factorial(4). Chaque appel renvoie à un plus petit : factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * 2 * factorial(1). factorial(1) atteint le cas de base et retourne 1, donc les appels se déroulent vers l'intérieur : 2 * 1 = 2, puis 3 * 2 = 6, puis 4 * 6 = 24. Écrire chaque appel au-dessus de sa valeur retournée est la manière fiable de tracer la récursivité.

    Compétence d'examen : tracez une méthode récursive en écrivant chaque appel et sa valeur de retour, et sachez que l'efficacité du tri fusion ($n\log n$) bat les triers simples $n^2$.

    Vocabulaire Entrainer
    Anglais Chinois Pinyin
    Merge sort/mɜːdʒ sɔːt/ 归并排序 guī bìng pái xù
    4.17

    Conseils d'examen

    • Pesez les avantages et inconvénients de la collecte de données – cette unité est testée par une justification écrite courte, pas par du code.
    • Protégez les informations d'identification personnelle (PII) et expliquez les risques de confidentialité et de sécurité dans leur contexte.
    • Nommez des préjudices réels : fuites de données, surveillance et biais algorithmique dus à des données non représentatives.
    • Respectez la propriété intellectuelle et les licences lorsque vous réutilisez du code ou des données.
    • Donnez une réponse spécifique et argumentée – un « cela pourrait être mauvais » vague ne rapporte aucun point.

Se connecter ou créer un compte

IGCSE, A-Level & AP