[{"data":1,"prerenderedAt":2692},["ShallowReactive",2],{"item-lessons-light-ch10-2d-arrays":3,"item-examples-light-ch10-2d-arrays":444,"item-exercises-light-ch10-2d-arrays":753,"item-lesson-full-ch10-2d-arrays-10.2":1070,"item-example-full-ch10-2d-arrays-10.2":1483,"item-exercise-full-ch10-2d-arrays-10.2":1894},[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":178,"body":1072,"description":1094,"extension":1477,"meta":1478,"navigation":1224,"path":177,"seo":1481,"stem":179,"__hash__":1482},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops.md",{"type":1073,"value":1074,"toc":1469},"minimark",[1075,1079,1084,1088,1148,1163,1167,1175,1269,1272,1276,1279,1315,1330,1334,1349,1390,1394,1433,1437,1454,1465],[1076,1077,178],"h1",{"id":1078},"_2d-array-traversals-nested-loops",[1080,1081,1083],"h2",{"id":1082},"nested-loops","Nested Loops",[1085,1086,1087],"p",{},"Since a 2D array is really an array of arrays, traversing every element takes a loop inside a loop — the outer loop walks the rows, the inner loop walks the columns of whichever row the outer loop is currently on:",[1089,1090,1095],"pre",{"className":1091,"code":1092,"language":1093,"meta":1094,"style":1094},"language-java shiki shiki-themes github-light github-dark","double[][] moduleCurrents = { {12.1, 11.8, 40.2}, {12.0, 11.9, 12.1} };\nfor (int row = 0; row \u003C moduleCurrents.length; row++)\n{\n    for (int col = 0; col \u003C moduleCurrents[0].length; col++)\n    {\n        System.out.println(moduleCurrents[row][col]);\n    }\n}\n","java","",[1096,1097,1098,1106,1112,1118,1124,1130,1136,1142],"code",{"__ignoreMap":1094},[1099,1100,1103],"span",{"class":1101,"line":1102},"line",1,[1099,1104,1105],{},"double[][] moduleCurrents = { {12.1, 11.8, 40.2}, {12.0, 11.9, 12.1} };\n",[1099,1107,1109],{"class":1101,"line":1108},2,[1099,1110,1111],{},"for (int row = 0; row \u003C moduleCurrents.length; row++)\n",[1099,1113,1115],{"class":1101,"line":1114},3,[1099,1116,1117],{},"{\n",[1099,1119,1121],{"class":1101,"line":1120},4,[1099,1122,1123],{},"    for (int col = 0; col \u003C moduleCurrents[0].length; col++)\n",[1099,1125,1127],{"class":1101,"line":1126},5,[1099,1128,1129],{},"    {\n",[1099,1131,1133],{"class":1101,"line":1132},6,[1099,1134,1135],{},"        System.out.println(moduleCurrents[row][col]);\n",[1099,1137,1139],{"class":1101,"line":1138},7,[1099,1140,1141],{},"    }\n",[1099,1143,1145],{"class":1101,"line":1144},8,[1099,1146,1147],{},"}\n",[1085,1149,1150,1151,1154,1155,1158,1159,1162],{},"The loop body runs ",[1096,1152,1153],{},"rows × columns"," times total. ",[1096,1156,1157],{},"moduleCurrents.length"," is the row bound; ",[1096,1160,1161],{},"moduleCurrents[0].length"," is the column bound (safe here because the array is rectangular — every row has the same length).",[1080,1164,1166],{"id":1165},"row-major-vs-column-major","Row-Major vs. Column-Major",[1085,1168,1169,1170,1174],{},"Which index changes in the ",[1171,1172,1173],"em",{},"outer"," loop decides the traversal order:",[1089,1176,1178],{"className":1091,"code":1177,"language":1093,"meta":1094,"style":1094},"\u002F\u002F Row-major: finish one module's samples before moving to the next module\nfor (int row = 0; row \u003C moduleCurrents.length; row++)\n{\n    for (int col = 0; col \u003C moduleCurrents[0].length; col++)\n    {\n        \u002F\u002F stand-in for whatever this pass needs to do\n        System.out.println(moduleCurrents[row][col]);\n    }\n}\n\n\u002F\u002F Column-major: sample #0 across every module, then sample #1, and so on\nfor (int col = 0; col \u003C moduleCurrents[0].length; col++)\n{\n    for (int row = 0; row \u003C moduleCurrents.length; row++)\n    {\n        System.out.println(moduleCurrents[row][col]);\n    }\n}\n",[1096,1179,1180,1185,1189,1193,1197,1201,1206,1210,1214,1219,1226,1232,1238,1243,1249,1254,1259,1264],{"__ignoreMap":1094},[1099,1181,1182],{"class":1101,"line":1102},[1099,1183,1184],{},"\u002F\u002F Row-major: finish one module's samples before moving to the next module\n",[1099,1186,1187],{"class":1101,"line":1108},[1099,1188,1111],{},[1099,1190,1191],{"class":1101,"line":1114},[1099,1192,1117],{},[1099,1194,1195],{"class":1101,"line":1120},[1099,1196,1123],{},[1099,1198,1199],{"class":1101,"line":1126},[1099,1200,1129],{},[1099,1202,1203],{"class":1101,"line":1132},[1099,1204,1205],{},"        \u002F\u002F stand-in for whatever this pass needs to do\n",[1099,1207,1208],{"class":1101,"line":1138},[1099,1209,1135],{},[1099,1211,1212],{"class":1101,"line":1144},[1099,1213,1141],{},[1099,1215,1217],{"class":1101,"line":1216},9,[1099,1218,1147],{},[1099,1220,1222],{"class":1101,"line":1221},10,[1099,1223,1225],{"emptyLinePlaceholder":1224},true,"\n",[1099,1227,1229],{"class":1101,"line":1228},11,[1099,1230,1231],{},"\u002F\u002F Column-major: sample #0 across every module, then sample #1, and so on\n",[1099,1233,1235],{"class":1101,"line":1234},12,[1099,1236,1237],{},"for (int col = 0; col \u003C moduleCurrents[0].length; col++)\n",[1099,1239,1241],{"class":1101,"line":1240},13,[1099,1242,1117],{},[1099,1244,1246],{"class":1101,"line":1245},14,[1099,1247,1248],{},"    for (int row = 0; row \u003C moduleCurrents.length; row++)\n",[1099,1250,1252],{"class":1101,"line":1251},15,[1099,1253,1129],{},[1099,1255,1257],{"class":1101,"line":1256},16,[1099,1258,1135],{},[1099,1260,1262],{"class":1101,"line":1261},17,[1099,1263,1141],{},[1099,1265,1267],{"class":1101,"line":1266},18,[1099,1268,1147],{},[1085,1270,1271],{},"Row-major is the natural choice for \"how did this one module behave over time.\" Column-major is the natural choice for \"what was total robot current draw at this one instant\" — e.g. checking whether all 4 modules spiked simultaneously (a brownout risk), which row-major order would never surface directly.",[1080,1273,1275],{"id":1274},"enhanced-for-each-nested","Enhanced For-Each, Nested",[1085,1277,1278],{},"A nested for-each also traverses a 2D array, with no indices — but only when you don't need row\u002Fcolumn numbers or in-place modification of primitive values:",[1089,1280,1282],{"className":1091,"code":1281,"language":1093,"meta":1094,"style":1094},"for (double[] moduleRow : moduleCurrents)  \u002F\u002F outer variable is a 1D array — one row\n{\n    for (double sample : moduleRow)        \u002F\u002F inner variable matches the element type\n    {\n        System.out.println(sample);\n    }\n}\n",[1096,1283,1284,1289,1293,1298,1302,1307,1311],{"__ignoreMap":1094},[1099,1285,1286],{"class":1101,"line":1102},[1099,1287,1288],{},"for (double[] moduleRow : moduleCurrents)  \u002F\u002F outer variable is a 1D array — one row\n",[1099,1290,1291],{"class":1101,"line":1108},[1099,1292,1117],{},[1099,1294,1295],{"class":1101,"line":1114},[1099,1296,1297],{},"    for (double sample : moduleRow)        \u002F\u002F inner variable matches the element type\n",[1099,1299,1300],{"class":1101,"line":1120},[1099,1301,1129],{},[1099,1303,1304],{"class":1101,"line":1126},[1099,1305,1306],{},"        System.out.println(sample);\n",[1099,1308,1309],{"class":1101,"line":1132},[1099,1310,1141],{},[1099,1312,1313],{"class":1101,"line":1138},[1099,1314,1147],{},[1085,1316,1317,1318,1321,1322,1325,1326,1329],{},"Pattern to remember: the ",[1319,1320,1173],"strong",{}," loop variable is typed as a 1D array (a whole row); the ",[1319,1323,1324],{},"inner"," loop variable is typed as one element. As with 1D for-each (Lesson 9.4), reassigning ",[1096,1327,1328],{},"sample"," inside the loop does not change what's stored in the array.",[1080,1331,1333],{"id":1332},"_2d-arrays-of-objects-are-different","2D Arrays of Objects Are Different",[1085,1335,1336,1337,1340,1341,1344,1345,1348],{},"The for-each modification limit above is about ",[1171,1338,1339],{},"primitives",". A 2D array of objects — like a grid of ",[1096,1342,1343],{},"DriveMotor"," objects (the team's own motor class, Lesson 4.4), or a vision system's ",[1096,1346,1347],{},"Pixel[][]"," — can still have its objects mutated through a for-each loop, because you're calling a method on the object the loop variable refers to, not reassigning the array slot itself:",[1089,1350,1352],{"className":1091,"code":1351,"language":1093,"meta":1094,"style":1094},"\u002F\u002F driveMotors is a DriveMotor[][], one row per swerve module\nfor (DriveMotor[] moduleRow : driveMotors)\n{\n    for (DriveMotor motor : moduleRow)\n    {\n        motor.setThrottle(0.0); \u002F\u002F mutates the real object — this works\n    }\n}\n",[1096,1353,1354,1359,1364,1368,1373,1377,1382,1386],{"__ignoreMap":1094},[1099,1355,1356],{"class":1101,"line":1102},[1099,1357,1358],{},"\u002F\u002F driveMotors is a DriveMotor[][], one row per swerve module\n",[1099,1360,1361],{"class":1101,"line":1108},[1099,1362,1363],{},"for (DriveMotor[] moduleRow : driveMotors)\n",[1099,1365,1366],{"class":1101,"line":1114},[1099,1367,1117],{},[1099,1369,1370],{"class":1101,"line":1120},[1099,1371,1372],{},"    for (DriveMotor motor : moduleRow)\n",[1099,1374,1375],{"class":1101,"line":1126},[1099,1376,1129],{},[1099,1378,1379],{"class":1101,"line":1132},[1099,1380,1381],{},"        motor.setThrottle(0.0); \u002F\u002F mutates the real object — this works\n",[1099,1383,1384],{"class":1101,"line":1138},[1099,1385,1141],{},[1099,1387,1388],{"class":1101,"line":1144},[1099,1389,1147],{},[1080,1391,1393],{"id":1392},"common-pitfalls","Common Pitfalls",[1395,1396,1397,1417,1427],"ul",{},[1398,1399,1400,1406,1407,1410,1411,1413,1414,1416],"li",{},[1319,1401,1402,1403,1405],{},"Using ",[1096,1404,1157],{}," as the inner loop's bound."," The inner loop walks ",[1171,1408,1409],{},"columns",", so its bound is ",[1096,1412,1161],{},", not ",[1096,1415,1157],{}," (the row count).",[1398,1418,1419,1422,1423,1426],{},[1319,1420,1421],{},"Expecting for-each to let you assign into a primitive 2D array."," ",[1096,1424,1425],{},"for (double sample : moduleRow) { sample = 0.0; }"," changes nothing — same rule as 1D arrays.",[1398,1428,1429,1432],{},[1319,1430,1431],{},"Confusing row-major and column-major with \"correct\" and \"incorrect.\""," Neither is wrong — pick whichever matches what the question actually asks (per-module trends vs. per-instant totals).",[1080,1434,1436],{"id":1435},"key-takeaways","Key Takeaways",[1395,1438,1439,1442,1445,1448],{},[1398,1440,1441],{},"Traversing a full 2D array needs nested loops: outer for rows, inner for columns.",[1398,1443,1444],{},"Row-major order finishes one row before moving to the next; column-major order finishes one column (across all rows) before moving to the next — which one to use depends on what you're computing.",[1398,1446,1447],{},"A nested for-each loop traverses a 2D array with no indices; its outer variable is a 1D array (one row), its inner variable matches the element type.",[1398,1449,1450,1451,1453],{},"For-each can't modify a primitive 2D array's stored values, but it can call mutator methods on objects the array holds (like ",[1096,1452,1343],{},").",[1085,1455,1456,1457,1460,1461,1464],{},"Derived from ",[1096,1458,1459],{},"csawesome-2026",": ",[1096,1462,1463],{},"unit-4-data-collections\u002F4.12-2d-array-traversals-nested-loops.md"," (CSA 4.12)",[1466,1467,1468],"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":1094,"searchDepth":1108,"depth":1108,"links":1470},[1471,1472,1473,1474,1475,1476],{"id":1082,"depth":1108,"text":1083},{"id":1165,"depth":1108,"text":1166},{"id":1274,"depth":1108,"text":1275},{"id":1332,"depth":1108,"text":1333},{"id":1392,"depth":1108,"text":1393},{"id":1435,"depth":1108,"text":1436},"md",{"outlineRef":1479,"status":1480},"10.2 — 2D Array Traversals: Nested Loops (CSA 4.12)","new — authored lesson",{"title":178,"description":1094},"oU5dJYfzE9a3ObYozu189vvr9glVKRFI5nanSKXW8_0",{"id":1484,"title":615,"body":1485,"description":1094,"extension":1477,"meta":1889,"navigation":1224,"path":614,"seo":1892,"stem":616,"__hash__":1893},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops.md",{"type":1073,"value":1486,"toc":1879},[1487,1490,1494,1497,1501,1516,1525,1529,1540,1581,1584,1592,1614,1618,1624,1663,1665,1671,1674,1678,1689,1729,1732,1737,1741,1744,1783,1792,1796,1803,1847,1851,1877],[1076,1488,615],{"id":1489},"_2d-array-traversals-nested-loops-worked-example",[1080,1491,1493],{"id":1492},"problem","Problem",[1085,1495,1496],{},"The robot has a small status LED panel, 2 rows by 3 columns, and each LED's brightness is stored as a number from 0 (off) to 255 (full). Print the panel one row at a time, then one column at a time, then print it again without using any indices. Finally, turn every LED off (set it to 0), and make sure the array really changes.",[1080,1498,1500],{"id":1499},"step-1-plan-it-first","Step 1: Plan It First",[1502,1503,1504,1507,1510,1513],"ol",{},[1398,1505,1506],{},"Row by row: outer loop over rows, inner loop over columns (row-major).",[1398,1508,1509],{},"Column by column: outer loop over columns, inner loop over rows (column-major).",[1398,1511,1512],{},"No indices needed: nested for-each.",[1398,1514,1515],{},"Turning LEDs off changes stored values, so for-each won't work. An indexed nested loop is needed.",[1089,1517,1519],{"className":1091,"code":1518,"language":1093,"meta":1094,"style":1094},"int[][] ledBrightness = { {255, 0, 128}, {64, 255, 0} };\n",[1096,1520,1521],{"__ignoreMap":1094},[1099,1522,1523],{"class":1101,"line":1102},[1099,1524,1518],{},[1080,1526,1528],{"id":1527},"step-2-row-by-row-row-major","Step 2: Row by Row — Row-Major",[1085,1530,1531,1532,1535,1536,1539],{},"The outer loop picks a row, and the inner loop walks every column in that row before the outer loop moves on. ",[1096,1533,1534],{},"System.out.print"," keeps a row's values on one line, and the ",[1096,1537,1538],{},"println()"," after the inner loop ends that line:",[1089,1541,1543],{"className":1091,"code":1542,"language":1093,"meta":1094,"style":1094},"for (int row = 0; row \u003C ledBrightness.length; row++)\n{\n    for (int col = 0; col \u003C ledBrightness[0].length; col++)\n    {\n        System.out.print(ledBrightness[row][col] + \" \");\n    }\n    System.out.println();\n}\n",[1096,1544,1545,1550,1554,1559,1563,1568,1572,1577],{"__ignoreMap":1094},[1099,1546,1547],{"class":1101,"line":1102},[1099,1548,1549],{},"for (int row = 0; row \u003C ledBrightness.length; row++)\n",[1099,1551,1552],{"class":1101,"line":1108},[1099,1553,1117],{},[1099,1555,1556],{"class":1101,"line":1114},[1099,1557,1558],{},"    for (int col = 0; col \u003C ledBrightness[0].length; col++)\n",[1099,1560,1561],{"class":1101,"line":1120},[1099,1562,1129],{},[1099,1564,1565],{"class":1101,"line":1126},[1099,1566,1567],{},"        System.out.print(ledBrightness[row][col] + \" \");\n",[1099,1569,1570],{"class":1101,"line":1132},[1099,1571,1141],{},[1099,1573,1574],{"class":1101,"line":1138},[1099,1575,1576],{},"    System.out.println();\n",[1099,1578,1579],{"class":1101,"line":1144},[1099,1580,1147],{},[1085,1582,1583],{},"Output:",[1089,1585,1590],{"className":1586,"code":1588,"language":1589},[1587],"language-text","255 0 128 \n64 255 0 \n","text",[1096,1591,1588],{"__ignoreMap":1094},[1085,1593,1594,1595,1598,1599,1602,1603,1605,1606,1609,1610,1613],{},"The outer bound is ",[1096,1596,1597],{},"ledBrightness.length"," (2 rows), and the inner bound is ",[1096,1600,1601],{},"ledBrightness[0].length"," (3 columns). Swapping just the inner bound to ",[1096,1604,1597],{}," would make the inner loop stop after only 2 of the 3 columns (it would compile, but silently skip data); swapping both bounds throws ",[1096,1607,1608],{},"ArrayIndexOutOfBoundsException"," once ",[1096,1611,1612],{},"row"," reaches 2, since there is no third row.",[1080,1615,1617],{"id":1616},"step-3-column-by-column-column-major","Step 3: Column by Column — Column-Major",[1085,1619,1620,1621,1623],{},"Swapping which index the ",[1171,1622,1173],{}," loop controls changes the order. Now each printed line is one column: the top LED, then the bottom LED below it:",[1089,1625,1627],{"className":1091,"code":1626,"language":1093,"meta":1094,"style":1094},"for (int col = 0; col \u003C ledBrightness[0].length; col++)\n{\n    for (int row = 0; row \u003C ledBrightness.length; row++)\n    {\n        System.out.print(ledBrightness[row][col] + \" \");\n    }\n    System.out.println();\n}\n",[1096,1628,1629,1634,1638,1643,1647,1651,1655,1659],{"__ignoreMap":1094},[1099,1630,1631],{"class":1101,"line":1102},[1099,1632,1633],{},"for (int col = 0; col \u003C ledBrightness[0].length; col++)\n",[1099,1635,1636],{"class":1101,"line":1108},[1099,1637,1117],{},[1099,1639,1640],{"class":1101,"line":1114},[1099,1641,1642],{},"    for (int row = 0; row \u003C ledBrightness.length; row++)\n",[1099,1644,1645],{"class":1101,"line":1120},[1099,1646,1129],{},[1099,1648,1649],{"class":1101,"line":1126},[1099,1650,1567],{},[1099,1652,1653],{"class":1101,"line":1132},[1099,1654,1141],{},[1099,1656,1657],{"class":1101,"line":1138},[1099,1658,1576],{},[1099,1660,1661],{"class":1101,"line":1144},[1099,1662,1147],{},[1085,1664,1583],{},[1089,1666,1669],{"className":1667,"code":1668,"language":1589},[1587],"255 64 \n0 255 \n128 0 \n",[1096,1670,1668],{"__ignoreMap":1094},[1085,1672,1673],{},"Same 6 values, visited in a different order. Neither order is \"correct.\" Row-major answers \"what does each row of the panel look like,\" and column-major answers \"what does each column look like.\"",[1080,1675,1677],{"id":1676},"step-4-no-indices-needed-nested-for-each","Step 4: No Indices Needed — Nested For-Each",[1085,1679,1680,1681,1684,1685,1688],{},"For printing, the row and column numbers are never actually used, so a nested for-each works too. The outer variable is one whole row (an ",[1096,1682,1683],{},"int[]","), and the inner variable is one element (an ",[1096,1686,1687],{},"int","):",[1089,1690,1692],{"className":1091,"code":1691,"language":1093,"meta":1094,"style":1094},"for (int[] ledRow : ledBrightness)\n{\n    for (int brightness : ledRow)\n    {\n        System.out.print(brightness + \" \");\n    }\n    System.out.println();\n}\n",[1096,1693,1694,1699,1703,1708,1712,1717,1721,1725],{"__ignoreMap":1094},[1099,1695,1696],{"class":1101,"line":1102},[1099,1697,1698],{},"for (int[] ledRow : ledBrightness)\n",[1099,1700,1701],{"class":1101,"line":1108},[1099,1702,1117],{},[1099,1704,1705],{"class":1101,"line":1114},[1099,1706,1707],{},"    for (int brightness : ledRow)\n",[1099,1709,1710],{"class":1101,"line":1120},[1099,1711,1129],{},[1099,1713,1714],{"class":1101,"line":1126},[1099,1715,1716],{},"        System.out.print(brightness + \" \");\n",[1099,1718,1719],{"class":1101,"line":1132},[1099,1720,1141],{},[1099,1722,1723],{"class":1101,"line":1138},[1099,1724,1576],{},[1099,1726,1727],{"class":1101,"line":1144},[1099,1728,1147],{},[1085,1730,1731],{},"Output (same as row-major, since for-each always goes row by row):",[1089,1733,1735],{"className":1734,"code":1588,"language":1589},[1587],[1096,1736,1588],{"__ignoreMap":1094},[1080,1738,1740],{"id":1739},"step-5-turning-every-led-off-why-for-each-wont-work","Step 5: Turning Every LED Off — Why For-Each Won't Work",[1085,1742,1743],{},"A tempting first attempt:",[1089,1745,1747],{"className":1091,"code":1746,"language":1093,"meta":1094,"style":1094},"for (int[] ledRow : ledBrightness)\n{\n    for (int brightness : ledRow)\n    {\n        brightness = 0; \u002F\u002F compiles, runs, and changes nothing\n    }\n}\nSystem.out.println(ledBrightness[0][0]); \u002F\u002F still 255\n",[1096,1748,1749,1753,1757,1761,1765,1770,1774,1778],{"__ignoreMap":1094},[1099,1750,1751],{"class":1101,"line":1102},[1099,1752,1698],{},[1099,1754,1755],{"class":1101,"line":1108},[1099,1756,1117],{},[1099,1758,1759],{"class":1101,"line":1114},[1099,1760,1707],{},[1099,1762,1763],{"class":1101,"line":1120},[1099,1764,1129],{},[1099,1766,1767],{"class":1101,"line":1126},[1099,1768,1769],{},"        brightness = 0; \u002F\u002F compiles, runs, and changes nothing\n",[1099,1771,1772],{"class":1101,"line":1132},[1099,1773,1141],{},[1099,1775,1776],{"class":1101,"line":1138},[1099,1777,1147],{},[1099,1779,1780],{"class":1101,"line":1144},[1099,1781,1782],{},"System.out.println(ledBrightness[0][0]); \u002F\u002F still 255\n",[1085,1784,1785,1788,1789,1791],{},[1096,1786,1787],{},"brightness"," is a local copy of each ",[1096,1790,1687],{},". Reassigning it never touches the array, which is the same rule as 1D for-each loops.",[1080,1793,1795],{"id":1794},"step-6-turning-every-led-off-indexed-nested-loop-that-works","Step 6: Turning Every LED Off — Indexed Nested Loop That Works",[1085,1797,1798,1799,1802],{},"Writing into the array needs the real ",[1096,1800,1801],{},"[row][col]"," position, so this needs indices:",[1089,1804,1806],{"className":1091,"code":1805,"language":1093,"meta":1094,"style":1094},"for (int row = 0; row \u003C ledBrightness.length; row++)\n{\n    for (int col = 0; col \u003C ledBrightness[0].length; col++)\n    {\n        ledBrightness[row][col] = 0;\n    }\n}\nSystem.out.println(ledBrightness[0][0]); \u002F\u002F 0\nSystem.out.println(ledBrightness[1][1]); \u002F\u002F 0\n",[1096,1807,1808,1812,1816,1820,1824,1829,1833,1837,1842],{"__ignoreMap":1094},[1099,1809,1810],{"class":1101,"line":1102},[1099,1811,1549],{},[1099,1813,1814],{"class":1101,"line":1108},[1099,1815,1117],{},[1099,1817,1818],{"class":1101,"line":1114},[1099,1819,1558],{},[1099,1821,1822],{"class":1101,"line":1120},[1099,1823,1129],{},[1099,1825,1826],{"class":1101,"line":1126},[1099,1827,1828],{},"        ledBrightness[row][col] = 0;\n",[1099,1830,1831],{"class":1101,"line":1132},[1099,1832,1141],{},[1099,1834,1835],{"class":1101,"line":1138},[1099,1836,1147],{},[1099,1838,1839],{"class":1101,"line":1144},[1099,1840,1841],{},"System.out.println(ledBrightness[0][0]); \u002F\u002F 0\n",[1099,1843,1844],{"class":1101,"line":1216},[1099,1845,1846],{},"System.out.println(ledBrightness[1][1]); \u002F\u002F 0\n",[1080,1848,1850],{"id":1849},"recap","Recap",[1395,1852,1853,1864,1867,1870],{},[1398,1854,1855,1856,1859,1860,1863],{},"Traversing a whole 2D array takes nested loops. The outer loop's bound is the row count (",[1096,1857,1858],{},"arr.length","), and the inner loop's bound is the column count (",[1096,1861,1862],{},"arr[0].length","), or the other way around for column-major.",[1398,1865,1866],{},"Row-major (rows in the outer loop) finishes a row before moving on. Column-major (columns in the outer loop) finishes a column before moving on.",[1398,1868,1869],{},"A nested for-each traverses in row-major order with no indices. Its outer variable is a 1D array (a row), and its inner variable is one element.",[1398,1871,1872,1873,1876],{},"For-each can't change a primitive 2D array's stored values. Use an indexed nested loop to write into ",[1096,1874,1875],{},"arr[row][col]",".",[1466,1878,1468],{},{"title":1094,"searchDepth":1108,"depth":1108,"links":1880},[1881,1882,1883,1884,1885,1886,1887,1888],{"id":1492,"depth":1108,"text":1493},{"id":1499,"depth":1108,"text":1500},{"id":1527,"depth":1108,"text":1528},{"id":1616,"depth":1108,"text":1617},{"id":1676,"depth":1108,"text":1677},{"id":1739,"depth":1108,"text":1740},{"id":1794,"depth":1108,"text":1795},{"id":1849,"depth":1108,"text":1850},{"outlineRef":1479,"pairsWith":1890,"status":1891},"[`lessons\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops.md`](..\u002F..\u002Flessons\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops.md)","new — authored worked example (fully solved, walked step by step — not a problem to attempt)",{"title":615,"description":1094},"T4QMnSViGncQGZxoxZtBoMxhysugqABJrB_o8sGkZQg",{"id":1895,"title":924,"body":1896,"description":1094,"extension":1477,"meta":2688,"navigation":1224,"path":923,"seo":2690,"stem":925,"__hash__":2691},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops.md",{"type":1073,"value":1897,"toc":2683},[1898,1901,1905,1911,1952,1955,1960,1996,2002,2038,2055,2059,2065,2101,2104,2154,2159,2228,2305,2309,2315,2347,2350,2380,2388,2393,2429,2434,2550,2555,2668,2681],[1076,1899,924],{"id":1900},"_2d-array-traversals-nested-loops-exercises",[1080,1902,1904],{"id":1903},"multiple-choice","Multiple Choice",[1085,1906,1907,1910],{},[1319,1908,1909],{},"Question:"," Robot inspection scores are stored with one row per inspector and one column per checklist item. A teammate writes this loop to print every score:",[1089,1912,1914],{"className":1091,"code":1913,"language":1093,"meta":1094,"style":1094},"int[][] inspectionScores = { {5, 4, 3}, {2, 5, 4} };\nfor (int row = 0; row \u003C inspectionScores.length; row++)\n{\n    for (int col = 0; col \u003C inspectionScores.length; col++)\n    {\n        System.out.println(inspectionScores[row][col]);\n    }\n}\n",[1096,1915,1916,1921,1926,1930,1935,1939,1944,1948],{"__ignoreMap":1094},[1099,1917,1918],{"class":1101,"line":1102},[1099,1919,1920],{},"int[][] inspectionScores = { {5, 4, 3}, {2, 5, 4} };\n",[1099,1922,1923],{"class":1101,"line":1108},[1099,1924,1925],{},"for (int row = 0; row \u003C inspectionScores.length; row++)\n",[1099,1927,1928],{"class":1101,"line":1114},[1099,1929,1117],{},[1099,1931,1932],{"class":1101,"line":1120},[1099,1933,1934],{},"    for (int col = 0; col \u003C inspectionScores.length; col++)\n",[1099,1936,1937],{"class":1101,"line":1126},[1099,1938,1129],{},[1099,1940,1941],{"class":1101,"line":1132},[1099,1942,1943],{},"        System.out.println(inspectionScores[row][col]);\n",[1099,1945,1946],{"class":1101,"line":1138},[1099,1947,1141],{},[1099,1949,1950],{"class":1101,"line":1144},[1099,1951,1147],{},[1085,1953,1954],{},"What happens when it runs?",[1085,1956,1957],{},[1319,1958,1959],{},"Options:",[1395,1961,1962,1978,1981,1986],{},[1398,1963,1964,1965,1968,1969,1968,1972,1968,1975,1977],{},"A. It prints ",[1096,1966,1967],{},"5",", ",[1096,1970,1971],{},"4",[1096,1973,1974],{},"2",[1096,1976,1967],{}," — the last column is never printed",[1398,1979,1980],{},"B. It prints all 6 scores",[1398,1982,1983,1984],{},"C. It throws an ",[1096,1985,1608],{},[1398,1987,1988,1989,1968,1991,1968,1993],{},"D. It prints only the first row: ",[1096,1990,1967],{},[1096,1992,1971],{},[1096,1994,1995],{},"3",[1085,1997,1998,2001],{},[1319,1999,2000],{},"Answer:"," A",[1085,2003,2004,1406,2007,2009,2010,2013,2014,2017,2018,2021,2022,2025,2026,2029,2030,2032,2033,2025,2035,2037],{},[1319,2005,2006],{},"Why:",[1171,2008,1409],{},", so its bound should be ",[1096,2011,2012],{},"inspectionScores[0].length"," (3). Instead it uses ",[1096,2015,2016],{},"inspectionScores.length",", the row count (2). So ",[1096,2019,2020],{},"col"," only ever reaches ",[1096,2023,2024],{},"0"," and ",[1096,2027,2028],{},"1",", and column ",[1096,2031,1974],{}," (the scores ",[1096,2034,1995],{},[1096,2036,1971],{},") is silently skipped in both rows.",[1395,2039,2040,2045,2052],{},[1398,2041,2042,2043,1876],{},"B is wrong — that's what the loop would print with the correct inner bound, ",[1096,2044,2012],{},[1398,2046,2047,2048,2051],{},"C is wrong — here the wrong bound (2) is ",[1171,2049,2050],{},"smaller"," than the real column count (3), so no index goes past the end. It skips data instead of crashing. (If the array had more rows than columns, the same bug would throw.)",[1398,2053,2054],{},"D is wrong — the outer loop's bound is correct, so both rows are visited. Each row is just missing its last column.",[1080,2056,2058],{"id":2057},"micro-parsons","Micro-Parsons",[1085,2060,2061,2064],{},[1319,2062,2063],{},"Problem:"," Given this class and main method, reorder the fragments below into the method body that creates a 2D array of arm-angle readings (one row per practice run, one column per checkpoint) and prints them in column-major order: every run's reading at checkpoint 0, then every run's reading at checkpoint 1, and so on.",[1089,2066,2068],{"className":1091,"code":2067,"language":1093,"meta":1094,"style":1094},"public class ArmCheckpoints\n{\n    public static void main(String[] args)\n    {\n        \u002F\u002F fragments go here\n    }\n}\n",[1096,2069,2070,2075,2079,2084,2088,2093,2097],{"__ignoreMap":1094},[1099,2071,2072],{"class":1101,"line":1102},[1099,2073,2074],{},"public class ArmCheckpoints\n",[1099,2076,2077],{"class":1101,"line":1108},[1099,2078,1117],{},[1099,2080,2081],{"class":1101,"line":1114},[1099,2082,2083],{},"    public static void main(String[] args)\n",[1099,2085,2086],{"class":1101,"line":1120},[1099,2087,1129],{},[1099,2089,2090],{"class":1101,"line":1126},[1099,2091,2092],{},"        \u002F\u002F fragments go here\n",[1099,2094,2095],{"class":1101,"line":1132},[1099,2096,1141],{},[1099,2098,2099],{"class":1101,"line":1138},[1099,2100,1147],{},[1085,2102,2103],{},"Reorder the fragments below to complete it:",[1395,2105,2106,2112,2118,2124,2130,2136,2142,2148],{},[1398,2107,2108,2109],{},"a. ",[1096,2110,2111],{},"            {",[1398,2113,2114,2115],{},"b. ",[1096,2116,2117],{},"        for (int col = 0; col \u003C armAngles[0].length; col++)",[1398,2119,2120,2121],{},"c. ",[1096,2122,2123],{},"            }",[1398,2125,2126,2127],{},"d. ",[1096,2128,2129],{},"        int[][] armAngles = { {30, 60, 90}, {32, 58, 91} };",[1398,2131,2132,2133],{},"e. ",[1096,2134,2135],{},"                System.out.println(armAngles[row][col]);",[1398,2137,2138,2139],{},"f. ",[1096,2140,2141],{},"        {",[1398,2143,2144,2145],{},"g. ",[1096,2146,2147],{},"            for (int row = 0; row \u003C armAngles.length; row++)",[1398,2149,2150,2151],{},"h. ",[1096,2152,2153],{},"        }",[1085,2155,2156,2158],{},[1319,2157,2000],{}," d, b, f, g, a, e, c, h",[1089,2160,2162],{"className":1091,"code":2161,"language":1093,"meta":1094,"style":1094},"public class ArmCheckpoints\n{\n    public static void main(String[] args)\n    {\n        int[][] armAngles = { {30, 60, 90}, {32, 58, 91} };\n        for (int col = 0; col \u003C armAngles[0].length; col++)\n        {\n            for (int row = 0; row \u003C armAngles.length; row++)\n            {\n                System.out.println(armAngles[row][col]);\n            }\n        }\n    }\n}\n",[1096,2163,2164,2168,2172,2176,2180,2185,2190,2195,2200,2205,2210,2215,2220,2224],{"__ignoreMap":1094},[1099,2165,2166],{"class":1101,"line":1102},[1099,2167,2074],{},[1099,2169,2170],{"class":1101,"line":1108},[1099,2171,1117],{},[1099,2173,2174],{"class":1101,"line":1114},[1099,2175,2083],{},[1099,2177,2178],{"class":1101,"line":1120},[1099,2179,1129],{},[1099,2181,2182],{"class":1101,"line":1126},[1099,2183,2184],{},"        int[][] armAngles = { {30, 60, 90}, {32, 58, 91} };\n",[1099,2186,2187],{"class":1101,"line":1132},[1099,2188,2189],{},"        for (int col = 0; col \u003C armAngles[0].length; col++)\n",[1099,2191,2192],{"class":1101,"line":1138},[1099,2193,2194],{},"        {\n",[1099,2196,2197],{"class":1101,"line":1144},[1099,2198,2199],{},"            for (int row = 0; row \u003C armAngles.length; row++)\n",[1099,2201,2202],{"class":1101,"line":1216},[1099,2203,2204],{},"            {\n",[1099,2206,2207],{"class":1101,"line":1221},[1099,2208,2209],{},"                System.out.println(armAngles[row][col]);\n",[1099,2211,2212],{"class":1101,"line":1228},[1099,2213,2214],{},"            }\n",[1099,2216,2217],{"class":1101,"line":1234},[1099,2218,2219],{},"        }\n",[1099,2221,2222],{"class":1101,"line":1240},[1099,2223,1141],{},[1099,2225,2226],{"class":1101,"line":1245},[1099,2227,1147],{},[1085,2229,2230,2233,2234,2237,2238,2241,2242,2244,2245,2248,2249,2252,2253,2244,2255,2248,2258,2261,2262,2265,2266,2269,2270,2273,2274,1968,2277,1968,2280,1968,2283,1968,2286,1968,2289,2292,2293,2296,2297,2300,2301,2304],{},[1319,2231,2232],{},"Why this order:"," The array (",[1096,2235,2236],{},"d",") has to exist before either loop can read its lengths. Column-major means the ",[1171,2239,2240],{},"column"," index changes in the outer loop, so the ",[1096,2243,2020],{}," loop (",[1096,2246,2247],{},"b",") and its brace (",[1096,2250,2251],{},"f",") come first. The ",[1096,2254,1612],{},[1096,2256,2257],{},"g",[1096,2259,2260],{},"a",") are nested inside it. Each loop's bound has to match what it walks: ",[1096,2263,2264],{},"armAngles[0].length"," for columns, ",[1096,2267,2268],{},"armAngles.length"," for rows. The print (",[1096,2271,2272],{},"e",") sits inside both loops, so it runs once per element and prints ",[1096,2275,2276],{},"30",[1096,2278,2279],{},"32",[1096,2281,2282],{},"60",[1096,2284,2285],{},"58",[1096,2287,2288],{},"90",[1096,2290,2291],{},"91",". The braces close in reverse of how they opened: the inner loop's (",[1096,2294,2295],{},"c",") before the outer loop's (",[1096,2298,2299],{},"h","). The class and ",[1096,2302,2303],{},"main"," method are the given scaffold. Only the array declaration and the nested loop needed reordering.",[1080,2306,2308],{"id":2307},"coding","Coding",[1085,2310,2311,2314],{},[1319,2312,2313],{},"Mode:"," harness",[1085,2316,2317,2319,2320,2323,2324,2327,2328,2331,2332,2335,2336,2339,2340,2343,2344,2346],{},[1319,2318,2063],{}," Swerve telemetry is stored in an ",[1096,2321,2322],{},"int[][]"," of current draw in amps, with one row per\nmodule and one column per sample (the same layout as the lesson's ",[1096,2325,2326],{},"moduleCurrents","). A sample is a\n",[1319,2329,2330],{},"simultaneous spike"," when ",[1319,2333,2334],{},"every"," module reads at least ",[1096,2337,2338],{},"threshold"," amps in that column. Write\n",[1096,2341,2342],{},"countSimultaneousSpikes",", which returns how many sample columns are simultaneous spikes. A reading\nequal to ",[1096,2345,2338],{}," counts as at or above it. Every array has at least one row and one column.",[1085,2348,2349],{},"Examples:",[1395,2351,2352,2366,2373],{},[1398,2353,2354,2357,2358,2360,2361,2025,2363,2365],{},[1096,2355,2356],{},"countSimultaneousSpikes(new int[][] { {40, 12, 41}, {42, 11, 45} }, 40)"," returns ",[1096,2359,1974],{}," (columns ",[1096,2362,2024],{},[1096,2364,1974],{},")",[1398,2367,2368,2357,2371],{},[1096,2369,2370],{},"countSimultaneousSpikes(new int[][] { {10, 10}, {10, 10} }, 40)",[1096,2372,2024],{},[1398,2374,2375,2357,2378],{},[1096,2376,2377],{},"countSimultaneousSpikes(new int[][] { {50}, {60}, {40} }, 40)",[1096,2379,2028],{},[1085,2381,2382,1422,2385],{},[1319,2383,2384],{},"Signature:",[1096,2386,2387],{},"public static int countSimultaneousSpikes(int[][] currents, int threshold)",[1085,2389,2390],{},[1319,2391,2392],{},"Starter:",[1089,2394,2396],{"className":1091,"code":2395,"language":1093,"meta":1094,"style":1094},"public class Solution\n{\n    public static int countSimultaneousSpikes(int[][] currents, int threshold)\n    {\n        \u002F\u002F TODO: count the columns where every module is at or above threshold\n    }\n}\n",[1096,2397,2398,2403,2407,2412,2416,2421,2425],{"__ignoreMap":1094},[1099,2399,2400],{"class":1101,"line":1102},[1099,2401,2402],{},"public class Solution\n",[1099,2404,2405],{"class":1101,"line":1108},[1099,2406,1117],{},[1099,2408,2409],{"class":1101,"line":1114},[1099,2410,2411],{},"    public static int countSimultaneousSpikes(int[][] currents, int threshold)\n",[1099,2413,2414],{"class":1101,"line":1120},[1099,2415,1129],{},[1099,2417,2418],{"class":1101,"line":1126},[1099,2419,2420],{},"        \u002F\u002F TODO: count the columns where every module is at or above threshold\n",[1099,2422,2423],{"class":1101,"line":1132},[1099,2424,1141],{},[1099,2426,2427],{"class":1101,"line":1138},[1099,2428,1147],{},[1085,2430,2431],{},[1319,2432,2433],{},"Tests:",[2435,2436,2437,2453],"table",{},[2438,2439,2440],"thead",{},[2441,2442,2443,2447,2450],"tr",{},[2444,2445,2446],"th",{},"Visible",[2444,2448,2449],{},"Arguments",[2444,2451,2452],{},"Expected",[2454,2455,2456,2471,2484,2497,2511,2524,2537],"tbody",{},[2441,2457,2458,2462,2467],{},[2459,2460,2461],"td",{},"yes",[2459,2463,2464],{},[1096,2465,2466],{},"new int[][] { {40, 12, 41}, {42, 11, 45} }, 40",[2459,2468,2469],{},[1096,2470,1974],{},[2441,2472,2473,2475,2480],{},[2459,2474,2461],{},[2459,2476,2477],{},[1096,2478,2479],{},"new int[][] { {10, 10}, {10, 10} }, 40",[2459,2481,2482],{},[1096,2483,2024],{},[2441,2485,2486,2488,2493],{},[2459,2487,2461],{},[2459,2489,2490],{},[1096,2491,2492],{},"new int[][] { {50}, {60}, {40} }, 40",[2459,2494,2495],{},[1096,2496,2028],{},[2441,2498,2499,2502,2507],{},[2459,2500,2501],{},"no",[2459,2503,2504],{},[1096,2505,2506],{},"new int[][] { {40, 40, 12}, {40, 13, 40}, {40, 40, 40} }, 40",[2459,2508,2509],{},[1096,2510,2028],{},[2441,2512,2513,2515,2520],{},[2459,2514,2501],{},[2459,2516,2517],{},[1096,2518,2519],{},"new int[][] { {5, 50, 50, 5}, {50, 50, 5, 5} }, 50",[2459,2521,2522],{},[1096,2523,2028],{},[2441,2525,2526,2528,2533],{},[2459,2527,2501],{},[2459,2529,2530],{},[1096,2531,2532],{},"new int[][] { {60, 60, 60}, {60, 60, 60} }, 60",[2459,2534,2535],{},[1096,2536,1995],{},[2441,2538,2539,2541,2546],{},[2459,2540,2501],{},[2459,2542,2543],{},[1096,2544,2545],{},"new int[][] { {39, 90}, {90, 39}, {90, 90} }, 40",[2459,2547,2548],{},[1096,2549,2024],{},[1085,2551,2552],{},[1319,2553,2554],{},"Solution:",[1089,2556,2558],{"className":1091,"code":2557,"language":1093,"meta":1094,"style":1094},"public class Solution\n{\n    public static int countSimultaneousSpikes(int[][] currents, int threshold)\n    {\n        int count = 0;\n        for (int col = 0; col \u003C currents[0].length; col++)\n        {\n            boolean allHigh = true;\n            for (int row = 0; row \u003C currents.length; row++)\n            {\n                if (currents[row][col] \u003C threshold)\n                {\n                    allHigh = false;\n                }\n            }\n            if (allHigh)\n            {\n                count++;\n            }\n        }\n        return count;\n    }\n}\n",[1096,2559,2560,2564,2568,2572,2576,2581,2586,2590,2595,2600,2604,2609,2614,2619,2624,2628,2633,2637,2642,2647,2652,2658,2663],{"__ignoreMap":1094},[1099,2561,2562],{"class":1101,"line":1102},[1099,2563,2402],{},[1099,2565,2566],{"class":1101,"line":1108},[1099,2567,1117],{},[1099,2569,2570],{"class":1101,"line":1114},[1099,2571,2411],{},[1099,2573,2574],{"class":1101,"line":1120},[1099,2575,1129],{},[1099,2577,2578],{"class":1101,"line":1126},[1099,2579,2580],{},"        int count = 0;\n",[1099,2582,2583],{"class":1101,"line":1132},[1099,2584,2585],{},"        for (int col = 0; col \u003C currents[0].length; col++)\n",[1099,2587,2588],{"class":1101,"line":1138},[1099,2589,2194],{},[1099,2591,2592],{"class":1101,"line":1144},[1099,2593,2594],{},"            boolean allHigh = true;\n",[1099,2596,2597],{"class":1101,"line":1216},[1099,2598,2599],{},"            for (int row = 0; row \u003C currents.length; row++)\n",[1099,2601,2602],{"class":1101,"line":1221},[1099,2603,2204],{},[1099,2605,2606],{"class":1101,"line":1228},[1099,2607,2608],{},"                if (currents[row][col] \u003C threshold)\n",[1099,2610,2611],{"class":1101,"line":1234},[1099,2612,2613],{},"                {\n",[1099,2615,2616],{"class":1101,"line":1240},[1099,2617,2618],{},"                    allHigh = false;\n",[1099,2620,2621],{"class":1101,"line":1245},[1099,2622,2623],{},"                }\n",[1099,2625,2626],{"class":1101,"line":1251},[1099,2627,2214],{},[1099,2629,2630],{"class":1101,"line":1256},[1099,2631,2632],{},"            if (allHigh)\n",[1099,2634,2635],{"class":1101,"line":1261},[1099,2636,2204],{},[1099,2638,2639],{"class":1101,"line":1266},[1099,2640,2641],{},"                count++;\n",[1099,2643,2645],{"class":1101,"line":2644},19,[1099,2646,2214],{},[1099,2648,2650],{"class":1101,"line":2649},20,[1099,2651,2219],{},[1099,2653,2655],{"class":1101,"line":2654},21,[1099,2656,2657],{},"        return count;\n",[1099,2659,2661],{"class":1101,"line":2660},22,[1099,2662,1141],{},[1099,2664,2666],{"class":1101,"line":2665},23,[1099,2667,1147],{},[1085,2669,2670,2672,2673,2676,2677,2680],{},[1319,2671,2006],{}," The question is about one instant across every module, so this is a column-major\ntraversal: the outer loop walks the columns (bounded by ",[1096,2674,2675],{},"currents[0].length",") and the inner loop\nwalks the rows. Each column starts as \"all high\" and is ruled out by any module below the\nthreshold. A row-major loop can't answer this directly, because it finishes one module's samples\nbefore it ever looks at the next module. A common mistake is counting a column when ",[1171,2678,2679],{},"any"," module\nspikes, which answers a different question.",[1466,2682,1468],{},{"title":1094,"searchDepth":1108,"depth":1108,"links":2684},[2685,2686,2687],{"id":1903,"depth":1108,"text":1904},{"id":2057,"depth":1108,"text":2058},{"id":2307,"depth":1108,"text":2308},{"outlineRef":1479,"pairsWith":1890,"status":2689},"new — authored exercises (Multiple Choice + Micro-Parsons + Coding)",{"title":924,"description":1094},"D-i4wFUCSEx8TZh873M0VVdiDaMnBIb_vQ3QeJdcK5A",1792718165976]