[{"data":1,"prerenderedAt":2016},["ShallowReactive",2],{"item-lessons-light-ch09-storing-data":3,"item-examples-light-ch09-storing-data":436,"item-exercises-light-ch09-storing-data":597,"item-lesson-full-ch09-storing-data-9.7":758,"item-example-full-ch09-storing-data-9.7":1153,"item-exercise-full-ch09-storing-data-9.7":1603},[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],{"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 & 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\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":85,"title":86,"stem":87},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":89,"title":90,"stem":91},"\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":93,"title":94,"stem":95},"\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":97,"title":98,"stem":99},"\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":101,"title":102,"stem":103},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F8-while-loops","While Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.8-while-loops",{"path":105,"title":106,"stem":107},"\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":109,"title":110,"stem":111},"\u002Fshockwave-curriculum\u002Flessons\u002Fch06-strings\u002F1-strings","Strings","shockwave-curriculum\u002Flessons\u002Fch06-strings\u002F6.1-strings",{"path":113,"title":114,"stem":115},"\u002Fshockwave-curriculum\u002Flessons\u002Fch06-strings\u002F2-string-algorithms","String Algorithms","shockwave-curriculum\u002Flessons\u002Fch06-strings\u002F6.2-string-algorithms",{"path":117,"title":118,"stem":119},"\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":121,"title":122,"stem":123},"\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":125,"title":126,"stem":127},"\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":129,"title":130,"stem":131},"\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":133,"title":134,"stem":135},"\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":137,"title":138,"stem":139},"\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":141,"title":142,"stem":143},"\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":145,"title":146,"stem":147},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","Optional: HashMap (Dictionary) Data Structure","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":149,"title":150,"stem":151},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":153,"title":154,"stem":155},"\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":157,"title":158,"stem":159},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":161,"title":162,"stem":163},"\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":165,"title":166,"stem":167},"\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":169,"title":170,"stem":171},"\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":173,"title":174,"stem":175},"\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":177,"title":178,"stem":179},"\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":181,"title":182,"stem":183},"\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":185,"title":186,"stem":187},"\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":189,"title":190,"stem":191},"\u002Fshockwave-curriculum\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas","Common Gotchas","shockwave-curriculum\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas",{"path":193,"title":194,"stem":195},"\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":197,"title":198,"stem":199},"\u002Fshockwave-curriculum\u002Flessons\u002Fch15-advanced-collections\u002F15-advanced-collections","Advanced Collections (Set\u002FQueue\u002FMap)","shockwave-curriculum\u002Flessons\u002Fch15-advanced-collections\u002F15-advanced-collections",{"path":201,"title":202,"stem":203},"\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":205,"title":206,"stem":207},"\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":209,"title":210,"stem":211},"\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":213,"title":214,"stem":215},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F3-inheritance-hierarchies","Inheritance Hierarchies","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.3-inheritance-hierarchies",{"path":217,"title":218,"stem":219},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F4-object-superclass","Object Superclass","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.4-object-superclass",{"path":221,"title":222,"stem":223},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F1-overriding-methods","Overriding Methods","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.1-overriding-methods",{"path":225,"title":226,"stem":227},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F2-super-keyword","super Keyword","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.2-super-keyword",{"path":229,"title":230,"stem":231},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F3-polymorphism","Polymorphism","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.3-polymorphism",{"path":233,"title":234,"stem":235},"\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":237,"title":238,"stem":239},"\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":241,"title":242,"stem":243},"\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":245,"title":246,"stem":247},"\u002Fshockwave-curriculum\u002Flessons\u002Fch21-static-factories\u002F21-static-factories","Static Factories","shockwave-curriculum\u002Flessons\u002Fch21-static-factories\u002F21-static-factories",{"path":249,"title":250,"stem":251},"\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":253,"title":254,"stem":255},"\u002Fshockwave-curriculum\u002Flessons\u002Fch23-encapsulation-and-final\u002F1-scope-and-access","Scope and Access","shockwave-curriculum\u002Flessons\u002Fch23-encapsulation-and-final\u002F23.1-scope-and-access",{"path":257,"title":258,"stem":259},"\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":261,"title":262,"stem":263},"\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":265,"title":266,"stem":267},"\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":269,"title":270,"stem":271},"\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":273,"title":274,"stem":275},"\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":277,"title":278,"stem":279},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F5-managing-transitions","Managing Transitions","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.5-managing-transitions",{"path":281,"title":282,"stem":283},"\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":285,"title":286,"stem":287},"\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":289,"title":290,"stem":291},"\u002Fshockwave-curriculum\u002Flessons\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways","Architecture Takeaways","shockwave-curriculum\u002Flessons\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways",{"path":293,"title":294,"stem":295},"\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":297,"title":298,"stem":299},"\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":301,"title":302,"stem":303},"\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":305,"title":306,"stem":307},"\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":309,"title":310,"stem":311},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F3-recursion","Recursion","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.3-recursion",{"path":313,"title":314,"stem":315},"\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":317,"title":318,"stem":319},"\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":321,"title":322,"stem":323},"\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":325,"title":326,"stem":327},"\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":329,"title":330,"stem":331},"\u002Fshockwave-curriculum\u002Flessons\u002Fch32-unit-testing\u002F1-coming-soon","Unit Testing — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch32-unit-testing\u002F32.1-coming-soon",{"path":333,"title":334,"stem":335},"\u002Fshockwave-curriculum\u002Flessons\u002Fch33-advantagekit-autologging\u002F1-coming-soon","AdvantageKit — AutoLogging — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch33-advantagekit-autologging\u002F33.1-coming-soon",{"path":337,"title":338,"stem":339},"\u002Fshockwave-curriculum\u002Flessons\u002Fch34-log-replay\u002F1-coming-soon","Log Replay — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch34-log-replay\u002F34.1-coming-soon",{"path":341,"title":342,"stem":343},"\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":345,"title":346,"stem":347},"\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":349,"title":350,"stem":351},"\u002Fshockwave-curriculum\u002Flessons\u002Fch37-autonomous-i\u002F1-coming-soon","Autonomous I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch37-autonomous-i\u002F37.1-coming-soon",{"path":353,"title":354,"stem":355},"\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":357,"title":358,"stem":359},"\u002Fshockwave-curriculum\u002Flessons\u002Fch39-control-fundamentals\u002F1-coming-soon","Control Fundamentals — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch39-control-fundamentals\u002F39.1-coming-soon",{"path":361,"title":362,"stem":363},"\u002Fshockwave-curriculum\u002Flessons\u002Fch40-motion-profiles\u002F1-coming-soon","Motion Profiles — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch40-motion-profiles\u002F40.1-coming-soon",{"path":365,"title":366,"stem":367},"\u002Fshockwave-curriculum\u002Flessons\u002Fch41-hardware-fundamentals\u002F1-coming-soon","Hardware Fundamentals — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch41-hardware-fundamentals\u002F41.1-coming-soon",{"path":369,"title":370,"stem":371},"\u002Fshockwave-curriculum\u002Flessons\u002Fch42-photonvision\u002F1-coming-soon","PhotonVision — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch42-photonvision\u002F42.1-coming-soon",{"path":373,"title":374,"stem":375},"\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":377,"title":378,"stem":379},"\u002Fshockwave-curriculum\u002Flessons\u002Fch44-subsystems-i\u002F1-coming-soon","Subsystems I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch44-subsystems-i\u002F44.1-coming-soon",{"path":381,"title":382,"stem":383},"\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":385,"title":386,"stem":387},"\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":389,"title":390,"stem":391},"\u002Fshockwave-curriculum\u002Flessons\u002Fch47-field-constants\u002F1-coming-soon","Field Constants — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch47-field-constants\u002F47.1-coming-soon",{"path":393,"title":394,"stem":395},"\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":397,"title":398,"stem":399},"\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":401,"title":402,"stem":403},"\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":405,"title":406,"stem":407},"\u002Fshockwave-curriculum\u002Flessons\u002Fch51-robot-alerts\u002F1-coming-soon","Robot Alerts — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch51-robot-alerts\u002F51.1-coming-soon",{"path":409,"title":410,"stem":411},"\u002Fshockwave-curriculum\u002Flessons\u002Fch52-wpilib-commands\u002F1-coming-soon","WPILib Commands — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch52-wpilib-commands\u002F52.1-coming-soon",{"path":413,"title":414,"stem":415},"\u002Fshockwave-curriculum\u002Flessons\u002Fch53-wpilib-geometry\u002F1-coming-soon","WPILib Geometry — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch53-wpilib-geometry\u002F53.1-coming-soon",{"path":417,"title":418,"stem":419},"\u002Fshockwave-curriculum\u002Flessons\u002Fch54-networktables\u002F1-coming-soon","NetworkTables — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch54-networktables\u002F54.1-coming-soon",{"path":421,"title":422,"stem":423},"\u002Fshockwave-curriculum\u002Flessons\u002Fch55-command-scheduler\u002F1-coming-soon","Command Scheduler — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch55-command-scheduler\u002F55.1-coming-soon",{"path":425,"title":426,"stem":427},"\u002Fshockwave-curriculum\u002Flessons\u002Fch56-wpilib-timers\u002F1-coming-soon","WPILib Timers — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch56-wpilib-timers\u002F56.1-coming-soon",{"path":429,"title":430,"stem":431},"\u002Fshockwave-curriculum\u002Flessons\u002Fch57-wpilib-triggers\u002F1-coming-soon","WPILib Triggers — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch57-wpilib-triggers\u002F57.1-coming-soon",{"path":433,"title":434,"stem":435},"\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",[437,441,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],{"path":438,"title":439,"stem":440},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming & Compilers — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":442,"title":443,"stem":444},"\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":446,"title":447,"stem":448},"\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":450,"title":451,"stem":452},"\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":454,"title":455,"stem":456},"\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":458,"title":459,"stem":460},"\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":462,"title":463,"stem":464},"\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":466,"title":467,"stem":468},"\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":470,"title":471,"stem":472},"\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":474,"title":475,"stem":476},"\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":478,"title":479,"stem":480},"\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":482,"title":483,"stem":484},"\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":486,"title":487,"stem":488},"\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":490,"title":491,"stem":492},"\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":494,"title":495,"stem":496},"\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":498,"title":499,"stem":500},"\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":502,"title":503,"stem":504},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":506,"title":507,"stem":508},"\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":510,"title":511,"stem":512},"\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":514,"title":515,"stem":516},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":518,"title":519,"stem":520},"\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":522,"title":523,"stem":524},"\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":526,"title":527,"stem":528},"\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":530,"title":531,"stem":532},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F8-while-loops","While Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.8-while-loops",{"path":534,"title":535,"stem":536},"\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":538,"title":539,"stem":540},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F1-strings","Strings — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F6.1-strings",{"path":542,"title":543,"stem":544},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F2-string-algorithms","String Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F6.2-string-algorithms",{"path":546,"title":547,"stem":548},"\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":550,"title":551,"stem":552},"\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":554,"title":555,"stem":556},"\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":558,"title":559,"stem":560},"\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":562,"title":563,"stem":564},"\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":566,"title":567,"stem":568},"\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":570,"title":571,"stem":572},"\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":574,"title":575,"stem":576},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","Optional: HashMap (Dictionary) Data Structure — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":578,"title":579,"stem":580},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":582,"title":583,"stem":584},"\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":586,"title":587,"stem":588},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":590,"title":591,"stem":592},"\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":594,"title":595,"stem":596},"\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",[598,602,606,610,614,618,622,626,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738,742,746,750,754],{"path":599,"title":600,"stem":601},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming & Compilers — Exercises","shockwave-curriculum\u002Fexercises\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":603,"title":604,"stem":605},"\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":607,"title":608,"stem":609},"\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":611,"title":612,"stem":613},"\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":615,"title":616,"stem":617},"\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":619,"title":620,"stem":621},"\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":623,"title":624,"stem":625},"\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":627,"title":628,"stem":629},"\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":631,"title":632,"stem":633},"\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":635,"title":636,"stem":637},"\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":639,"title":640,"stem":641},"\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":643,"title":644,"stem":645},"\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":647,"title":648,"stem":649},"\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":651,"title":652,"stem":653},"\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":655,"title":656,"stem":657},"\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":659,"title":660,"stem":661},"\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":663,"title":664,"stem":665},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":667,"title":668,"stem":669},"\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":671,"title":672,"stem":673},"\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":675,"title":676,"stem":677},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":679,"title":680,"stem":681},"\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":683,"title":684,"stem":685},"\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":687,"title":688,"stem":689},"\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":691,"title":692,"stem":693},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F8-while-loops","While Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.8-while-loops",{"path":695,"title":696,"stem":697},"\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":699,"title":700,"stem":701},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F1-strings","Strings — Exercises","shockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F6.1-strings",{"path":703,"title":704,"stem":705},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F2-string-algorithms","String Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F6.2-string-algorithms",{"path":707,"title":708,"stem":709},"\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":711,"title":712,"stem":713},"\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":715,"title":716,"stem":717},"\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":719,"title":720,"stem":721},"\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":723,"title":724,"stem":725},"\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":727,"title":728,"stem":729},"\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":731,"title":732,"stem":733},"\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":735,"title":736,"stem":737},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","Optional: HashMap (Dictionary) Data Structure — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":739,"title":740,"stem":741},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":743,"title":744,"stem":745},"\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":747,"title":748,"stem":749},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":751,"title":752,"stem":753},"\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":755,"title":756,"stem":757},"\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",{"id":759,"title":162,"body":760,"description":1145,"extension":1146,"meta":1147,"navigation":1150,"path":161,"seo":1151,"stem":163,"__hash__":1152},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms.md",{"type":761,"value":762,"toc":1135},"minimark",[763,767,791,796,861,872,885,937,948,994,998,1001,1021,1025,1079,1083,1120,1131],[764,765,162],"h1",{"id":766},"implementing-arraylist-algorithms",[768,769,770,771,775,776,779,780,783,784,779,787,790],"p",{},"Every pattern from Lesson 9.5 (sum\u002Faverage, min\u002Fmax, search, property checks, duplicates, reversing) applies to ",[772,773,774],"code",{},"ArrayList"," too — just swap ",[772,777,778],{},"[i]","\u002F",[772,781,782],{},".length"," for ",[772,785,786],{},"get(i)",[772,788,789],{},".size()",".",[792,793,795],"h2",{"id":794},"min-max-average","Min \u002F Max \u002F Average",[797,798,803],"pre",{"className":799,"code":800,"language":801,"meta":802,"style":802},"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","",[772,804,805,813,819,825,831,837,843,849,855],{"__ignoreMap":802},[806,807,810],"span",{"class":808,"line":809},"line",1,[806,811,812],{},"public static double average(ArrayList\u003CDouble> nums)\n",[806,814,816],{"class":808,"line":815},2,[806,817,818],{},"{\n",[806,820,822],{"class":808,"line":821},3,[806,823,824],{},"    double sum = 0;\n",[806,826,828],{"class":808,"line":827},4,[806,829,830],{},"    for (int i = 0; i \u003C nums.size(); i++)\n",[806,832,834],{"class":808,"line":833},5,[806,835,836],{},"    {\n",[806,838,840],{"class":808,"line":839},6,[806,841,842],{},"        sum += nums.get(i);\n",[806,844,846],{"class":808,"line":845},7,[806,847,848],{},"    }\n",[806,850,852],{"class":808,"line":851},8,[806,853,854],{},"    return sum \u002F nums.size();\n",[806,856,858],{"class":808,"line":857},9,[806,859,860],{},"}\n",[792,862,864,865,868,869],{"id":863},"duplicates-use-equals-not","Duplicates — Use ",[772,866,867],{},".equals()",", Not ",[772,870,871],{},"==",[768,873,874,875,878,879,881,882,884],{},"For ",[772,876,877],{},"ArrayList\u003CInteger>"," (or any object type), comparing with ",[772,880,871],{}," checks identity, not value — use ",[772,883,867],{}," instead:",[797,886,888],{"className":799,"code":887,"language":801,"meta":802,"style":802},"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",[772,889,890,895,899,904,908,913,918,923,928,932],{"__ignoreMap":802},[806,891,892],{"class":808,"line":809},[806,893,894],{},"for (int i = 0; i \u003C nums.size(); i++)\n",[806,896,897],{"class":808,"line":815},[806,898,818],{},[806,900,901],{"class":808,"line":821},[806,902,903],{},"    for (int j = i + 1; j \u003C nums.size(); j++)\n",[806,905,906],{"class":808,"line":827},[806,907,836],{},[806,909,910],{"class":808,"line":833},[806,911,912],{},"        if (nums.get(i).equals(nums.get(j))) \u002F\u002F .equals(), not ==\n",[806,914,915],{"class":808,"line":839},[806,916,917],{},"        {\n",[806,919,920],{"class":808,"line":845},[806,921,922],{},"            return true;\n",[806,924,925],{"class":808,"line":851},[806,926,927],{},"        }\n",[806,929,930],{"class":808,"line":857},[806,931,848],{},[806,933,935],{"class":808,"line":934},10,[806,936,860],{},[792,938,940,941,779,944,947],{"id":939},"rotating-in-place-with-getset","Rotating (In Place, with ",[772,942,943],{},"get",[772,945,946],{},"set",")",[797,949,951],{"className":799,"code":950,"language":801,"meta":802,"style":802},"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",[772,952,953,958,962,967,972,976,981,985,990],{"__ignoreMap":802},[806,954,955],{"class":808,"line":809},[806,956,957],{},"public static void rotateRight(ArrayList\u003CDouble> nums)\n",[806,959,960],{"class":808,"line":815},[806,961,818],{},[806,963,964],{"class":808,"line":821},[806,965,966],{},"    double last = nums.get(nums.size() - 1);\n",[806,968,969],{"class":808,"line":827},[806,970,971],{},"    for (int i = nums.size() - 1; i > 0; i--)\n",[806,973,974],{"class":808,"line":833},[806,975,836],{},[806,977,978],{"class":808,"line":839},[806,979,980],{},"        nums.set(i, nums.get(i - 1));\n",[806,982,983],{"class":808,"line":845},[806,984,848],{},[806,986,987],{"class":808,"line":851},[806,988,989],{},"    nums.set(0, last);\n",[806,991,992],{"class":808,"line":857},[806,993,860],{},[792,995,997],{"id":996},"parallel-arraylists","Parallel ArrayLists",[768,999,1000],{},"Same idea as parallel arrays (Ch.9.1) — two lists kept in sync by index:",[797,1002,1004],{"className":799,"code":1003,"language":801,"meta":802,"style":802},"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",[772,1005,1006,1011,1016],{"__ignoreMap":802},[806,1007,1008],{"class":808,"line":809},[806,1009,1010],{},"ArrayList\u003CString> autoNames = new ArrayList\u003CString>();\n",[806,1012,1013],{"class":808,"line":815},[806,1014,1015],{},"ArrayList\u003CDouble> autoTimes = new ArrayList\u003CDouble>();\n",[806,1017,1018],{"class":808,"line":821},[806,1019,1020],{},"\u002F\u002F autoTimes.get(i) is the recorded time for autoNames.get(i)\n",[792,1022,1024],{"id":1023},"common-pitfalls","Common Pitfalls",[1026,1027,1028,1049,1070],"ul",{},[1029,1030,1031,1040,1041,1044,1045,1048],"li",{},[1032,1033,1034,1035,1037,1038,790],"strong",{},"Comparing objects with ",[772,1036,871],{}," instead of ",[772,1039,867],{}," This is the single most common ArrayList-specific mistake — ",[772,1042,1043],{},"nums.get(i) == nums.get(j)"," checks whether they're the same object, which is unreliable even for boxed ",[772,1046,1047],{},"Integer","s.",[1029,1050,1051,1058,1059,1062,1063,1065,1066,779,1068,790],{},[1032,1052,1053,1054,1057],{},"Using array syntax (",[772,1055,1056],{},"[]",") out of habit."," ",[772,1060,1061],{},"nums[i]"," doesn't compile on an ",[772,1064,774],{}," — it's always ",[772,1067,943],{},[772,1069,946],{},[1029,1071,1072,1078],{},[1032,1073,1074,1075,1077],{},"Forgetting ",[772,1076,789],{}," changes as you add\u002Fremove."," A loop bound computed once before a series of removals can end up stale.",[792,1080,1082],{"id":1081},"key-takeaways","Key Takeaways",[1026,1084,1085,1099,1114],{},[1029,1086,1087,1088,1090,1091,779,1093,783,1095,779,1097,790],{},"Every array algorithm pattern (accumulator, min\u002Fmax, search, property checks, duplicates, rotate, reverse) transfers directly to ",[772,1089,774],{}," — just swap ",[772,1092,778],{},[772,1094,782],{},[772,1096,786],{},[772,1098,789],{},[1029,1100,1101,1102,1104,1105,1107,1108,1110,1111,1113],{},"Compare ",[772,1103,774],{}," elements with ",[772,1106,867],{},", not ",[772,1109,871],{},", when the element type is an object (including boxed numbers like ",[772,1112,1047],{},").",[1029,1115,1116,1117,1119],{},"Parallel ",[772,1118,774],{},"s keep related data in sync by index, same as parallel arrays.",[768,1121,1122,1123,1126,1127,1130],{},"Derived from ",[772,1124,1125],{},"csawesome-2026",": ",[772,1128,1129],{},"unit-4-data-collections\u002F4.10-implementing-arraylist-algorithms.md"," (CSA 4.10)",[1132,1133,1134],"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":802,"searchDepth":815,"depth":815,"links":1136},[1137,1138,1140,1142,1143,1144],{"id":794,"depth":815,"text":795},{"id":863,"depth":815,"text":1139},"Duplicates — Use .equals(), Not ==",{"id":939,"depth":815,"text":1141},"Rotating (In Place, with get\u002Fset)",{"id":996,"depth":815,"text":997},{"id":1023,"depth":815,"text":1024},{"id":1081,"depth":815,"text":1082},"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":1148,"status":1149},"9.7 — Implementing ArrayList Algorithms (CSA 4.10)","new — authored lesson (fuller depth than the teaser slide)",true,{"title":162,"description":1145},"Iv9LEMY1J3VAZdGRDdu2fo3q6h-tARzFQrDoV1npOp0",{"id":1154,"title":591,"body":1155,"description":802,"extension":1146,"meta":1598,"navigation":1150,"path":590,"seo":1601,"stem":592,"__hash__":1602},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms.md",{"type":761,"value":1156,"toc":1589},[1157,1160,1164,1167,1171,1186,1235,1254,1258,1270,1315,1324,1330,1345,1417,1426,1430,1450,1519,1539,1554,1558,1587],[764,1158,591],{"id":1159},"implementing-arraylist-algorithms-worked-example",[792,1161,1163],{"id":1162},"problem","Problem",[768,1165,1166],{},"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.",[792,1168,1170],{"id":1169},"step-1-plan-it-first","Step 1: Plan It First",[1172,1173,1174,1177,1180,1183],"ol",{},[1029,1175,1176],{},"Store ranking points per event, and the matching event names alongside them.",[1029,1178,1179],{},"Compute the average.",[1029,1181,1182],{},"Check for two events with the exact same points total.",[1029,1184,1185],{},"Rotate both lists right by one, in sync.",[797,1187,1189],{"className":799,"code":1188,"language":801,"meta":802,"style":802},"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",[772,1190,1191,1196,1201,1206,1211,1216,1221,1226,1231],{"__ignoreMap":802},[806,1192,1193],{"class":808,"line":809},[806,1194,1195],{},"ArrayList\u003CString> eventNames = new ArrayList\u003CString>();\n",[806,1197,1198],{"class":808,"line":815},[806,1199,1200],{},"eventNames.add(\"Week 1\");\n",[806,1202,1203],{"class":808,"line":821},[806,1204,1205],{},"eventNames.add(\"Week 3\");\n",[806,1207,1208],{"class":808,"line":827},[806,1209,1210],{},"eventNames.add(\"District Champs\");\n",[806,1212,1213],{"class":808,"line":833},[806,1214,1215],{"emptyLinePlaceholder":1150},"\n",[806,1217,1218],{"class":808,"line":839},[806,1219,1220],{},"ArrayList\u003CInteger> rankingPoints = new ArrayList\u003CInteger>();\n",[806,1222,1223],{"class":808,"line":845},[806,1224,1225],{},"rankingPoints.add(18);\n",[806,1227,1228],{"class":808,"line":851},[806,1229,1230],{},"rankingPoints.add(24);\n",[806,1232,1233],{"class":808,"line":857},[806,1234,1225],{},[768,1236,1237,1240,1241,1058,1244,1247,1248,1250,1251,1253],{},[772,1238,1239],{},"rankingPoints.add(18)"," autoboxes the ",[772,1242,1243],{},"int",[772,1245,1246],{},"18"," into an ",[772,1249,1047],{}," — ",[772,1252,774],{}," can only hold objects.",[792,1255,1257],{"id":1256},"step-2-average","Step 2: Average",[768,1259,1260,1261,779,1263,783,1265,779,1267,1269],{},"Every pattern from Lesson 9.5 applies here too — just swap ",[772,1262,778],{},[772,1264,782],{},[772,1266,786],{},[772,1268,789],{},":",[797,1271,1273],{"className":799,"code":1272,"language":801,"meta":802,"style":802},"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",[772,1274,1275,1280,1284,1288,1293,1297,1302,1306,1311],{"__ignoreMap":802},[806,1276,1277],{"class":808,"line":809},[806,1278,1279],{},"public static double average(ArrayList\u003CInteger> points)\n",[806,1281,1282],{"class":808,"line":815},[806,1283,818],{},[806,1285,1286],{"class":808,"line":821},[806,1287,824],{},[806,1289,1290],{"class":808,"line":827},[806,1291,1292],{},"    for (int i = 0; i \u003C points.size(); i++)\n",[806,1294,1295],{"class":808,"line":833},[806,1296,836],{},[806,1298,1299],{"class":808,"line":839},[806,1300,1301],{},"        sum += points.get(i);\n",[806,1303,1304],{"class":808,"line":845},[806,1305,848],{},[806,1307,1308],{"class":808,"line":851},[806,1309,1310],{},"    return sum \u002F points.size();\n",[806,1312,1313],{"class":808,"line":857},[806,1314,860],{},[797,1316,1318],{"className":799,"code":1317,"language":801,"meta":802,"style":802},"System.out.println(average(rankingPoints)); \u002F\u002F 20.0\n",[772,1319,1320],{"__ignoreMap":802},[806,1321,1322],{"class":808,"line":809},[806,1323,1317],{},[792,1325,1327,1328],{"id":1326},"step-3-two-events-with-the-exact-same-points-use-equals","Step 3: Two Events With the Exact Same Points — Use ",[772,1329,867],{},[768,1331,1332,1335,1336,1338,1339,1341,1342,1344],{},[772,1333,1334],{},"rankingPoints"," holds boxed ",[772,1337,1047],{}," objects, so comparing with ",[772,1340,871],{}," would check identity, not value — ",[772,1343,867],{}," is required instead:",[797,1346,1348],{"className":799,"code":1347,"language":801,"meta":802,"style":802},"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",[772,1349,1350,1355,1359,1363,1367,1372,1376,1381,1386,1391,1396,1401,1406,1412],{"__ignoreMap":802},[806,1351,1352],{"class":808,"line":809},[806,1353,1354],{},"public static boolean hasMatchingTotal(ArrayList\u003CInteger> points)\n",[806,1356,1357],{"class":808,"line":815},[806,1358,818],{},[806,1360,1361],{"class":808,"line":821},[806,1362,1292],{},[806,1364,1365],{"class":808,"line":827},[806,1366,836],{},[806,1368,1369],{"class":808,"line":833},[806,1370,1371],{},"        for (int j = i + 1; j \u003C points.size(); j++)\n",[806,1373,1374],{"class":808,"line":839},[806,1375,917],{},[806,1377,1378],{"class":808,"line":845},[806,1379,1380],{},"            if (points.get(i).equals(points.get(j))) \u002F\u002F .equals(), not ==\n",[806,1382,1383],{"class":808,"line":851},[806,1384,1385],{},"            {\n",[806,1387,1388],{"class":808,"line":857},[806,1389,1390],{},"                return true;\n",[806,1392,1393],{"class":808,"line":934},[806,1394,1395],{},"            }\n",[806,1397,1399],{"class":808,"line":1398},11,[806,1400,927],{},[806,1402,1404],{"class":808,"line":1403},12,[806,1405,848],{},[806,1407,1409],{"class":808,"line":1408},13,[806,1410,1411],{},"    return false;\n",[806,1413,1415],{"class":808,"line":1414},14,[806,1416,860],{},[797,1418,1420],{"className":799,"code":1419,"language":801,"meta":802,"style":802},"System.out.println(hasMatchingTotal(rankingPoints)); \u002F\u002F true — Week 1 and District Champs both earned 18\n",[772,1421,1422],{"__ignoreMap":802},[806,1423,1424],{"class":808,"line":809},[806,1425,1419],{},[792,1427,1429],{"id":1428},"step-4-rotate-both-lists-right-by-one-in-sync","Step 4: Rotate Both Lists Right by One, In Sync",[768,1431,1432,1435,1436,1438,1439,1250,1442,1445,1446,1449],{},[772,1433,1434],{},"eventNames"," and ",[772,1437,1334],{}," are ",[1032,1440,1441],{},"parallel ArrayLists",[772,1443,1444],{},"rankingPoints.get(i)"," is the points total for ",[772,1447,1448],{},"eventNames.get(i)",". Rotating one without the other would break that pairing, so both need the identical rotation:",[797,1451,1453],{"className":799,"code":1452,"language":801,"meta":802,"style":802},"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",[772,1454,1455,1460,1464,1469,1474,1478,1483,1487,1492,1497,1501,1505,1510,1515],{"__ignoreMap":802},[806,1456,1457],{"class":808,"line":809},[806,1458,1459],{},"public static void rotateRight(ArrayList\u003CString> names, ArrayList\u003CInteger> points)\n",[806,1461,1462],{"class":808,"line":815},[806,1463,818],{},[806,1465,1466],{"class":808,"line":821},[806,1467,1468],{},"    String lastName = names.get(names.size() - 1);\n",[806,1470,1471],{"class":808,"line":827},[806,1472,1473],{},"    int lastPoints = points.get(points.size() - 1);\n",[806,1475,1476],{"class":808,"line":833},[806,1477,1215],{"emptyLinePlaceholder":1150},[806,1479,1480],{"class":808,"line":839},[806,1481,1482],{},"    for (int i = names.size() - 1; i > 0; i--)\n",[806,1484,1485],{"class":808,"line":845},[806,1486,836],{},[806,1488,1489],{"class":808,"line":851},[806,1490,1491],{},"        names.set(i, names.get(i - 1));\n",[806,1493,1494],{"class":808,"line":857},[806,1495,1496],{},"        points.set(i, points.get(i - 1));\n",[806,1498,1499],{"class":808,"line":934},[806,1500,848],{},[806,1502,1503],{"class":808,"line":1398},[806,1504,1215],{"emptyLinePlaceholder":1150},[806,1506,1507],{"class":808,"line":1403},[806,1508,1509],{},"    names.set(0, lastName);\n",[806,1511,1512],{"class":808,"line":1408},[806,1513,1514],{},"    points.set(0, lastPoints);\n",[806,1516,1517],{"class":808,"line":1414},[806,1518,860],{},[797,1520,1522],{"className":799,"code":1521,"language":801,"meta":802,"style":802},"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",[772,1523,1524,1529,1534],{"__ignoreMap":802},[806,1525,1526],{"class":808,"line":809},[806,1527,1528],{},"rotateRight(eventNames, rankingPoints);\n",[806,1530,1531],{"class":808,"line":815},[806,1532,1533],{},"System.out.println(eventNames);    \u002F\u002F [District Champs, Week 1, Week 3]\n",[806,1535,1536],{"class":808,"line":821},[806,1537,1538],{},"System.out.println(rankingPoints); \u002F\u002F [18, 18, 24]\n",[768,1540,1541,1544,1545,1435,1548,1544,1551,1553],{},[772,1542,1543],{},"eventNames.get(0)"," is still ",[772,1546,1547],{},"\"District Champs\"",[772,1549,1550],{},"rankingPoints.get(0)",[772,1552,1246],{}," — the pairing survived the rotation because both lists were rotated the same way, in the same loop.",[792,1555,1557],{"id":1556},"recap","Recap",[1026,1559,1560,1572,1582],{},[1029,1561,1087,1562,1090,1564,779,1566,783,1568,779,1570,790],{},[772,1563,774],{},[772,1565,778],{},[772,1567,782],{},[772,1569,786],{},[772,1571,789],{},[1029,1573,1101,1574,1104,1576,1107,1578,1110,1580,1113],{},[772,1575,774],{},[772,1577,867],{},[772,1579,871],{},[772,1581,1047],{},[1029,1583,1116,1584,1586],{},[772,1585,774],{},"s keep related data in sync by index, same as parallel arrays — any operation that reorders one must reorder the other identically.",[1132,1588,1134],{},{"title":802,"searchDepth":815,"depth":815,"links":1590},[1591,1592,1593,1594,1596,1597],{"id":1162,"depth":815,"text":1163},{"id":1169,"depth":815,"text":1170},{"id":1256,"depth":815,"text":1257},{"id":1326,"depth":815,"text":1595},"Step 3: Two Events With the Exact Same Points — Use .equals()",{"id":1428,"depth":815,"text":1429},{"id":1556,"depth":815,"text":1557},{"outlineRef":1148,"pairsWith":1599,"status":1600},"[`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":591,"description":802},"L_WqKjTvkZHrR9uLkaD8uooFWpCQsmyetktg42c9M7U",{"id":1604,"title":752,"body":1605,"description":802,"extension":1146,"meta":2012,"navigation":1150,"path":751,"seo":2014,"stem":753,"__hash__":2015},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms.md",{"type":761,"value":1606,"toc":2008},[1607,1610,1614,1620,1648,1653,1686,1692,1712,1744,1748,1758,1761,1817,1822,1952,2006],[764,1608,752],{"id":1609},"implementing-arraylist-algorithms-exercises",[792,1611,1613],{"id":1612},"multiple-choice","Multiple Choice",[768,1615,1616,1619],{},[1032,1617,1618],{},"Question:"," What does this code print?",[797,1621,1623],{"className":799,"code":1622,"language":801,"meta":802,"style":802},"ArrayList\u003CInteger> ids = new ArrayList\u003CInteger>();\nids.add(200);\nids.add(200);\n\nSystem.out.println(ids.get(0) == ids.get(1));\n",[772,1624,1625,1630,1635,1639,1643],{"__ignoreMap":802},[806,1626,1627],{"class":808,"line":809},[806,1628,1629],{},"ArrayList\u003CInteger> ids = new ArrayList\u003CInteger>();\n",[806,1631,1632],{"class":808,"line":815},[806,1633,1634],{},"ids.add(200);\n",[806,1636,1637],{"class":808,"line":821},[806,1638,1634],{},[806,1640,1641],{"class":808,"line":827},[806,1642,1215],{"emptyLinePlaceholder":1150},[806,1644,1645],{"class":808,"line":833},[806,1646,1647],{},"System.out.println(ids.get(0) == ids.get(1));\n",[768,1649,1650],{},[1032,1651,1652],{},"Options:",[1026,1654,1655,1662,1668,1677],{},[1029,1656,1657,1658,1661],{},"A. ",[772,1659,1660],{},"true",", guaranteed",[1029,1663,1664,1665,1661],{},"B. ",[772,1666,1667],{},"false",[1029,1669,1670,1671,1673,1674,1676],{},"C. Not guaranteed either way — ",[772,1672,871],{}," on boxed ",[772,1675,1047],{}," objects compares identity, not value",[1029,1678,1679,1680,1682,1683,1685],{},"D. This won't compile, since ",[772,1681,871],{}," can't be used on ",[772,1684,774],{}," elements",[768,1687,1688,1691],{},[1032,1689,1690],{},"Answer:"," C",[768,1693,1694,1058,1697,1435,1700,1703,1704,1706,1707,1709,1710,790],{},[1032,1695,1696],{},"Why:",[772,1698,1699],{},"ids.get(0)",[772,1701,1702],{},"ids.get(1)"," are boxed ",[772,1705,1047],{}," objects. ",[772,1708,871],{}," 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 ",[772,1711,867],{},[1026,1713,1714,1726,1735],{},[1029,1715,1716,1717,1719,1720,1722,1723,1725],{},"A is wrong — ",[772,1718,871],{}," comparing two separately created ",[772,1721,1047],{}," objects isn't reliably ",[772,1724,1660],{}," just because the underlying values match.",[1029,1727,1728,1729,1731,1732,1734],{},"B is wrong — it isn't reliably ",[772,1730,1667],{}," either; treating ",[772,1733,871],{}," as dependable in either direction is the bug.",[1029,1736,1737,1738,1740,1741,1743],{},"D is wrong — ",[772,1739,871],{}," compiles fine on any two object references, including ",[772,1742,774],{}," elements; it just doesn't compare what a beginner might expect.",[792,1745,1747],{"id":1746},"micro-parsons","Micro-Parsons",[768,1749,1750,1753,1754,1757],{},[1032,1751,1752],{},"Problem:"," This method will live in a class alongside a ",[772,1755,1756],{},"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.",[768,1759,1760],{},"Reorder the fragments below into a working method:",[1026,1762,1763,1769,1775,1781,1787,1793,1799,1805,1811],{},[1029,1764,1765,1766],{},"a. ",[772,1767,1768],{},"    }",[1029,1770,1771,1772],{},"b. ",[772,1773,1774],{},"    for (int i = rpmSetpoints.size() - 1; i > 0; i--)",[1029,1776,1777,1778],{},"c. ",[772,1779,1780],{},"}",[1029,1782,1783,1784],{},"d. ",[772,1785,1786],{},"public static void rotateRight(ArrayList\u003CDouble> rpmSetpoints)",[1029,1788,1789,1790],{},"e. ",[772,1791,1792],{},"        rpmSetpoints.set(i, rpmSetpoints.get(i - 1));",[1029,1794,1795,1796],{},"f. ",[772,1797,1798],{},"    double last = rpmSetpoints.get(rpmSetpoints.size() - 1);",[1029,1800,1801,1802],{},"g. ",[772,1803,1804],{},"{",[1029,1806,1807,1808],{},"h. ",[772,1809,1810],{},"    rpmSetpoints.set(0, last);",[1029,1812,1813,1814],{},"i. ",[772,1815,1816],{},"    {",[768,1818,1819,1821],{},[1032,1820,1690],{}," d, g, f, b, i, e, a, h, c",[797,1823,1825],{"className":799,"code":1824,"language":801,"meta":802,"style":802},"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",[772,1826,1827,1832,1836,1841,1845,1850,1854,1859,1864,1868,1873,1877,1882,1886,1890,1896,1901,1907,1913,1919,1925,1930,1936,1942,1947],{"__ignoreMap":802},[806,1828,1829],{"class":808,"line":809},[806,1830,1831],{},"import java.util.ArrayList;\n",[806,1833,1834],{"class":808,"line":815},[806,1835,1215],{"emptyLinePlaceholder":1150},[806,1837,1838],{"class":808,"line":821},[806,1839,1840],{},"public class ShooterConfig\n",[806,1842,1843],{"class":808,"line":827},[806,1844,818],{},[806,1846,1847],{"class":808,"line":833},[806,1848,1849],{},"    public static void rotateRight(ArrayList\u003CDouble> rpmSetpoints)\n",[806,1851,1852],{"class":808,"line":839},[806,1853,836],{},[806,1855,1856],{"class":808,"line":845},[806,1857,1858],{},"        double last = rpmSetpoints.get(rpmSetpoints.size() - 1);\n",[806,1860,1861],{"class":808,"line":851},[806,1862,1863],{},"        for (int i = rpmSetpoints.size() - 1; i > 0; i--)\n",[806,1865,1866],{"class":808,"line":857},[806,1867,917],{},[806,1869,1870],{"class":808,"line":934},[806,1871,1872],{},"            rpmSetpoints.set(i, rpmSetpoints.get(i - 1));\n",[806,1874,1875],{"class":808,"line":1398},[806,1876,927],{},[806,1878,1879],{"class":808,"line":1403},[806,1880,1881],{},"        rpmSetpoints.set(0, last);\n",[806,1883,1884],{"class":808,"line":1408},[806,1885,848],{},[806,1887,1888],{"class":808,"line":1414},[806,1889,1215],{"emptyLinePlaceholder":1150},[806,1891,1893],{"class":808,"line":1892},15,[806,1894,1895],{},"    public static void main(String[] args)\n",[806,1897,1899],{"class":808,"line":1898},16,[806,1900,836],{},[806,1902,1904],{"class":808,"line":1903},17,[806,1905,1906],{},"        ArrayList\u003CDouble> rpmSetpoints = new ArrayList\u003CDouble>();\n",[806,1908,1910],{"class":808,"line":1909},18,[806,1911,1912],{},"        rpmSetpoints.add(2000.0);\n",[806,1914,1916],{"class":808,"line":1915},19,[806,1917,1918],{},"        rpmSetpoints.add(3200.0);\n",[806,1920,1922],{"class":808,"line":1921},20,[806,1923,1924],{},"        rpmSetpoints.add(4100.0);\n",[806,1926,1928],{"class":808,"line":1927},21,[806,1929,1215],{"emptyLinePlaceholder":1150},[806,1931,1933],{"class":808,"line":1932},22,[806,1934,1935],{},"        rotateRight(rpmSetpoints);\n",[806,1937,1939],{"class":808,"line":1938},23,[806,1940,1941],{},"        System.out.println(rpmSetpoints);\n",[806,1943,1945],{"class":808,"line":1944},24,[806,1946,848],{},[806,1948,1950],{"class":808,"line":1949},25,[806,1951,860],{},[768,1953,1954,1058,1957,1960,1961,1964,1965,1968,1969,1972,1973,1960,1976,1979,1980,1983,1984,1960,1987,1990,1991,1994,1995,1997,1998,2001,2002,2005],{},[1032,1955,1956],{},"Why this order:",[772,1958,1959],{},"last"," (",[772,1962,1963],{},"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 (",[772,1966,1967],{},"b",", ",[772,1970,1971],{},"i",") then shifts every element up one index at a time, working backward from the end so each ",[772,1974,1975],{},"set(i, ...)",[772,1977,1978],{},"e",") copies from a slot that hasn't been overwritten yet. The loop's closing brace (",[772,1981,1982],{},"a",") comes before the final ",[772,1985,1986],{},"set(0, last)",[772,1988,1989],{},"h","), which must happen last, once the shifting is done. The method's closing brace (",[772,1992,1993],{},"c",") is always last. The surrounding class, import, and ",[772,1996,1756],{}," (which creates ",[772,1999,2000],{},"rpmSetpoints"," and calls ",[772,2003,2004],{},"rotateRight",") are the given scaffold.",[1132,2007,1134],{},{"title":802,"searchDepth":815,"depth":815,"links":2009},[2010,2011],{"id":1612,"depth":815,"text":1613},{"id":1746,"depth":815,"text":1747},{"outlineRef":1148,"pairsWith":1599,"status":2013},"new — authored exercises (Multiple Choice + Micro-Parsons)",{"title":752,"description":802},"iv3VimEWVBP9siUTwS9wu1AKuRLDn0_FFcFSCv6VIkw",1790274944466]