[{"data":1,"prerenderedAt":2729},["ShallowReactive",2],{"item-lessons-light-ch09-storing-data":3,"item-examples-light-ch09-storing-data":444,"item-exercises-light-ch09-storing-data":753,"item-lesson-full-ch09-storing-data-9.7":1070,"item-example-full-ch09-storing-data-9.7":1477,"item-exercise-full-ch09-storing-data-9.7":1932},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392,396,400,404,408,412,416,420,424,428,432,436,440],{"path":5,"title":6,"stem":7},"\u002Fshockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1-why-java-for-frc","Why Java for FRC?","shockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1.1-why-java-for-frc",{"path":9,"title":10,"stem":11},"\u002Fshockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming and Compilers","shockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":13,"title":14,"stem":15},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F1-variables-and-data-types","Variables & Data Types","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.1-variables-and-data-types",{"path":17,"title":18,"stem":19},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2-expressions-and-output","Expressions & Output","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.2-expressions-and-output",{"path":21,"title":22,"stem":23},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F3-assignment-and-input","Assignment & Input","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.3-assignment-and-input",{"path":25,"title":26,"stem":27},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F4-casting-and-ranges-of-values","Casting & Ranges of Values","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.4-casting-and-ranges-of-values",{"path":29,"title":30,"stem":31},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F5-compound-assignment-operators","Compound Assignment Operators","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.5-compound-assignment-operators",{"path":33,"title":34,"stem":35},"\u002Fshockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F1-apis-and-libraries","APIs and Libraries","shockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3.1-apis-and-libraries",{"path":37,"title":38,"stem":39},"\u002Fshockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F2-documentation-with-comments-and-preconditions","Documentation with Comments and Preconditions","shockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3.2-documentation-with-comments-and-preconditions",{"path":41,"title":42,"stem":43},"\u002Fshockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3-packages-and-imports","Packages & Imports","shockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3.3-packages-and-imports",{"path":45,"title":46,"stem":47},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F1-methods-signatures-and-parameters","Methods, Signatures & Parameters","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters",{"path":49,"title":50,"stem":51},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F2-calling-class-methods","Calling Class Methods","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.2-calling-class-methods",{"path":53,"title":54,"stem":55},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F3-using-the-math-class","Using the Math Class","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.3-using-the-math-class",{"path":57,"title":58,"stem":59},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4-objects-instances-of-classes","Objects — Instances of Classes","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.4-objects-instances-of-classes",{"path":61,"title":62,"stem":63},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F5-creating-and-initializing-objects-constructors","Creating & Initializing Objects: Constructors","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.5-creating-and-initializing-objects-constructors",{"path":65,"title":66,"stem":67},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F6-calling-instance-methods","Calling Instance Methods","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.6-calling-instance-methods",{"path":69,"title":70,"stem":71},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F1-5.2-if-statements-and-for-loops","Control Structures: if Statements & For Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.1-5.2-if-statements-and-for-loops",{"path":73,"title":74,"stem":75},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":77,"title":78,"stem":79},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F11-informal-runtime-analysis-of-loops","Informal Runtime Analysis of Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.11-informal-runtime-analysis-of-loops",{"path":81,"title":82,"stem":83},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F12-switch-statements-and-expressions","switch Statements and Expressions","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.12-switch-statements-and-expressions",{"path":85,"title":86,"stem":87},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F3-algorithms-with-selection-and-repetition","Algorithms with Selection and Repetition","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.3-algorithms-with-selection-and-repetition",{"path":89,"title":90,"stem":91},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":93,"title":94,"stem":95},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5-nested-if-statements","Nested if Statements","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.5-nested-if-statements",{"path":97,"title":98,"stem":99},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F6-compound-boolean-expressions","Compound Boolean Expressions","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.6-compound-boolean-expressions",{"path":101,"title":102,"stem":103},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F7-comparing-boolean-expressions-de-morgans-laws","Comparing Boolean Expressions (De Morgan's Laws)","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.7-comparing-boolean-expressions-de-morgans-laws",{"path":105,"title":106,"stem":107},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F8-while-loops","While Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.8-while-loops",{"path":109,"title":110,"stem":111},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F9-implementing-selection-and-iteration-algorithms","Implementing Selection and Iteration Algorithms","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.9-implementing-selection-and-iteration-algorithms",{"path":113,"title":114,"stem":115},"\u002Fshockwave-curriculum\u002Flessons\u002Fch06-strings\u002F1-strings","Strings","shockwave-curriculum\u002Flessons\u002Fch06-strings\u002F6.1-strings",{"path":117,"title":118,"stem":119},"\u002Fshockwave-curriculum\u002Flessons\u002Fch06-strings\u002F2-string-algorithms","String Algorithms","shockwave-curriculum\u002Flessons\u002Fch06-strings\u002F6.2-string-algorithms",{"path":121,"title":122,"stem":123},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F1-anatomy-of-a-java-class","The Class Blueprint","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class",{"path":125,"title":126,"stem":127},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F2-methods-how-to-write-them","Methods: How to Write Them","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them",{"path":129,"title":130,"stem":131},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F3-methods-passing-and-returning-references-of-an-object","Methods: Passing & Returning References of an Object","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.3-methods-passing-and-returning-references-of-an-object",{"path":133,"title":134,"stem":135},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F4-class-static-variables-and-methods","Class (static) Variables & Methods","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods",{"path":137,"title":138,"stem":139},"\u002Fshockwave-curriculum\u002Flessons\u002Fch08-constructors-and-this\u002F1-8.2-constructors-and-this","Constructors & \"this\"","shockwave-curriculum\u002Flessons\u002Fch08-constructors-and-this\u002F8.1-8.2-constructors-and-this",{"path":141,"title":142,"stem":143},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F1-array-creation-and-access","Array Creation and Access","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.1-array-creation-and-access",{"path":145,"title":146,"stem":147},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F2-arraylist-and-its-methods","ArrayList and its Methods","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.2-arraylist-and-its-methods",{"path":149,"title":150,"stem":151},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","HashMap (Dictionary) Data Structure","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":153,"title":154,"stem":155},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":157,"title":158,"stem":159},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F5-implementing-array-algorithms","Implementing Array Algorithms","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.5-implementing-array-algorithms",{"path":161,"title":162,"stem":163},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":165,"title":166,"stem":167},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F7-implementing-arraylist-algorithms","Implementing ArrayList Algorithms","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms",{"path":169,"title":170,"stem":171},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F8-using-text-files","Using Text Files","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.8-using-text-files",{"path":173,"title":174,"stem":175},"\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F1-2d-array-creation-and-access","2D Array Creation and Access","shockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.1-2d-array-creation-and-access",{"path":177,"title":178,"stem":179},"\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F2-2d-array-traversals-nested-loops","2D Array Traversals: Nested Loops","shockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops",{"path":181,"title":182,"stem":183},"\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F3-implementing-2d-array-algorithms","Implementing 2D Array Algorithms","shockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms",{"path":185,"title":186,"stem":187},"\u002Fshockwave-curriculum\u002Flessons\u002Fch11-enums-named-choices\u002F11-enums-named-choices","Enums: Named Choices","shockwave-curriculum\u002Flessons\u002Fch11-enums-named-choices\u002F11-enums-named-choices",{"path":189,"title":190,"stem":191},"\u002Fshockwave-curriculum\u002Flessons\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch","Exceptions & try\u002Fcatch","shockwave-curriculum\u002Flessons\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch",{"path":193,"title":194,"stem":195},"\u002Fshockwave-curriculum\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas","Common Gotchas","shockwave-curriculum\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas",{"path":197,"title":198,"stem":199},"\u002Fshockwave-curriculum\u002Flessons\u002Fch14-why-design-patterns\u002F14-why-design-patterns","Why Design Patterns?","shockwave-curriculum\u002Flessons\u002Fch14-why-design-patterns\u002F14-why-design-patterns",{"path":201,"title":202,"stem":203},"\u002Fshockwave-curriculum\u002Flessons\u002Fch15-advanced-collections\u002F15-advanced-collections","Advanced Collections (Set\u002FQueue\u002FMap)","shockwave-curriculum\u002Flessons\u002Fch15-advanced-collections\u002F15-advanced-collections",{"path":205,"title":206,"stem":207},"\u002Fshockwave-curriculum\u002Flessons\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics","Writing Your Own Generics","shockwave-curriculum\u002Flessons\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics",{"path":209,"title":210,"stem":211},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F1-inheritance-superclass-subclass","Inheritance, Superclass, Subclass","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.1-inheritance-superclass-subclass",{"path":213,"title":214,"stem":215},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F2-inheritance-and-constructors","Inheritance and Constructors","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.2-inheritance-and-constructors",{"path":217,"title":218,"stem":219},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F3-inheritance-hierarchies","Inheritance Hierarchies","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.3-inheritance-hierarchies",{"path":221,"title":222,"stem":223},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F4-object-superclass","Object Superclass","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.4-object-superclass",{"path":225,"title":226,"stem":227},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F5-abstract-classes-and-methods","Abstract Classes and Methods","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.5-abstract-classes-and-methods",{"path":229,"title":230,"stem":231},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F1-overriding-methods","Overriding Methods","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.1-overriding-methods",{"path":233,"title":234,"stem":235},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F2-super-keyword","super Keyword","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.2-super-keyword",{"path":237,"title":238,"stem":239},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F3-polymorphism","Polymorphism","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.3-polymorphism",{"path":241,"title":242,"stem":243},"\u002Fshockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts","Interfaces as Contracts","shockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts",{"path":245,"title":246,"stem":247},"\u002Fshockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F1-lambdas-and-method-references","Lambdas & Method References","shockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F19.1-lambdas-and-method-references",{"path":249,"title":250,"stem":251},"\u002Fshockwave-curriculum\u002Flessons\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern","The IO-Layer Pattern","shockwave-curriculum\u002Flessons\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern",{"path":253,"title":254,"stem":255},"\u002Fshockwave-curriculum\u002Flessons\u002Fch21-static-factories\u002F21-static-factories","Static Factories","shockwave-curriculum\u002Flessons\u002Fch21-static-factories\u002F21-static-factories",{"path":257,"title":258,"stem":259},"\u002Fshockwave-curriculum\u002Flessons\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern","The Builder Pattern","shockwave-curriculum\u002Flessons\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern",{"path":261,"title":262,"stem":263},"\u002Fshockwave-curriculum\u002Flessons\u002Fch23-encapsulation-and-final\u002F1-scope-and-access","Access, final, and Immutability","shockwave-curriculum\u002Flessons\u002Fch23-encapsulation-and-final\u002F23.1-scope-and-access",{"path":265,"title":266,"stem":267},"\u002Fshockwave-curriculum\u002Flessons\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions","Optional: Avoiding Null Pointer Exceptions","shockwave-curriculum\u002Flessons\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions",{"path":269,"title":270,"stem":271},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F1-what-is-command-based-programming","What Is Command-Based Programming?","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.1-what-is-command-based-programming",{"path":273,"title":274,"stem":275},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F2-commands-and-command-compositions","Commands & Command Compositions","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.2-commands-and-command-compositions",{"path":277,"title":278,"stem":279},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F3-the-command-scheduler","The Command Scheduler","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.3-the-command-scheduler",{"path":281,"title":282,"stem":283},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F4-state-machines-logic","State Machines: Logic","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.4-state-machines-logic",{"path":285,"title":286,"stem":287},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F5-managing-transitions","Managing Transitions","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.5-managing-transitions",{"path":289,"title":290,"stem":291},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F6-binding-commands-to-triggers","Binding Commands to Triggers","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.6-binding-commands-to-triggers",{"path":293,"title":294,"stem":295},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F7-structuring-a-command-based-robot-project","Structuring a Command-Based Robot Project","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.7-structuring-a-command-based-robot-project",{"path":297,"title":298,"stem":299},"\u002Fshockwave-curriculum\u002Flessons\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways","Architecture Takeaways","shockwave-curriculum\u002Flessons\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways",{"path":301,"title":302,"stem":303},"\u002Fshockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F1-abstraction-and-program-design","Abstraction and Program Design","shockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F27.1-abstraction-and-program-design",{"path":305,"title":306,"stem":307},"\u002Fshockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F2-impact-of-program-design","Impact of Program Design","shockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F27.2-impact-of-program-design",{"path":309,"title":310,"stem":311},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F1-searching-algorithms","Searching Algorithms","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.1-searching-algorithms",{"path":313,"title":314,"stem":315},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F2-sorting-algorithms","Sorting Algorithms","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.2-sorting-algorithms",{"path":317,"title":318,"stem":319},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F3-recursion","Recursion","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.3-recursion",{"path":321,"title":322,"stem":323},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F4-recursive-searching-and-sorting","Recursive Searching and Sorting","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.4-recursive-searching-and-sorting",{"path":325,"title":326,"stem":327},"\u002Fshockwave-curriculum\u002Flessons\u002Fch29-git-and-github-basics\u002F1-coming-soon","Git & GitHub Basics — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch29-git-and-github-basics\u002F29.1-coming-soon",{"path":329,"title":330,"stem":331},"\u002Fshockwave-curriculum\u002Flessons\u002Fch30-git-history-and-merging\u002F1-coming-soon","Git — History & Merging — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch30-git-history-and-merging\u002F30.1-coming-soon",{"path":333,"title":334,"stem":335},"\u002Fshockwave-curriculum\u002Flessons\u002Fch31-dev-environment-and-tooling\u002F1-coming-soon","Dev Environment & Tooling — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch31-dev-environment-and-tooling\u002F31.1-coming-soon",{"path":337,"title":338,"stem":339},"\u002Fshockwave-curriculum\u002Flessons\u002Fch32-unit-testing\u002F1-coming-soon","Unit Testing — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch32-unit-testing\u002F32.1-coming-soon",{"path":341,"title":342,"stem":343},"\u002Fshockwave-curriculum\u002Flessons\u002Fch33-advantagekit-autologging\u002F1-coming-soon","AdvantageKit — AutoLogging — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch33-advantagekit-autologging\u002F33.1-coming-soon",{"path":345,"title":346,"stem":347},"\u002Fshockwave-curriculum\u002Flessons\u002Fch34-log-replay\u002F1-coming-soon","Log Replay — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch34-log-replay\u002F34.1-coming-soon",{"path":349,"title":350,"stem":351},"\u002Fshockwave-curriculum\u002Flessons\u002Fch35-advantagescope-i-visualization\u002F1-coming-soon","AdvantageScope I: Visualization — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch35-advantagescope-i-visualization\u002F35.1-coming-soon",{"path":353,"title":354,"stem":355},"\u002Fshockwave-curriculum\u002Flessons\u002Fch36-advantagescope-ii-custom-3d-assets\u002F1-coming-soon","AdvantageScope II: Custom 3D Assets — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch36-advantagescope-ii-custom-3d-assets\u002F36.1-coming-soon",{"path":357,"title":358,"stem":359},"\u002Fshockwave-curriculum\u002Flessons\u002Fch37-autonomous-i\u002F1-coming-soon","Autonomous I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch37-autonomous-i\u002F37.1-coming-soon",{"path":361,"title":362,"stem":363},"\u002Fshockwave-curriculum\u002Flessons\u002Fch38-autonomous-ii-pathplanner-and-trajectories\u002F1-coming-soon","Autonomous II: PathPlanner & Trajectories — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch38-autonomous-ii-pathplanner-and-trajectories\u002F38.1-coming-soon",{"path":365,"title":366,"stem":367},"\u002Fshockwave-curriculum\u002Flessons\u002Fch39-control-fundamentals\u002F1-coming-soon","Control Fundamentals — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch39-control-fundamentals\u002F39.1-coming-soon",{"path":369,"title":370,"stem":371},"\u002Fshockwave-curriculum\u002Flessons\u002Fch40-motion-profiles\u002F1-coming-soon","Motion Profiles — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch40-motion-profiles\u002F40.1-coming-soon",{"path":373,"title":374,"stem":375},"\u002Fshockwave-curriculum\u002Flessons\u002Fch41-hardware-fundamentals\u002F1-coming-soon","Hardware Fundamentals — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch41-hardware-fundamentals\u002F41.1-coming-soon",{"path":377,"title":378,"stem":379},"\u002Fshockwave-curriculum\u002Flessons\u002Fch42-photonvision\u002F1-coming-soon","PhotonVision — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch42-photonvision\u002F42.1-coming-soon",{"path":381,"title":382,"stem":383},"\u002Fshockwave-curriculum\u002Flessons\u002Fch43-apriltags-and-pose\u002F1-coming-soon","AprilTags & Pose — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch43-apriltags-and-pose\u002F43.1-coming-soon",{"path":385,"title":386,"stem":387},"\u002Fshockwave-curriculum\u002Flessons\u002Fch44-subsystems-i\u002F1-coming-soon","Subsystems I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch44-subsystems-i\u002F44.1-coming-soon",{"path":389,"title":390,"stem":391},"\u002Fshockwave-curriculum\u002Flessons\u002Fch45-subsystems-ii-advanced\u002F1-coming-soon","Subsystems II — Advanced — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch45-subsystems-ii-advanced\u002F45.1-coming-soon",{"path":393,"title":394,"stem":395},"\u002Fshockwave-curriculum\u002Flessons\u002Fch46-team-utilities-i\u002F1-coming-soon","Team Utilities I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch46-team-utilities-i\u002F46.1-coming-soon",{"path":397,"title":398,"stem":399},"\u002Fshockwave-curriculum\u002Flessons\u002Fch47-field-constants\u002F1-coming-soon","Field Constants — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch47-field-constants\u002F47.1-coming-soon",{"path":401,"title":402,"stem":403},"\u002Fshockwave-curriculum\u002Flessons\u002Fch48-troubleshooting-i-runtime-debug\u002F1-coming-soon","Troubleshooting I — Runtime Debug — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch48-troubleshooting-i-runtime-debug\u002F48.1-coming-soon",{"path":405,"title":406,"stem":407},"\u002Fshockwave-curriculum\u002Flessons\u002Fch49-troubleshooting-ii-can-and-sim\u002F1-coming-soon","Troubleshooting II: CAN & Sim — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch49-troubleshooting-ii-can-and-sim\u002F49.1-coming-soon",{"path":409,"title":410,"stem":411},"\u002Fshockwave-curriculum\u002Flessons\u002Fch50-vendor-libraries-talonfx\u002F1-coming-soon","Vendor Libraries: TalonFX — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch50-vendor-libraries-talonfx\u002F50.1-coming-soon",{"path":413,"title":414,"stem":415},"\u002Fshockwave-curriculum\u002Flessons\u002Fch51-robot-alerts\u002F1-coming-soon","Robot Alerts — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch51-robot-alerts\u002F51.1-coming-soon",{"path":417,"title":418,"stem":419},"\u002Fshockwave-curriculum\u002Flessons\u002Fch52-wpilib-commands\u002F1-coming-soon","WPILib Commands — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch52-wpilib-commands\u002F52.1-coming-soon",{"path":421,"title":422,"stem":423},"\u002Fshockwave-curriculum\u002Flessons\u002Fch53-wpilib-geometry\u002F1-coming-soon","WPILib Geometry — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch53-wpilib-geometry\u002F53.1-coming-soon",{"path":425,"title":426,"stem":427},"\u002Fshockwave-curriculum\u002Flessons\u002Fch54-networktables\u002F1-coming-soon","NetworkTables — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch54-networktables\u002F54.1-coming-soon",{"path":429,"title":430,"stem":431},"\u002Fshockwave-curriculum\u002Flessons\u002Fch55-command-scheduler\u002F1-coming-soon","Command Scheduler — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch55-command-scheduler\u002F55.1-coming-soon",{"path":433,"title":434,"stem":435},"\u002Fshockwave-curriculum\u002Flessons\u002Fch56-wpilib-timers\u002F1-coming-soon","WPILib Timers — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch56-wpilib-timers\u002F56.1-coming-soon",{"path":437,"title":438,"stem":439},"\u002Fshockwave-curriculum\u002Flessons\u002Fch57-wpilib-triggers\u002F1-coming-soon","WPILib Triggers — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch57-wpilib-triggers\u002F57.1-coming-soon",{"path":441,"title":442,"stem":443},"\u002Fshockwave-curriculum\u002Flessons\u002Fch58-vendor-units-and-conversions\u002F1-coming-soon","Vendor Units & Conversions — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch58-vendor-units-and-conversions\u002F58.1-coming-soon",[445,449,453,457,461,465,469,473,477,481,485,489,493,497,501,505,509,513,517,521,525,529,533,537,541,545,549,553,557,561,565,569,573,577,581,585,589,593,597,601,605,609,613,617,621,625,629,633,637,641,645,649,653,657,661,665,669,673,677,681,685,689,693,697,701,705,709,713,717,721,725,729,733,737,741,745,749],{"path":446,"title":447,"stem":448},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming and Compilers — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":450,"title":451,"stem":452},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F1-variables-and-data-types","Variables & Data Types — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.1-variables-and-data-types",{"path":454,"title":455,"stem":456},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2-expressions-and-output","Expressions & Output — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.2-expressions-and-output",{"path":458,"title":459,"stem":460},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F3-assignment-and-input","Assignment & Input — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.3-assignment-and-input",{"path":462,"title":463,"stem":464},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F4-casting-and-ranges-of-values","Casting & Ranges of Values — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.4-casting-and-ranges-of-values",{"path":466,"title":467,"stem":468},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F5-compound-assignment-operators","Compound Assignment Operators — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.5-compound-assignment-operators",{"path":470,"title":471,"stem":472},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F1-apis-and-libraries","APIs and Libraries — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3.1-apis-and-libraries",{"path":474,"title":475,"stem":476},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F2-documentation-with-comments-and-preconditions","Documentation with Comments and Preconditions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3.2-documentation-with-comments-and-preconditions",{"path":478,"title":479,"stem":480},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3-packages-and-imports","Packages & Imports — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3.3-packages-and-imports",{"path":482,"title":483,"stem":484},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F1-methods-signatures-and-parameters","Methods, Signatures & Parameters — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters",{"path":486,"title":487,"stem":488},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F2-calling-class-methods","Calling Class Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.2-calling-class-methods",{"path":490,"title":491,"stem":492},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F3-using-the-math-class","Using the Math Class — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.3-using-the-math-class",{"path":494,"title":495,"stem":496},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4-objects-instances-of-classes","Objects — Instances of Classes — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.4-objects-instances-of-classes",{"path":498,"title":499,"stem":500},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F5-creating-and-initializing-objects-constructors","Creating & Initializing Objects: Constructors — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.5-creating-and-initializing-objects-constructors",{"path":502,"title":503,"stem":504},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F6-calling-instance-methods","Calling Instance Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.6-calling-instance-methods",{"path":506,"title":507,"stem":508},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F1-5.2-if-statements-and-for-loops","if Statements & For Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.1-5.2-if-statements-and-for-loops",{"path":510,"title":511,"stem":512},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":514,"title":515,"stem":516},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F11-informal-runtime-analysis-of-loops","Informal Runtime Analysis of Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.11-informal-runtime-analysis-of-loops",{"path":518,"title":519,"stem":520},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F12-switch-statements-and-expressions","switch Statements and Expressions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.12-switch-statements-and-expressions",{"path":522,"title":523,"stem":524},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F3-algorithms-with-selection-and-repetition","Algorithms with Selection and Repetition — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.3-algorithms-with-selection-and-repetition",{"path":526,"title":527,"stem":528},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":530,"title":531,"stem":532},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5-nested-if-statements","Nested if Statements — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.5-nested-if-statements",{"path":534,"title":535,"stem":536},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F6-compound-boolean-expressions","Compound Boolean Expressions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.6-compound-boolean-expressions",{"path":538,"title":539,"stem":540},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F7-comparing-boolean-expressions-de-morgans-laws","Comparing Boolean Expressions (De Morgan's Laws) — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.7-comparing-boolean-expressions-de-morgans-laws",{"path":542,"title":543,"stem":544},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F8-while-loops","While Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.8-while-loops",{"path":546,"title":547,"stem":548},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F9-implementing-selection-and-iteration-algorithms","Implementing Selection and Iteration Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.9-implementing-selection-and-iteration-algorithms",{"path":550,"title":551,"stem":552},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F1-strings","Strings — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F6.1-strings",{"path":554,"title":555,"stem":556},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F2-string-algorithms","String Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F6.2-string-algorithms",{"path":558,"title":559,"stem":560},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F1-anatomy-of-a-java-class","Anatomy of a Java Class — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class",{"path":562,"title":563,"stem":564},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F2-methods-how-to-write-them","Methods: How to Write Them — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them",{"path":566,"title":567,"stem":568},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F3-methods-passing-and-returning-references-of-an-object","Methods: Passing & Returning References of an Object — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.3-methods-passing-and-returning-references-of-an-object",{"path":570,"title":571,"stem":572},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F4-class-static-variables-and-methods","Class (static) Variables & Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods",{"path":574,"title":575,"stem":576},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch08-constructors-and-this\u002F1-8.2-constructors-and-this","Constructors & \"this\" — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch08-constructors-and-this\u002F8.1-8.2-constructors-and-this",{"path":578,"title":579,"stem":580},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F1-array-creation-and-access","Array Creation and Access — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.1-array-creation-and-access",{"path":582,"title":583,"stem":584},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F2-arraylist-and-its-methods","ArrayList and its Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.2-arraylist-and-its-methods",{"path":586,"title":587,"stem":588},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","HashMap (Dictionary) Data Structure — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":590,"title":591,"stem":592},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":594,"title":595,"stem":596},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F5-implementing-array-algorithms","Implementing Array Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.5-implementing-array-algorithms",{"path":598,"title":599,"stem":600},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":602,"title":603,"stem":604},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F7-implementing-arraylist-algorithms","Implementing ArrayList Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms",{"path":606,"title":607,"stem":608},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F8-using-text-files","Using Text Files — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.8-using-text-files",{"path":610,"title":611,"stem":612},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F1-2d-array-creation-and-access","2D Array Creation and Access — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F10.1-2d-array-creation-and-access",{"path":614,"title":615,"stem":616},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F2-2d-array-traversals-nested-loops","2D Array Traversals: Nested Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops",{"path":618,"title":619,"stem":620},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F3-implementing-2d-array-algorithms","Implementing 2D Array Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms",{"path":622,"title":623,"stem":624},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch11-enums-named-choices\u002F11-enums-named-choices","Enums: Named Choices — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch11-enums-named-choices\u002F11-enums-named-choices",{"path":626,"title":627,"stem":628},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch","Exceptions & try\u002Fcatch — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch",{"path":630,"title":631,"stem":632},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch13-common-gotchas\u002F13-common-gotchas","Common Gotchas — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch13-common-gotchas\u002F13-common-gotchas",{"path":634,"title":635,"stem":636},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch15-advanced-collections\u002F15-advanced-collections","Advanced Collections (Set\u002FQueue\u002FMap) — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch15-advanced-collections\u002F15-advanced-collections",{"path":638,"title":639,"stem":640},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics","Writing Your Own Generics — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics",{"path":642,"title":643,"stem":644},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F1-inheritance-superclass-subclass","Inheritance, Superclass, Subclass — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.1-inheritance-superclass-subclass",{"path":646,"title":647,"stem":648},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F2-inheritance-and-constructors","Inheritance and Constructors — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.2-inheritance-and-constructors",{"path":650,"title":651,"stem":652},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F3-inheritance-hierarchies","Inheritance Hierarchies — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.3-inheritance-hierarchies",{"path":654,"title":655,"stem":656},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F4-object-superclass","Object Superclass — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.4-object-superclass",{"path":658,"title":659,"stem":660},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F5-abstract-classes-and-methods","Abstract Classes and Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.5-abstract-classes-and-methods",{"path":662,"title":663,"stem":664},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F1-overriding-methods","Overriding Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F18.1-overriding-methods",{"path":666,"title":667,"stem":668},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F2-super-keyword","super Keyword — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F18.2-super-keyword",{"path":670,"title":671,"stem":672},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F3-polymorphism","Polymorphism — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F18.3-polymorphism",{"path":674,"title":675,"stem":676},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts","Interfaces as Contracts — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts",{"path":678,"title":679,"stem":680},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch19-interfaces-as-contracts\u002F1-lambdas-and-method-references","Lambdas & Method References — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch19-interfaces-as-contracts\u002F19.1-lambdas-and-method-references",{"path":682,"title":683,"stem":684},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern","The IO-Layer Pattern — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern",{"path":686,"title":687,"stem":688},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch21-static-factories\u002F21-static-factories","Static Factories — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch21-static-factories\u002F21-static-factories",{"path":690,"title":691,"stem":692},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern","The Builder Pattern — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern",{"path":694,"title":695,"stem":696},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch23-encapsulation-and-final\u002F1-scope-and-access","Access, final, and Immutability — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch23-encapsulation-and-final\u002F23.1-scope-and-access",{"path":698,"title":699,"stem":700},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions","Optional: Avoiding Null Pointer Exceptions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions",{"path":702,"title":703,"stem":704},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F1-what-is-command-based-programming","What Is Command-Based Programming? — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.1-what-is-command-based-programming",{"path":706,"title":707,"stem":708},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F2-commands-and-command-compositions","Commands & Command Compositions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.2-commands-and-command-compositions",{"path":710,"title":711,"stem":712},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F3-the-command-scheduler","The Command Scheduler — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.3-the-command-scheduler",{"path":714,"title":715,"stem":716},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F4-state-machines-logic","State Machines: Logic — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.4-state-machines-logic",{"path":718,"title":719,"stem":720},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F5-managing-transitions","Managing Transitions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.5-managing-transitions",{"path":722,"title":723,"stem":724},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F6-binding-commands-to-triggers","Binding Commands to Triggers — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.6-binding-commands-to-triggers",{"path":726,"title":727,"stem":728},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F7-structuring-a-command-based-robot-project","Structuring a Command-Based Robot Project — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.7-structuring-a-command-based-robot-project",{"path":730,"title":731,"stem":732},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways","Architecture Takeaways — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways",{"path":734,"title":735,"stem":736},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch27-program-design-and-abstraction\u002F1-abstraction-and-program-design","Abstraction and Program Design — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch27-program-design-and-abstraction\u002F27.1-abstraction-and-program-design",{"path":738,"title":739,"stem":740},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F1-searching-algorithms","Searching Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F28.1-searching-algorithms",{"path":742,"title":743,"stem":744},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F2-sorting-algorithms","Sorting Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F28.2-sorting-algorithms",{"path":746,"title":747,"stem":748},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F3-recursion","Recursion — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F28.3-recursion",{"path":750,"title":751,"stem":752},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F4-recursive-searching-and-sorting","Recursive Searching and Sorting — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F28.4-recursive-searching-and-sorting",[754,758,762,766,770,774,778,782,786,790,794,798,802,806,810,814,818,822,826,830,834,838,842,846,850,854,858,862,866,870,874,878,882,886,890,894,898,902,906,910,914,918,922,926,930,934,938,942,946,950,954,958,962,966,970,974,978,982,986,990,994,998,1002,1006,1010,1014,1018,1022,1026,1030,1034,1038,1042,1046,1050,1054,1058,1062,1066],{"path":755,"title":756,"stem":757},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming and Compilers — Exercises","shockwave-curriculum\u002Fexercises\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":759,"title":760,"stem":761},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F1-variables-and-data-types","Variables & Data Types — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.1-variables-and-data-types",{"path":763,"title":764,"stem":765},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2-expressions-and-output","Expressions & Output — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.2-expressions-and-output",{"path":767,"title":768,"stem":769},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F3-assignment-and-input","Assignment & Input — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.3-assignment-and-input",{"path":771,"title":772,"stem":773},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F4-casting-and-ranges-of-values","Casting & Ranges of Values — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.4-casting-and-ranges-of-values",{"path":775,"title":776,"stem":777},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F5-compound-assignment-operators","Compound Assignment Operators — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.5-compound-assignment-operators",{"path":779,"title":780,"stem":781},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F1-apis-and-libraries","APIs and Libraries — Exercises","shockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3.1-apis-and-libraries",{"path":783,"title":784,"stem":785},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F2-documentation-with-comments-and-preconditions","Documentation with Comments and Preconditions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3.2-documentation-with-comments-and-preconditions",{"path":787,"title":788,"stem":789},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3-packages-and-imports","Packages & Imports — Exercises","shockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3.3-packages-and-imports",{"path":791,"title":792,"stem":793},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F1-methods-signatures-and-parameters","Methods, Signatures & Parameters — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters",{"path":795,"title":796,"stem":797},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F2-calling-class-methods","Calling Class Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.2-calling-class-methods",{"path":799,"title":800,"stem":801},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F3-using-the-math-class","Using the Math Class — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.3-using-the-math-class",{"path":803,"title":804,"stem":805},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4-objects-instances-of-classes","Objects — Instances of Classes — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.4-objects-instances-of-classes",{"path":807,"title":808,"stem":809},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F5-creating-and-initializing-objects-constructors","Creating & Initializing Objects: Constructors — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.5-creating-and-initializing-objects-constructors",{"path":811,"title":812,"stem":813},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F6-calling-instance-methods","Calling Instance Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.6-calling-instance-methods",{"path":815,"title":816,"stem":817},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F1-5.2-if-statements-and-for-loops","if Statements & For Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.1-5.2-if-statements-and-for-loops",{"path":819,"title":820,"stem":821},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":823,"title":824,"stem":825},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F11-informal-runtime-analysis-of-loops","Informal Runtime Analysis of Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.11-informal-runtime-analysis-of-loops",{"path":827,"title":828,"stem":829},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F12-switch-statements-and-expressions","switch Statements and Expressions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.12-switch-statements-and-expressions",{"path":831,"title":832,"stem":833},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F3-algorithms-with-selection-and-repetition","Algorithms with Selection and Repetition — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.3-algorithms-with-selection-and-repetition",{"path":835,"title":836,"stem":837},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":839,"title":840,"stem":841},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5-nested-if-statements","Nested if Statements — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.5-nested-if-statements",{"path":843,"title":844,"stem":845},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F6-compound-boolean-expressions","Compound Boolean Expressions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.6-compound-boolean-expressions",{"path":847,"title":848,"stem":849},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F7-comparing-boolean-expressions-de-morgans-laws","Comparing Boolean Expressions (De Morgan's Laws) — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.7-comparing-boolean-expressions-de-morgans-laws",{"path":851,"title":852,"stem":853},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F8-while-loops","While Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.8-while-loops",{"path":855,"title":856,"stem":857},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F9-implementing-selection-and-iteration-algorithms","Implementing Selection and Iteration Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.9-implementing-selection-and-iteration-algorithms",{"path":859,"title":860,"stem":861},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F1-strings","Strings — Exercises","shockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F6.1-strings",{"path":863,"title":864,"stem":865},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F2-string-algorithms","String Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F6.2-string-algorithms",{"path":867,"title":868,"stem":869},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F1-anatomy-of-a-java-class","Anatomy of a Java Class — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class",{"path":871,"title":872,"stem":873},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F2-methods-how-to-write-them","Methods: How to Write Them — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them",{"path":875,"title":876,"stem":877},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F3-methods-passing-and-returning-references-of-an-object","Methods: Passing & Returning References of an Object — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.3-methods-passing-and-returning-references-of-an-object",{"path":879,"title":880,"stem":881},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F4-class-static-variables-and-methods","Class (static) Variables & Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods",{"path":883,"title":884,"stem":885},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch08-constructors-and-this\u002F1-8.2-constructors-and-this","Constructors & \"this\" — Exercises","shockwave-curriculum\u002Fexercises\u002Fch08-constructors-and-this\u002F8.1-8.2-constructors-and-this",{"path":887,"title":888,"stem":889},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F1-array-creation-and-access","Array Creation and Access — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.1-array-creation-and-access",{"path":891,"title":892,"stem":893},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F2-arraylist-and-its-methods","ArrayList and its Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.2-arraylist-and-its-methods",{"path":895,"title":896,"stem":897},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","HashMap (Dictionary) Data Structure — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":899,"title":900,"stem":901},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":903,"title":904,"stem":905},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F5-implementing-array-algorithms","Implementing Array Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.5-implementing-array-algorithms",{"path":907,"title":908,"stem":909},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":911,"title":912,"stem":913},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F7-implementing-arraylist-algorithms","Implementing ArrayList Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms",{"path":915,"title":916,"stem":917},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F8-using-text-files","Using Text Files — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.8-using-text-files",{"path":919,"title":920,"stem":921},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F1-2d-array-creation-and-access","2D Array Creation and Access — Exercises","shockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F10.1-2d-array-creation-and-access",{"path":923,"title":924,"stem":925},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F2-2d-array-traversals-nested-loops","2D Array Traversals: Nested Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops",{"path":927,"title":928,"stem":929},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F3-implementing-2d-array-algorithms","Implementing 2D Array Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms",{"path":931,"title":932,"stem":933},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch11-enums-named-choices\u002F11-enums-named-choices","Enums: Named Choices — Exercises","shockwave-curriculum\u002Fexercises\u002Fch11-enums-named-choices\u002F11-enums-named-choices",{"path":935,"title":936,"stem":937},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch","Exceptions & try\u002Fcatch — Exercises","shockwave-curriculum\u002Fexercises\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch",{"path":939,"title":940,"stem":941},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch13-common-gotchas\u002F13-common-gotchas","Common Gotchas — Exercises","shockwave-curriculum\u002Fexercises\u002Fch13-common-gotchas\u002F13-common-gotchas",{"path":943,"title":944,"stem":945},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch14-why-design-patterns\u002F14-why-design-patterns","Why Design Patterns? — Exercises","shockwave-curriculum\u002Fexercises\u002Fch14-why-design-patterns\u002F14-why-design-patterns",{"path":947,"title":948,"stem":949},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch15-advanced-collections\u002F15-advanced-collections","Advanced Collections (Set\u002FQueue\u002FMap) — Exercises","shockwave-curriculum\u002Fexercises\u002Fch15-advanced-collections\u002F15-advanced-collections",{"path":951,"title":952,"stem":953},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics","Writing Your Own Generics — Exercises","shockwave-curriculum\u002Fexercises\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics",{"path":955,"title":956,"stem":957},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F1-inheritance-superclass-subclass","Inheritance, Superclass, Subclass — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.1-inheritance-superclass-subclass",{"path":959,"title":960,"stem":961},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F2-inheritance-and-constructors","Inheritance and Constructors — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.2-inheritance-and-constructors",{"path":963,"title":964,"stem":965},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F3-inheritance-hierarchies","Inheritance Hierarchies — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.3-inheritance-hierarchies",{"path":967,"title":968,"stem":969},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F4-object-superclass","Object Superclass — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.4-object-superclass",{"path":971,"title":972,"stem":973},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F5-abstract-classes-and-methods","Abstract Classes and Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.5-abstract-classes-and-methods",{"path":975,"title":976,"stem":977},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F1-overriding-methods","Overriding Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F18.1-overriding-methods",{"path":979,"title":980,"stem":981},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F2-super-keyword","super Keyword — Exercises","shockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F18.2-super-keyword",{"path":983,"title":984,"stem":985},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F3-polymorphism","Polymorphism — Exercises","shockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F18.3-polymorphism",{"path":987,"title":988,"stem":989},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts","Interfaces as Contracts — Exercises","shockwave-curriculum\u002Fexercises\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts",{"path":991,"title":992,"stem":993},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch19-interfaces-as-contracts\u002F1-lambdas-and-method-references","Lambdas & Method References — Exercises","shockwave-curriculum\u002Fexercises\u002Fch19-interfaces-as-contracts\u002F19.1-lambdas-and-method-references",{"path":995,"title":996,"stem":997},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern","The IO-Layer Pattern — Exercises","shockwave-curriculum\u002Fexercises\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern",{"path":999,"title":1000,"stem":1001},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch21-static-factories\u002F21-static-factories","Static Factories — Exercises","shockwave-curriculum\u002Fexercises\u002Fch21-static-factories\u002F21-static-factories",{"path":1003,"title":1004,"stem":1005},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern","The Builder Pattern — Exercises","shockwave-curriculum\u002Fexercises\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern",{"path":1007,"title":1008,"stem":1009},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch23-encapsulation-and-final\u002F1-scope-and-access","Access, final, and Immutability — Exercises","shockwave-curriculum\u002Fexercises\u002Fch23-encapsulation-and-final\u002F23.1-scope-and-access",{"path":1011,"title":1012,"stem":1013},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions","Optional: Avoiding Null Pointer Exceptions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions",{"path":1015,"title":1016,"stem":1017},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F1-what-is-command-based-programming","What Is Command-Based Programming? — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.1-what-is-command-based-programming",{"path":1019,"title":1020,"stem":1021},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F2-commands-and-command-compositions","Commands & Command Compositions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.2-commands-and-command-compositions",{"path":1023,"title":1024,"stem":1025},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F3-the-command-scheduler","The Command Scheduler — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.3-the-command-scheduler",{"path":1027,"title":1028,"stem":1029},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F4-state-machines-logic","State Machines: Logic — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.4-state-machines-logic",{"path":1031,"title":1032,"stem":1033},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F5-managing-transitions","Managing Transitions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.5-managing-transitions",{"path":1035,"title":1036,"stem":1037},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F6-binding-commands-to-triggers","Binding Commands to Triggers — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.6-binding-commands-to-triggers",{"path":1039,"title":1040,"stem":1041},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F7-structuring-a-command-based-robot-project","Structuring a Command-Based Robot Project — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.7-structuring-a-command-based-robot-project",{"path":1043,"title":1044,"stem":1045},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways","Architecture Takeaways — Exercises","shockwave-curriculum\u002Fexercises\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways",{"path":1047,"title":1048,"stem":1049},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch27-program-design-and-abstraction\u002F1-abstraction-and-program-design","Abstraction and Program Design — Exercises","shockwave-curriculum\u002Fexercises\u002Fch27-program-design-and-abstraction\u002F27.1-abstraction-and-program-design",{"path":1051,"title":1052,"stem":1053},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch27-program-design-and-abstraction\u002F2-impact-of-program-design","Impact of Program Design — Exercises","shockwave-curriculum\u002Fexercises\u002Fch27-program-design-and-abstraction\u002F27.2-impact-of-program-design",{"path":1055,"title":1056,"stem":1057},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F1-searching-algorithms","Searching Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F28.1-searching-algorithms",{"path":1059,"title":1060,"stem":1061},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F2-sorting-algorithms","Sorting Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F28.2-sorting-algorithms",{"path":1063,"title":1064,"stem":1065},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F3-recursion","Recursion — Exercises","shockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F28.3-recursion",{"path":1067,"title":1068,"stem":1069},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F4-recursive-searching-and-sorting","Recursive Searching and Sorting — Exercises","shockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F28.4-recursive-searching-and-sorting",{"id":1071,"title":166,"body":1072,"description":1469,"extension":1470,"meta":1471,"navigation":1474,"path":165,"seo":1475,"stem":167,"__hash__":1476},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms.md",{"type":1073,"value":1074,"toc":1459},"minimark",[1075,1079,1103,1108,1173,1184,1197,1249,1260,1306,1310,1313,1333,1337,1397,1401,1444,1455],[1076,1077,166],"h1",{"id":1078},"implementing-arraylist-algorithms",[1080,1081,1082,1083,1087,1088,1091,1092,1095,1096,1091,1099,1102],"p",{},"Every pattern from Lesson 9.5 (sum\u002Faverage, min\u002Fmax, search, property checks, duplicates, reversing) applies to ",[1084,1085,1086],"code",{},"ArrayList"," too — just swap ",[1084,1089,1090],{},"[i]","\u002F",[1084,1093,1094],{},".length"," for ",[1084,1097,1098],{},"get(i)",[1084,1100,1101],{},".size()",".",[1104,1105,1107],"h2",{"id":1106},"min-max-average","Min \u002F Max \u002F Average",[1109,1110,1115],"pre",{"className":1111,"code":1112,"language":1113,"meta":1114,"style":1114},"language-java shiki shiki-themes github-light github-dark","public static double average(ArrayList\u003CDouble> nums)\n{\n    double sum = 0;\n    for (int i = 0; i \u003C nums.size(); i++)\n    {\n        sum += nums.get(i);\n    }\n    return sum \u002F nums.size();\n}\n","java","",[1084,1116,1117,1125,1131,1137,1143,1149,1155,1161,1167],{"__ignoreMap":1114},[1118,1119,1122],"span",{"class":1120,"line":1121},"line",1,[1118,1123,1124],{},"public static double average(ArrayList\u003CDouble> nums)\n",[1118,1126,1128],{"class":1120,"line":1127},2,[1118,1129,1130],{},"{\n",[1118,1132,1134],{"class":1120,"line":1133},3,[1118,1135,1136],{},"    double sum = 0;\n",[1118,1138,1140],{"class":1120,"line":1139},4,[1118,1141,1142],{},"    for (int i = 0; i \u003C nums.size(); i++)\n",[1118,1144,1146],{"class":1120,"line":1145},5,[1118,1147,1148],{},"    {\n",[1118,1150,1152],{"class":1120,"line":1151},6,[1118,1153,1154],{},"        sum += nums.get(i);\n",[1118,1156,1158],{"class":1120,"line":1157},7,[1118,1159,1160],{},"    }\n",[1118,1162,1164],{"class":1120,"line":1163},8,[1118,1165,1166],{},"    return sum \u002F nums.size();\n",[1118,1168,1170],{"class":1120,"line":1169},9,[1118,1171,1172],{},"}\n",[1104,1174,1176,1177,1180,1181],{"id":1175},"duplicates-use-equals-not","Duplicates — Use ",[1084,1178,1179],{},".equals()",", Not ",[1084,1182,1183],{},"==",[1080,1185,1186,1187,1190,1191,1193,1194,1196],{},"For ",[1084,1188,1189],{},"ArrayList\u003CInteger>"," (or any object type), comparing with ",[1084,1192,1183],{}," checks identity, not value — use ",[1084,1195,1179],{}," instead:",[1109,1198,1200],{"className":1111,"code":1199,"language":1113,"meta":1114,"style":1114},"for (int i = 0; i \u003C nums.size(); i++)\n{\n    for (int j = i + 1; j \u003C nums.size(); j++)\n    {\n        if (nums.get(i).equals(nums.get(j))) \u002F\u002F .equals(), not ==\n        {\n            return true;\n        }\n    }\n}\n",[1084,1201,1202,1207,1211,1216,1220,1225,1230,1235,1240,1244],{"__ignoreMap":1114},[1118,1203,1204],{"class":1120,"line":1121},[1118,1205,1206],{},"for (int i = 0; i \u003C nums.size(); i++)\n",[1118,1208,1209],{"class":1120,"line":1127},[1118,1210,1130],{},[1118,1212,1213],{"class":1120,"line":1133},[1118,1214,1215],{},"    for (int j = i + 1; j \u003C nums.size(); j++)\n",[1118,1217,1218],{"class":1120,"line":1139},[1118,1219,1148],{},[1118,1221,1222],{"class":1120,"line":1145},[1118,1223,1224],{},"        if (nums.get(i).equals(nums.get(j))) \u002F\u002F .equals(), not ==\n",[1118,1226,1227],{"class":1120,"line":1151},[1118,1228,1229],{},"        {\n",[1118,1231,1232],{"class":1120,"line":1157},[1118,1233,1234],{},"            return true;\n",[1118,1236,1237],{"class":1120,"line":1163},[1118,1238,1239],{},"        }\n",[1118,1241,1242],{"class":1120,"line":1169},[1118,1243,1160],{},[1118,1245,1247],{"class":1120,"line":1246},10,[1118,1248,1172],{},[1104,1250,1252,1253,1091,1256,1259],{"id":1251},"rotating-in-place-with-getset","Rotating (In Place, with ",[1084,1254,1255],{},"get",[1084,1257,1258],{},"set",")",[1109,1261,1263],{"className":1111,"code":1262,"language":1113,"meta":1114,"style":1114},"public static void rotateRight(ArrayList\u003CDouble> nums)\n{\n    double last = nums.get(nums.size() - 1);\n    for (int i = nums.size() - 1; i > 0; i--)\n    {\n        nums.set(i, nums.get(i - 1));\n    }\n    nums.set(0, last);\n}\n",[1084,1264,1265,1270,1274,1279,1284,1288,1293,1297,1302],{"__ignoreMap":1114},[1118,1266,1267],{"class":1120,"line":1121},[1118,1268,1269],{},"public static void rotateRight(ArrayList\u003CDouble> nums)\n",[1118,1271,1272],{"class":1120,"line":1127},[1118,1273,1130],{},[1118,1275,1276],{"class":1120,"line":1133},[1118,1277,1278],{},"    double last = nums.get(nums.size() - 1);\n",[1118,1280,1281],{"class":1120,"line":1139},[1118,1282,1283],{},"    for (int i = nums.size() - 1; i > 0; i--)\n",[1118,1285,1286],{"class":1120,"line":1145},[1118,1287,1148],{},[1118,1289,1290],{"class":1120,"line":1151},[1118,1291,1292],{},"        nums.set(i, nums.get(i - 1));\n",[1118,1294,1295],{"class":1120,"line":1157},[1118,1296,1160],{},[1118,1298,1299],{"class":1120,"line":1163},[1118,1300,1301],{},"    nums.set(0, last);\n",[1118,1303,1304],{"class":1120,"line":1169},[1118,1305,1172],{},[1104,1307,1309],{"id":1308},"parallel-arraylists","Parallel ArrayLists",[1080,1311,1312],{},"Same idea as parallel arrays (Ch.9.1) — two lists kept in sync by index:",[1109,1314,1316],{"className":1111,"code":1315,"language":1113,"meta":1114,"style":1114},"ArrayList\u003CString> autoNames = new ArrayList\u003CString>();\nArrayList\u003CDouble> autoTimes = new ArrayList\u003CDouble>();\n\u002F\u002F autoTimes.get(i) is the recorded time for autoNames.get(i)\n",[1084,1317,1318,1323,1328],{"__ignoreMap":1114},[1118,1319,1320],{"class":1120,"line":1121},[1118,1321,1322],{},"ArrayList\u003CString> autoNames = new ArrayList\u003CString>();\n",[1118,1324,1325],{"class":1120,"line":1127},[1118,1326,1327],{},"ArrayList\u003CDouble> autoTimes = new ArrayList\u003CDouble>();\n",[1118,1329,1330],{"class":1120,"line":1133},[1118,1331,1332],{},"\u002F\u002F autoTimes.get(i) is the recorded time for autoNames.get(i)\n",[1104,1334,1336],{"id":1335},"common-pitfalls","Common Pitfalls",[1338,1339,1340,1367,1388],"ul",{},[1341,1342,1343,1352,1353,1356,1357,1360,1361,1363,1364,1366],"li",{},[1344,1345,1346,1347,1349,1350,1102],"strong",{},"Comparing objects with ",[1084,1348,1183],{}," instead of ",[1084,1351,1179],{}," This is the single most common ArrayList-specific mistake — ",[1084,1354,1355],{},"nums.get(i) == nums.get(j)"," checks whether they're the same object, which is unreliable even for boxed ",[1084,1358,1359],{},"Integer","s. It's especially deceptive here: Java caches small ",[1084,1362,1359],{}," values (-128 to 127), so ",[1084,1365,1183],{}," can look like it \"works\" for small test values and then quietly fail once real data includes anything larger (Ch.9.2).",[1341,1368,1369,1376,1377,1380,1381,1383,1384,1091,1386,1102],{},[1344,1370,1371,1372,1375],{},"Using array syntax (",[1084,1373,1374],{},"[]",") out of habit."," ",[1084,1378,1379],{},"nums[i]"," doesn't compile on an ",[1084,1382,1086],{}," — it's always ",[1084,1385,1255],{},[1084,1387,1258],{},[1341,1389,1390,1396],{},[1344,1391,1392,1393,1395],{},"Forgetting ",[1084,1394,1101],{}," changes as you add\u002Fremove."," A loop bound computed once before a series of removals can end up stale.",[1104,1398,1400],{"id":1399},"key-takeaways","Key Takeaways",[1338,1402,1403,1423,1438],{},[1341,1404,1405,1406,1408,1409,1091,1411,1095,1413,1091,1415,1417,1418,1091,1420,1422],{},"Every array algorithm pattern from Lesson 9.5 (accumulator, min\u002Fmax, search, property checks, duplicates, reverse) transfers directly to ",[1084,1407,1086],{}," — just swap ",[1084,1410,1090],{},[1084,1412,1094],{},[1084,1414,1098],{},[1084,1416,1101],{},". Rotating is new here, built the same way: ",[1084,1419,1255],{},[1084,1421,1258],{}," in a loop.",[1341,1424,1425,1426,1428,1429,1431,1432,1434,1435,1437],{},"Compare ",[1084,1427,1086],{}," elements with ",[1084,1430,1179],{},", not ",[1084,1433,1183],{},", when the element type is an object (including boxed numbers like ",[1084,1436,1359],{},").",[1341,1439,1440,1441,1443],{},"Parallel ",[1084,1442,1086],{},"s keep related data in sync by index, same as parallel arrays.",[1080,1445,1446,1447,1450,1451,1454],{},"Derived from ",[1084,1448,1449],{},"csawesome-2026",": ",[1084,1452,1453],{},"unit-4-data-collections\u002F4.10-implementing-arraylist-algorithms.md"," (CSA 4.10)",[1456,1457,1458],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":1114,"searchDepth":1127,"depth":1127,"links":1460},[1461,1462,1464,1466,1467,1468],{"id":1106,"depth":1127,"text":1107},{"id":1175,"depth":1127,"text":1463},"Duplicates — Use .equals(), Not ==",{"id":1251,"depth":1127,"text":1465},"Rotating (In Place, with get\u002Fset)",{"id":1308,"depth":1127,"text":1309},{"id":1335,"depth":1127,"text":1336},{"id":1399,"depth":1127,"text":1400},"Every pattern from Lesson 9.5 (sum\u002Faverage, min\u002Fmax, search, property checks, duplicates, reversing) applies to ArrayList too — just swap [i]\u002F.length for get(i)\u002F.size().","md",{"outlineRef":1472,"status":1473},"9.7 — Implementing ArrayList Algorithms (CSA 4.10)","new — authored lesson (fuller depth than the teaser slide)",true,{"title":166,"description":1469},"3BPi5bH1WtJ9jziIOQZyyRJW8wo3Ik_sEhy2PwTu9lw",{"id":1478,"title":603,"body":1479,"description":1114,"extension":1470,"meta":1927,"navigation":1474,"path":602,"seo":1930,"stem":604,"__hash__":1931},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms.md",{"type":1073,"value":1480,"toc":1918},[1481,1484,1488,1491,1495,1510,1559,1578,1582,1594,1639,1648,1654,1669,1741,1750,1754,1774,1843,1863,1878,1882,1916],[1076,1482,603],{"id":1483},"implementing-arraylist-algorithms-worked-example",[1104,1485,1487],{"id":1486},"problem","Problem",[1080,1489,1490],{},"Across this season's events, track the ranking points earned at each one. Compute the average, check whether any two events earned the exact same number of points, and rotate the list right by one so the most recent event displays first — keeping a parallel list of event names in sync the whole time.",[1104,1492,1494],{"id":1493},"step-1-plan-it-first","Step 1: Plan It First",[1496,1497,1498,1501,1504,1507],"ol",{},[1341,1499,1500],{},"Store ranking points per event, and the matching event names alongside them.",[1341,1502,1503],{},"Compute the average.",[1341,1505,1506],{},"Check for two events with the exact same points total.",[1341,1508,1509],{},"Rotate both lists right by one, in sync.",[1109,1511,1513],{"className":1111,"code":1512,"language":1113,"meta":1114,"style":1114},"ArrayList\u003CString> eventNames = new ArrayList\u003CString>();\neventNames.add(\"Week 1\");\neventNames.add(\"Week 3\");\neventNames.add(\"District Champs\");\n\nArrayList\u003CInteger> rankingPoints = new ArrayList\u003CInteger>();\nrankingPoints.add(18);\nrankingPoints.add(24);\nrankingPoints.add(18);\n",[1084,1514,1515,1520,1525,1530,1535,1540,1545,1550,1555],{"__ignoreMap":1114},[1118,1516,1517],{"class":1120,"line":1121},[1118,1518,1519],{},"ArrayList\u003CString> eventNames = new ArrayList\u003CString>();\n",[1118,1521,1522],{"class":1120,"line":1127},[1118,1523,1524],{},"eventNames.add(\"Week 1\");\n",[1118,1526,1527],{"class":1120,"line":1133},[1118,1528,1529],{},"eventNames.add(\"Week 3\");\n",[1118,1531,1532],{"class":1120,"line":1139},[1118,1533,1534],{},"eventNames.add(\"District Champs\");\n",[1118,1536,1537],{"class":1120,"line":1145},[1118,1538,1539],{"emptyLinePlaceholder":1474},"\n",[1118,1541,1542],{"class":1120,"line":1151},[1118,1543,1544],{},"ArrayList\u003CInteger> rankingPoints = new ArrayList\u003CInteger>();\n",[1118,1546,1547],{"class":1120,"line":1157},[1118,1548,1549],{},"rankingPoints.add(18);\n",[1118,1551,1552],{"class":1120,"line":1163},[1118,1553,1554],{},"rankingPoints.add(24);\n",[1118,1556,1557],{"class":1120,"line":1169},[1118,1558,1549],{},[1080,1560,1561,1564,1565,1376,1568,1571,1572,1574,1575,1577],{},[1084,1562,1563],{},"rankingPoints.add(18)"," autoboxes the ",[1084,1566,1567],{},"int",[1084,1569,1570],{},"18"," into an ",[1084,1573,1359],{}," — ",[1084,1576,1086],{}," can only hold objects.",[1104,1579,1581],{"id":1580},"step-2-average","Step 2: Average",[1080,1583,1584,1585,1091,1587,1095,1589,1091,1591,1593],{},"Every pattern from Lesson 9.5 applies here too — just swap ",[1084,1586,1090],{},[1084,1588,1094],{},[1084,1590,1098],{},[1084,1592,1101],{},":",[1109,1595,1597],{"className":1111,"code":1596,"language":1113,"meta":1114,"style":1114},"public static double average(ArrayList\u003CInteger> points)\n{\n    double sum = 0;\n    for (int i = 0; i \u003C points.size(); i++)\n    {\n        sum += points.get(i);\n    }\n    return sum \u002F points.size();\n}\n",[1084,1598,1599,1604,1608,1612,1617,1621,1626,1630,1635],{"__ignoreMap":1114},[1118,1600,1601],{"class":1120,"line":1121},[1118,1602,1603],{},"public static double average(ArrayList\u003CInteger> points)\n",[1118,1605,1606],{"class":1120,"line":1127},[1118,1607,1130],{},[1118,1609,1610],{"class":1120,"line":1133},[1118,1611,1136],{},[1118,1613,1614],{"class":1120,"line":1139},[1118,1615,1616],{},"    for (int i = 0; i \u003C points.size(); i++)\n",[1118,1618,1619],{"class":1120,"line":1145},[1118,1620,1148],{},[1118,1622,1623],{"class":1120,"line":1151},[1118,1624,1625],{},"        sum += points.get(i);\n",[1118,1627,1628],{"class":1120,"line":1157},[1118,1629,1160],{},[1118,1631,1632],{"class":1120,"line":1163},[1118,1633,1634],{},"    return sum \u002F points.size();\n",[1118,1636,1637],{"class":1120,"line":1169},[1118,1638,1172],{},[1109,1640,1642],{"className":1111,"code":1641,"language":1113,"meta":1114,"style":1114},"System.out.println(average(rankingPoints)); \u002F\u002F 20.0\n",[1084,1643,1644],{"__ignoreMap":1114},[1118,1645,1646],{"class":1120,"line":1121},[1118,1647,1641],{},[1104,1649,1651,1652],{"id":1650},"step-3-two-events-with-the-exact-same-points-use-equals","Step 3: Two Events With the Exact Same Points — Use ",[1084,1653,1179],{},[1080,1655,1656,1659,1660,1662,1663,1665,1666,1668],{},[1084,1657,1658],{},"rankingPoints"," holds boxed ",[1084,1661,1359],{}," objects, so comparing with ",[1084,1664,1183],{}," would check identity, not value — ",[1084,1667,1179],{}," is required instead:",[1109,1670,1672],{"className":1111,"code":1671,"language":1113,"meta":1114,"style":1114},"public static boolean hasMatchingTotal(ArrayList\u003CInteger> points)\n{\n    for (int i = 0; i \u003C points.size(); i++)\n    {\n        for (int j = i + 1; j \u003C points.size(); j++)\n        {\n            if (points.get(i).equals(points.get(j))) \u002F\u002F .equals(), not ==\n            {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n",[1084,1673,1674,1679,1683,1687,1691,1696,1700,1705,1710,1715,1720,1725,1730,1736],{"__ignoreMap":1114},[1118,1675,1676],{"class":1120,"line":1121},[1118,1677,1678],{},"public static boolean hasMatchingTotal(ArrayList\u003CInteger> points)\n",[1118,1680,1681],{"class":1120,"line":1127},[1118,1682,1130],{},[1118,1684,1685],{"class":1120,"line":1133},[1118,1686,1616],{},[1118,1688,1689],{"class":1120,"line":1139},[1118,1690,1148],{},[1118,1692,1693],{"class":1120,"line":1145},[1118,1694,1695],{},"        for (int j = i + 1; j \u003C points.size(); j++)\n",[1118,1697,1698],{"class":1120,"line":1151},[1118,1699,1229],{},[1118,1701,1702],{"class":1120,"line":1157},[1118,1703,1704],{},"            if (points.get(i).equals(points.get(j))) \u002F\u002F .equals(), not ==\n",[1118,1706,1707],{"class":1120,"line":1163},[1118,1708,1709],{},"            {\n",[1118,1711,1712],{"class":1120,"line":1169},[1118,1713,1714],{},"                return true;\n",[1118,1716,1717],{"class":1120,"line":1246},[1118,1718,1719],{},"            }\n",[1118,1721,1723],{"class":1120,"line":1722},11,[1118,1724,1239],{},[1118,1726,1728],{"class":1120,"line":1727},12,[1118,1729,1160],{},[1118,1731,1733],{"class":1120,"line":1732},13,[1118,1734,1735],{},"    return false;\n",[1118,1737,1739],{"class":1120,"line":1738},14,[1118,1740,1172],{},[1109,1742,1744],{"className":1111,"code":1743,"language":1113,"meta":1114,"style":1114},"System.out.println(hasMatchingTotal(rankingPoints)); \u002F\u002F true — Week 1 and District Champs both earned 18\n",[1084,1745,1746],{"__ignoreMap":1114},[1118,1747,1748],{"class":1120,"line":1121},[1118,1749,1743],{},[1104,1751,1753],{"id":1752},"step-4-rotate-both-lists-right-by-one-in-sync","Step 4: Rotate Both Lists Right by One, In Sync",[1080,1755,1756,1759,1760,1762,1763,1574,1766,1769,1770,1773],{},[1084,1757,1758],{},"eventNames"," and ",[1084,1761,1658],{}," are ",[1344,1764,1765],{},"parallel ArrayLists",[1084,1767,1768],{},"rankingPoints.get(i)"," is the points total for ",[1084,1771,1772],{},"eventNames.get(i)",". Rotating one without the other would break that pairing, so both need the identical rotation:",[1109,1775,1777],{"className":1111,"code":1776,"language":1113,"meta":1114,"style":1114},"public static void rotateRight(ArrayList\u003CString> names, ArrayList\u003CInteger> points)\n{\n    String lastName = names.get(names.size() - 1);\n    int lastPoints = points.get(points.size() - 1);\n\n    for (int i = names.size() - 1; i > 0; i--)\n    {\n        names.set(i, names.get(i - 1));\n        points.set(i, points.get(i - 1));\n    }\n\n    names.set(0, lastName);\n    points.set(0, lastPoints);\n}\n",[1084,1778,1779,1784,1788,1793,1798,1802,1807,1811,1816,1821,1825,1829,1834,1839],{"__ignoreMap":1114},[1118,1780,1781],{"class":1120,"line":1121},[1118,1782,1783],{},"public static void rotateRight(ArrayList\u003CString> names, ArrayList\u003CInteger> points)\n",[1118,1785,1786],{"class":1120,"line":1127},[1118,1787,1130],{},[1118,1789,1790],{"class":1120,"line":1133},[1118,1791,1792],{},"    String lastName = names.get(names.size() - 1);\n",[1118,1794,1795],{"class":1120,"line":1139},[1118,1796,1797],{},"    int lastPoints = points.get(points.size() - 1);\n",[1118,1799,1800],{"class":1120,"line":1145},[1118,1801,1539],{"emptyLinePlaceholder":1474},[1118,1803,1804],{"class":1120,"line":1151},[1118,1805,1806],{},"    for (int i = names.size() - 1; i > 0; i--)\n",[1118,1808,1809],{"class":1120,"line":1157},[1118,1810,1148],{},[1118,1812,1813],{"class":1120,"line":1163},[1118,1814,1815],{},"        names.set(i, names.get(i - 1));\n",[1118,1817,1818],{"class":1120,"line":1169},[1118,1819,1820],{},"        points.set(i, points.get(i - 1));\n",[1118,1822,1823],{"class":1120,"line":1246},[1118,1824,1160],{},[1118,1826,1827],{"class":1120,"line":1722},[1118,1828,1539],{"emptyLinePlaceholder":1474},[1118,1830,1831],{"class":1120,"line":1727},[1118,1832,1833],{},"    names.set(0, lastName);\n",[1118,1835,1836],{"class":1120,"line":1732},[1118,1837,1838],{},"    points.set(0, lastPoints);\n",[1118,1840,1841],{"class":1120,"line":1738},[1118,1842,1172],{},[1109,1844,1846],{"className":1111,"code":1845,"language":1113,"meta":1114,"style":1114},"rotateRight(eventNames, rankingPoints);\nSystem.out.println(eventNames);    \u002F\u002F [District Champs, Week 1, Week 3]\nSystem.out.println(rankingPoints); \u002F\u002F [18, 18, 24]\n",[1084,1847,1848,1853,1858],{"__ignoreMap":1114},[1118,1849,1850],{"class":1120,"line":1121},[1118,1851,1852],{},"rotateRight(eventNames, rankingPoints);\n",[1118,1854,1855],{"class":1120,"line":1127},[1118,1856,1857],{},"System.out.println(eventNames);    \u002F\u002F [District Champs, Week 1, Week 3]\n",[1118,1859,1860],{"class":1120,"line":1133},[1118,1861,1862],{},"System.out.println(rankingPoints); \u002F\u002F [18, 18, 24]\n",[1080,1864,1865,1868,1869,1759,1872,1868,1875,1877],{},[1084,1866,1867],{},"eventNames.get(0)"," is still ",[1084,1870,1871],{},"\"District Champs\"",[1084,1873,1874],{},"rankingPoints.get(0)",[1084,1876,1570],{}," — the pairing survived the rotation because both lists were rotated the same way, in the same loop.",[1104,1879,1881],{"id":1880},"recap","Recap",[1338,1883,1884,1897,1911],{},[1341,1885,1405,1886,1408,1888,1091,1890,1095,1892,1091,1894,1896],{},[1084,1887,1086],{},[1084,1889,1090],{},[1084,1891,1094],{},[1084,1893,1098],{},[1084,1895,1101],{},". Rotating is new here, built the same way.",[1341,1898,1425,1899,1428,1901,1431,1903,1434,1905,1907,1908,1910],{},[1084,1900,1086],{},[1084,1902,1179],{},[1084,1904,1183],{},[1084,1906,1359],{}," — small values are cached, so ",[1084,1909,1183],{}," can even look right by accident, Ch.9.2).",[1341,1912,1440,1913,1915],{},[1084,1914,1086],{},"s keep related data in sync by index, same as parallel arrays — any operation that reorders one must reorder the other identically.",[1456,1917,1458],{},{"title":1114,"searchDepth":1127,"depth":1127,"links":1919},[1920,1921,1922,1923,1925,1926],{"id":1486,"depth":1127,"text":1487},{"id":1493,"depth":1127,"text":1494},{"id":1580,"depth":1127,"text":1581},{"id":1650,"depth":1127,"text":1924},"Step 3: Two Events With the Exact Same Points — Use .equals()",{"id":1752,"depth":1127,"text":1753},{"id":1880,"depth":1127,"text":1881},{"outlineRef":1472,"pairsWith":1928,"status":1929},"[`lessons\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms.md`](..\u002F..\u002Flessons\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms.md)","new — authored worked example (fully solved, walked step by step — not a problem to attempt)",{"title":603,"description":1114},"2KvWWr1MogScBsXI6oR_VhyutgrkLAkrWOcb-8R7uDI",{"id":1933,"title":912,"body":1934,"description":1114,"extension":1470,"meta":2725,"navigation":1474,"path":911,"seo":2727,"stem":913,"__hash__":2728},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms.md",{"type":1073,"value":1935,"toc":2720},[1936,1939,1943,1949,1977,1982,2015,2021,2041,2073,2077,2087,2090,2146,2151,2281,2335,2339,2345,2367,2370,2394,2402,2407,2451,2456,2585,2590,2678,2718],[1076,1937,912],{"id":1938},"implementing-arraylist-algorithms-exercises",[1104,1940,1942],{"id":1941},"multiple-choice","Multiple Choice",[1080,1944,1945,1948],{},[1344,1946,1947],{},"Question:"," What does this code print?",[1109,1950,1952],{"className":1111,"code":1951,"language":1113,"meta":1114,"style":1114},"ArrayList\u003CInteger> ids = new ArrayList\u003CInteger>();\nids.add(200);\nids.add(200);\n\nSystem.out.println(ids.get(0) == ids.get(1));\n",[1084,1953,1954,1959,1964,1968,1972],{"__ignoreMap":1114},[1118,1955,1956],{"class":1120,"line":1121},[1118,1957,1958],{},"ArrayList\u003CInteger> ids = new ArrayList\u003CInteger>();\n",[1118,1960,1961],{"class":1120,"line":1127},[1118,1962,1963],{},"ids.add(200);\n",[1118,1965,1966],{"class":1120,"line":1133},[1118,1967,1963],{},[1118,1969,1970],{"class":1120,"line":1139},[1118,1971,1539],{"emptyLinePlaceholder":1474},[1118,1973,1974],{"class":1120,"line":1145},[1118,1975,1976],{},"System.out.println(ids.get(0) == ids.get(1));\n",[1080,1978,1979],{},[1344,1980,1981],{},"Options:",[1338,1983,1984,1991,1997,2006],{},[1341,1985,1986,1987,1990],{},"A. ",[1084,1988,1989],{},"true",", guaranteed",[1341,1992,1993,1994,1990],{},"B. ",[1084,1995,1996],{},"false",[1341,1998,1999,2000,2002,2003,2005],{},"C. Not guaranteed either way — ",[1084,2001,1183],{}," on boxed ",[1084,2004,1359],{}," objects compares identity, not value",[1341,2007,2008,2009,2011,2012,2014],{},"D. This won't compile, since ",[1084,2010,1183],{}," can't be used on ",[1084,2013,1086],{}," elements",[1080,2016,2017,2020],{},[1344,2018,2019],{},"Answer:"," C",[1080,2022,2023,1376,2026,1759,2029,2032,2033,2035,2036,2038,2039,1102],{},[1344,2024,2025],{},"Why:",[1084,2027,2028],{},"ids.get(0)",[1084,2030,2031],{},"ids.get(1)"," are boxed ",[1084,2034,1359],{}," objects. ",[1084,2037,1183],{}," on objects checks whether they're the same object in memory, not whether their values match — it isn't reliable even for boxed numbers with equal values. The dependable way to compare values is ",[1084,2040,1179],{},[1338,2042,2043,2055,2064],{},[1341,2044,2045,2046,2048,2049,2051,2052,2054],{},"A is wrong — ",[1084,2047,1183],{}," comparing two separately created ",[1084,2050,1359],{}," objects isn't reliably ",[1084,2053,1989],{}," just because the underlying values match.",[1341,2056,2057,2058,2060,2061,2063],{},"B is wrong — it isn't reliably ",[1084,2059,1996],{}," either; treating ",[1084,2062,1183],{}," as dependable in either direction is the bug.",[1341,2065,2066,2067,2069,2070,2072],{},"D is wrong — ",[1084,2068,1183],{}," compiles fine on any two object references, including ",[1084,2071,1086],{}," elements; it just doesn't compare what a beginner might expect.",[1104,2074,2076],{"id":2075},"micro-parsons","Micro-Parsons",[1080,2078,2079,2082,2083,2086],{},[1344,2080,2081],{},"Problem:"," This method will live in a class alongside a ",[1084,2084,2085],{},"main"," method that creates a list of shooter RPM setpoints and calls it. These lines, once correctly ordered, form the complete method that rotates that ArrayList right by one position — the last element moves to the front, and everything else shifts right by one.",[1080,2088,2089],{},"Reorder the fragments below into a working method:",[1338,2091,2092,2098,2104,2110,2116,2122,2128,2134,2140],{},[1341,2093,2094,2095],{},"a. ",[1084,2096,2097],{},"        }",[1341,2099,2100,2101],{},"b. ",[1084,2102,2103],{},"        for (int i = rpmSetpoints.size() - 1; i > 0; i--)",[1341,2105,2106,2107],{},"c. ",[1084,2108,2109],{},"    }",[1341,2111,2112,2113],{},"d. ",[1084,2114,2115],{},"    public static void rotateRight(ArrayList\u003CDouble> rpmSetpoints)",[1341,2117,2118,2119],{},"e. ",[1084,2120,2121],{},"            rpmSetpoints.set(i, rpmSetpoints.get(i - 1));",[1341,2123,2124,2125],{},"f. ",[1084,2126,2127],{},"        double last = rpmSetpoints.get(rpmSetpoints.size() - 1);",[1341,2129,2130,2131],{},"g. ",[1084,2132,2133],{},"    {",[1341,2135,2136,2137],{},"h. ",[1084,2138,2139],{},"        rpmSetpoints.set(0, last);",[1341,2141,2142,2143],{},"i. ",[1084,2144,2145],{},"        {",[1080,2147,2148,2150],{},[1344,2149,2019],{}," d, g, f, b, i, e, a, h, c",[1109,2152,2154],{"className":1111,"code":2153,"language":1113,"meta":1114,"style":1114},"import java.util.ArrayList;\n\npublic class ShooterConfig\n{\n    public static void rotateRight(ArrayList\u003CDouble> rpmSetpoints)\n    {\n        double last = rpmSetpoints.get(rpmSetpoints.size() - 1);\n        for (int i = rpmSetpoints.size() - 1; i > 0; i--)\n        {\n            rpmSetpoints.set(i, rpmSetpoints.get(i - 1));\n        }\n        rpmSetpoints.set(0, last);\n    }\n\n    public static void main(String[] args)\n    {\n        ArrayList\u003CDouble> rpmSetpoints = new ArrayList\u003CDouble>();\n        rpmSetpoints.add(2000.0);\n        rpmSetpoints.add(3200.0);\n        rpmSetpoints.add(4100.0);\n\n        rotateRight(rpmSetpoints);\n        System.out.println(rpmSetpoints);\n    }\n}\n",[1084,2155,2156,2161,2165,2170,2174,2179,2183,2188,2193,2197,2202,2206,2211,2215,2219,2225,2230,2236,2242,2248,2254,2259,2265,2271,2276],{"__ignoreMap":1114},[1118,2157,2158],{"class":1120,"line":1121},[1118,2159,2160],{},"import java.util.ArrayList;\n",[1118,2162,2163],{"class":1120,"line":1127},[1118,2164,1539],{"emptyLinePlaceholder":1474},[1118,2166,2167],{"class":1120,"line":1133},[1118,2168,2169],{},"public class ShooterConfig\n",[1118,2171,2172],{"class":1120,"line":1139},[1118,2173,1130],{},[1118,2175,2176],{"class":1120,"line":1145},[1118,2177,2178],{},"    public static void rotateRight(ArrayList\u003CDouble> rpmSetpoints)\n",[1118,2180,2181],{"class":1120,"line":1151},[1118,2182,1148],{},[1118,2184,2185],{"class":1120,"line":1157},[1118,2186,2187],{},"        double last = rpmSetpoints.get(rpmSetpoints.size() - 1);\n",[1118,2189,2190],{"class":1120,"line":1163},[1118,2191,2192],{},"        for (int i = rpmSetpoints.size() - 1; i > 0; i--)\n",[1118,2194,2195],{"class":1120,"line":1169},[1118,2196,1229],{},[1118,2198,2199],{"class":1120,"line":1246},[1118,2200,2201],{},"            rpmSetpoints.set(i, rpmSetpoints.get(i - 1));\n",[1118,2203,2204],{"class":1120,"line":1722},[1118,2205,1239],{},[1118,2207,2208],{"class":1120,"line":1727},[1118,2209,2210],{},"        rpmSetpoints.set(0, last);\n",[1118,2212,2213],{"class":1120,"line":1732},[1118,2214,1160],{},[1118,2216,2217],{"class":1120,"line":1738},[1118,2218,1539],{"emptyLinePlaceholder":1474},[1118,2220,2222],{"class":1120,"line":2221},15,[1118,2223,2224],{},"    public static void main(String[] args)\n",[1118,2226,2228],{"class":1120,"line":2227},16,[1118,2229,1148],{},[1118,2231,2233],{"class":1120,"line":2232},17,[1118,2234,2235],{},"        ArrayList\u003CDouble> rpmSetpoints = new ArrayList\u003CDouble>();\n",[1118,2237,2239],{"class":1120,"line":2238},18,[1118,2240,2241],{},"        rpmSetpoints.add(2000.0);\n",[1118,2243,2245],{"class":1120,"line":2244},19,[1118,2246,2247],{},"        rpmSetpoints.add(3200.0);\n",[1118,2249,2251],{"class":1120,"line":2250},20,[1118,2252,2253],{},"        rpmSetpoints.add(4100.0);\n",[1118,2255,2257],{"class":1120,"line":2256},21,[1118,2258,1539],{"emptyLinePlaceholder":1474},[1118,2260,2262],{"class":1120,"line":2261},22,[1118,2263,2264],{},"        rotateRight(rpmSetpoints);\n",[1118,2266,2268],{"class":1120,"line":2267},23,[1118,2269,2270],{},"        System.out.println(rpmSetpoints);\n",[1118,2272,2274],{"class":1120,"line":2273},24,[1118,2275,1160],{},[1118,2277,2279],{"class":1120,"line":2278},25,[1118,2280,1172],{},[1080,2282,2283,1376,2286,2289,2290,2293,2294,2297,2298,2301,2302,2289,2305,2308,2309,2312,2313,2289,2316,2319,2320,2323,2324,2326,2327,2330,2331,2334],{},[1344,2284,2285],{},"Why this order:",[1084,2287,2288],{},"last"," (",[1084,2291,2292],{},"f",") must be saved before anything gets overwritten — otherwise the value being rotated to the front would already be destroyed by the time the code reaches it. The loop (",[1084,2295,2296],{},"b",", ",[1084,2299,2300],{},"i",") then shifts every element up one index at a time, working backward from the end so each ",[1084,2303,2304],{},"set(i, ...)",[1084,2306,2307],{},"e",") copies from a slot that hasn't been overwritten yet. The loop's closing brace (",[1084,2310,2311],{},"a",") comes before the final ",[1084,2314,2315],{},"set(0, last)",[1084,2317,2318],{},"h","), which must happen last, once the shifting is done. The method's closing brace (",[1084,2321,2322],{},"c",") is always last. The surrounding class, import, and ",[1084,2325,2085],{}," (which creates ",[1084,2328,2329],{},"rpmSetpoints"," and calls ",[1084,2332,2333],{},"rotateRight",") are the given scaffold.",[1104,2336,2338],{"id":2337},"coding","Coding",[1080,2340,2341,2344],{},[1344,2342,2343],{},"Mode:"," harness",[1080,2346,2347,2349,2350,2353,2354,2356,2357,2360,2361,2363,2364,1102],{},[1344,2348,2081],{}," Write ",[1084,2351,2352],{},"hasDuplicateId",", which returns ",[1084,2355,1989],{}," if ",[1344,2358,2359],{},"any value appears more than once"," anywhere in\nthe list (not only next to each other), and ",[1084,2362,1996],{}," if every value is different. An empty list or a\none-element list has no duplicates. The values can be large, such as ",[1084,2365,2366],{},"1000",[1080,2368,2369],{},"Examples:",[1338,2371,2372,2380,2387],{},[1341,2373,2374,2377,2378],{},[1084,2375,2376],{},"hasDuplicateId([4, 9, 4])"," returns ",[1084,2379,1989],{},[1341,2381,2382,2377,2385],{},[1084,2383,2384],{},"hasDuplicateId([4, 9, 5])",[1084,2386,1996],{},[1341,2388,2389,2377,2392],{},[1084,2390,2391],{},"hasDuplicateId([1000, 5, 1000])",[1084,2393,1989],{},[1080,2395,2396,1376,2399],{},[1344,2397,2398],{},"Signature:",[1084,2400,2401],{},"public static boolean hasDuplicateId(ArrayList\u003CInteger> ids)",[1080,2403,2404],{},[1344,2405,2406],{},"Starter:",[1109,2408,2410],{"className":1111,"code":2409,"language":1113,"meta":1114,"style":1114},"import java.util.ArrayList;\n\npublic class Solution\n{\n    public static boolean hasDuplicateId(ArrayList\u003CInteger> ids)\n    {\n        \u002F\u002F TODO: compare every pair of elements\n    }\n}\n",[1084,2411,2412,2416,2420,2425,2429,2434,2438,2443,2447],{"__ignoreMap":1114},[1118,2413,2414],{"class":1120,"line":1121},[1118,2415,2160],{},[1118,2417,2418],{"class":1120,"line":1127},[1118,2419,1539],{"emptyLinePlaceholder":1474},[1118,2421,2422],{"class":1120,"line":1133},[1118,2423,2424],{},"public class Solution\n",[1118,2426,2427],{"class":1120,"line":1139},[1118,2428,1130],{},[1118,2430,2431],{"class":1120,"line":1145},[1118,2432,2433],{},"    public static boolean hasDuplicateId(ArrayList\u003CInteger> ids)\n",[1118,2435,2436],{"class":1120,"line":1151},[1118,2437,1148],{},[1118,2439,2440],{"class":1120,"line":1157},[1118,2441,2442],{},"        \u002F\u002F TODO: compare every pair of elements\n",[1118,2444,2445],{"class":1120,"line":1163},[1118,2446,1160],{},[1118,2448,2449],{"class":1120,"line":1169},[1118,2450,1172],{},[1080,2452,2453],{},[1344,2454,2455],{},"Tests:",[2457,2458,2459,2475],"table",{},[2460,2461,2462],"thead",{},[2463,2464,2465,2469,2472],"tr",{},[2466,2467,2468],"th",{},"Visible",[2466,2470,2471],{},"Arguments",[2466,2473,2474],{},"Expected",[2476,2477,2478,2493,2506,2519,2533,2546,2559,2572],"tbody",{},[2463,2479,2480,2484,2489],{},[2481,2482,2483],"td",{},"yes",[2481,2485,2486],{},[1084,2487,2488],{},"new java.util.ArrayList\u003C>(java.util.List.of(4, 9, 4))",[2481,2490,2491],{},[1084,2492,1989],{},[2463,2494,2495,2497,2502],{},[2481,2496,2483],{},[2481,2498,2499],{},[1084,2500,2501],{},"new java.util.ArrayList\u003C>(java.util.List.of(4, 9, 5))",[2481,2503,2504],{},[1084,2505,1996],{},[2463,2507,2508,2510,2515],{},[2481,2509,2483],{},[2481,2511,2512],{},[1084,2513,2514],{},"new java.util.ArrayList\u003C>(java.util.List.of(1000, 5, 1000))",[2481,2516,2517],{},[1084,2518,1989],{},[2463,2520,2521,2524,2529],{},[2481,2522,2523],{},"no",[2481,2525,2526],{},[1084,2527,2528],{},"new java.util.ArrayList\u003C>(java.util.List.of(2000, 3000, 4000))",[2481,2530,2531],{},[1084,2532,1996],{},[2463,2534,2535,2537,2542],{},[2481,2536,2523],{},[2481,2538,2539],{},[1084,2540,2541],{},"new java.util.ArrayList\u003C>(java.util.List.of(500, 500))",[2481,2543,2544],{},[1084,2545,1989],{},[2463,2547,2548,2550,2555],{},[2481,2549,2523],{},[2481,2551,2552],{},[1084,2553,2554],{},"new java.util.ArrayList\u003C>(java.util.List.of(7))",[2481,2556,2557],{},[1084,2558,1996],{},[2463,2560,2561,2563,2568],{},[2481,2562,2523],{},[2481,2564,2565],{},[1084,2566,2567],{},"new java.util.ArrayList\u003CInteger>()",[2481,2569,2570],{},[1084,2571,1996],{},[2463,2573,2574,2576,2581],{},[2481,2575,2523],{},[2481,2577,2578],{},[1084,2579,2580],{},"new java.util.ArrayList\u003C>(java.util.List.of(1, 2, 3, 4, 1))",[2481,2582,2583],{},[1084,2584,1989],{},[1080,2586,2587],{},[1344,2588,2589],{},"Solution:",[1109,2591,2593],{"className":1111,"code":2592,"language":1113,"meta":1114,"style":1114},"import java.util.ArrayList;\n\npublic class Solution\n{\n    public static boolean hasDuplicateId(ArrayList\u003CInteger> ids)\n    {\n        for (int i = 0; i \u003C ids.size(); i++)\n        {\n            for (int j = i + 1; j \u003C ids.size(); j++)\n            {\n                if (ids.get(i).equals(ids.get(j)))\n                {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n}\n",[1084,2594,2595,2599,2603,2607,2611,2615,2619,2624,2628,2633,2637,2642,2647,2652,2657,2661,2665,2670,2674],{"__ignoreMap":1114},[1118,2596,2597],{"class":1120,"line":1121},[1118,2598,2160],{},[1118,2600,2601],{"class":1120,"line":1127},[1118,2602,1539],{"emptyLinePlaceholder":1474},[1118,2604,2605],{"class":1120,"line":1133},[1118,2606,2424],{},[1118,2608,2609],{"class":1120,"line":1139},[1118,2610,1130],{},[1118,2612,2613],{"class":1120,"line":1145},[1118,2614,2433],{},[1118,2616,2617],{"class":1120,"line":1151},[1118,2618,1148],{},[1118,2620,2621],{"class":1120,"line":1157},[1118,2622,2623],{},"        for (int i = 0; i \u003C ids.size(); i++)\n",[1118,2625,2626],{"class":1120,"line":1163},[1118,2627,1229],{},[1118,2629,2630],{"class":1120,"line":1169},[1118,2631,2632],{},"            for (int j = i + 1; j \u003C ids.size(); j++)\n",[1118,2634,2635],{"class":1120,"line":1246},[1118,2636,1709],{},[1118,2638,2639],{"class":1120,"line":1722},[1118,2640,2641],{},"                if (ids.get(i).equals(ids.get(j)))\n",[1118,2643,2644],{"class":1120,"line":1727},[1118,2645,2646],{},"                {\n",[1118,2648,2649],{"class":1120,"line":1732},[1118,2650,2651],{},"                    return true;\n",[1118,2653,2654],{"class":1120,"line":1738},[1118,2655,2656],{},"                }\n",[1118,2658,2659],{"class":1120,"line":2221},[1118,2660,1719],{},[1118,2662,2663],{"class":1120,"line":2227},[1118,2664,1239],{},[1118,2666,2667],{"class":1120,"line":2232},[1118,2668,2669],{},"        return false;\n",[1118,2671,2672],{"class":1120,"line":2238},[1118,2673,1160],{},[1118,2675,2676],{"class":1120,"line":2244},[1118,2677,1172],{},[1080,2679,2680,2682,2683,2686,2687,2690,2691,2693,2694,1450,2696,2699,2700,1363,2702,2704,2705,2708,2709,1095,2711,2714,2715,2717],{},[1344,2681,2025],{}," Starting ",[1084,2684,2685],{},"j"," at ",[1084,2688,2689],{},"i + 1"," compares each pair once and never compares an element with itself. The\nelements are ",[1084,2692,1359],{}," objects, so they must be compared with ",[1084,2695,1179],{},[1084,2697,2698],{},"ids.get(i) == ids.get(j)"," checks\nwhether they are the same object. Java caches small ",[1084,2701,1359],{},[1084,2703,1183],{}," seems to work\nfor ",[1084,2706,2707],{},"[4, 9, 4]"," and then quietly returns ",[1084,2710,1996],{},[1084,2712,2713],{},"[1000, 5, 1000]",". Only a match returns early;\n",[1084,2716,1996],{}," waits until every pair has been checked.",[1456,2719,1458],{},{"title":1114,"searchDepth":1127,"depth":1127,"links":2721},[2722,2723,2724],{"id":1941,"depth":1127,"text":1942},{"id":2075,"depth":1127,"text":2076},{"id":2337,"depth":1127,"text":2338},{"outlineRef":1472,"pairsWith":1928,"status":2726},"new — authored exercises (Multiple Choice + Micro-Parsons + Coding)",{"title":912,"description":1114},"bX5swPVVV2dFdB2CCqgejIDK6vvbYmlhrZo6zlgL-E8",1792718165946]