[{"data":1,"prerenderedAt":3407},["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.3":1070,"item-example-full-ch10-2d-arrays-10.3":1789,"item-exercise-full-ch10-2d-arrays-10.3":2508},[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":182,"body":1072,"description":1082,"extension":1783,"meta":1784,"navigation":1159,"path":181,"seo":1787,"stem":183,"__hash__":1788},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms.md",{"type":1073,"value":1074,"toc":1774},"minimark",[1075,1079,1083,1088,1208,1218,1222,1297,1304,1308,1311,1388,1392,1405,1513,1524,1528,1535,1647,1651,1738,1742,1759,1770],[1076,1077,182],"h1",{"id":1078},"implementing-2d-array-algorithms",[1080,1081,1082],"p",{},"Every algorithm shape from Lesson 9.5 (sum\u002Faverage, min\u002Fmax, property checks, duplicates) extends to 2D arrays — applied to the whole grid, or to just one row, one column, or a subsection.",[1084,1085,1087],"h2",{"id":1086},"sum-a-row-sum-a-column","Sum a Row, Sum a Column",[1089,1090,1095],"pre",{"className":1091,"code":1092,"language":1093,"meta":1094,"style":1094},"language-java shiki shiki-themes github-light github-dark","public static double getTotalForModule(int row, double[][] a)\n{\n    double total = 0;\n    for (int col = 0; col \u003C a[0].length; col++)\n    {\n        total = total + a[row][col];\n    }\n    return total;\n}\n\npublic static double getTotalForSample(int col, double[][] a)\n{\n    double total = 0;\n    for (int row = 0; row \u003C a.length; row++)\n    {\n        total = total + a[row][col];\n    }\n    return total;\n}\n","java","",[1096,1097,1098,1106,1112,1118,1124,1130,1136,1142,1148,1154,1161,1167,1172,1177,1183,1188,1193,1198,1203],"code",{"__ignoreMap":1094},[1099,1100,1103],"span",{"class":1101,"line":1102},"line",1,[1099,1104,1105],{},"public static double getTotalForModule(int row, double[][] a)\n",[1099,1107,1109],{"class":1101,"line":1108},2,[1099,1110,1111],{},"{\n",[1099,1113,1115],{"class":1101,"line":1114},3,[1099,1116,1117],{},"    double total = 0;\n",[1099,1119,1121],{"class":1101,"line":1120},4,[1099,1122,1123],{},"    for (int col = 0; col \u003C a[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],{},"        total = total + a[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],{},"    return total;\n",[1099,1149,1151],{"class":1101,"line":1150},9,[1099,1152,1153],{},"}\n",[1099,1155,1157],{"class":1101,"line":1156},10,[1099,1158,1160],{"emptyLinePlaceholder":1159},true,"\n",[1099,1162,1164],{"class":1101,"line":1163},11,[1099,1165,1166],{},"public static double getTotalForSample(int col, double[][] a)\n",[1099,1168,1170],{"class":1101,"line":1169},12,[1099,1171,1111],{},[1099,1173,1175],{"class":1101,"line":1174},13,[1099,1176,1117],{},[1099,1178,1180],{"class":1101,"line":1179},14,[1099,1181,1182],{},"    for (int row = 0; row \u003C a.length; row++)\n",[1099,1184,1186],{"class":1101,"line":1185},15,[1099,1187,1129],{},[1099,1189,1191],{"class":1101,"line":1190},16,[1099,1192,1135],{},[1099,1194,1196],{"class":1101,"line":1195},17,[1099,1197,1141],{},[1099,1199,1201],{"class":1101,"line":1200},18,[1099,1202,1147],{},[1099,1204,1206],{"class":1101,"line":1205},19,[1099,1207,1153],{},[1080,1209,1210,1213,1214,1217],{},[1096,1211,1212],{},"getTotalForModule"," sums one module's row across all samples; ",[1096,1215,1216],{},"getTotalForSample"," sums one instant's column across all 4 modules (useful for spotting a simultaneous-spike brownout).",[1084,1219,1221],{"id":1220},"max-across-the-whole-array","Max Across the Whole Array",[1089,1223,1225],{"className":1091,"code":1224,"language":1093,"meta":1094,"style":1094},"public static double getPeakCurrent(double[][] a)\n{\n    double peak = a[0][0];\n    for (int row = 0; row \u003C a.length; row++)\n    {\n        for (int col = 0; col \u003C a[0].length; col++)\n        {\n            if (a[row][col] > peak)\n            {\n                peak = a[row][col];\n            }\n        }\n    }\n    return peak;\n}\n",[1096,1226,1227,1232,1236,1241,1245,1249,1254,1259,1264,1269,1274,1279,1284,1288,1293],{"__ignoreMap":1094},[1099,1228,1229],{"class":1101,"line":1102},[1099,1230,1231],{},"public static double getPeakCurrent(double[][] a)\n",[1099,1233,1234],{"class":1101,"line":1108},[1099,1235,1111],{},[1099,1237,1238],{"class":1101,"line":1114},[1099,1239,1240],{},"    double peak = a[0][0];\n",[1099,1242,1243],{"class":1101,"line":1120},[1099,1244,1182],{},[1099,1246,1247],{"class":1101,"line":1126},[1099,1248,1129],{},[1099,1250,1251],{"class":1101,"line":1132},[1099,1252,1253],{},"        for (int col = 0; col \u003C a[0].length; col++)\n",[1099,1255,1256],{"class":1101,"line":1138},[1099,1257,1258],{},"        {\n",[1099,1260,1261],{"class":1101,"line":1144},[1099,1262,1263],{},"            if (a[row][col] > peak)\n",[1099,1265,1266],{"class":1101,"line":1150},[1099,1267,1268],{},"            {\n",[1099,1270,1271],{"class":1101,"line":1156},[1099,1272,1273],{},"                peak = a[row][col];\n",[1099,1275,1276],{"class":1101,"line":1163},[1099,1277,1278],{},"            }\n",[1099,1280,1281],{"class":1101,"line":1169},[1099,1282,1283],{},"        }\n",[1099,1285,1286],{"class":1101,"line":1174},[1099,1287,1141],{},[1099,1289,1290],{"class":1101,"line":1179},[1099,1291,1292],{},"    return peak;\n",[1099,1294,1295],{"class":1101,"line":1185},[1099,1296,1153],{},[1080,1298,1299,1300,1303],{},"Same seed-with-the-first-real-value rule from Lesson 9.5 — seeding with ",[1096,1301,1302],{},"0"," would be wrong if every reading happened to be negative.",[1084,1305,1307],{"id":1306},"a-subsection-only","A Subsection Only",[1080,1309,1310],{},"Loop bounds don't have to cover the whole array — narrowing them checks just a range of rows\u002Fcolumns, e.g. counting how many samples in a given module range exceeded a spike threshold:",[1089,1312,1314],{"className":1091,"code":1313,"language":1093,"meta":1094,"style":1094},"public static int countSpikes(double threshold, double[][] a,\n                               int rowStart, int rowEnd, int colStart, int colEnd)\n{\n    int count = 0;\n    for (int row = rowStart; row \u003C= rowEnd; row++)\n    {\n        for (int col = colStart; col \u003C= colEnd; col++)\n        {\n            if (a[row][col] > threshold)\n            {\n                count++;\n            }\n        }\n    }\n    return count;\n}\n",[1096,1315,1316,1321,1326,1330,1335,1340,1344,1349,1353,1358,1362,1367,1371,1375,1379,1384],{"__ignoreMap":1094},[1099,1317,1318],{"class":1101,"line":1102},[1099,1319,1320],{},"public static int countSpikes(double threshold, double[][] a,\n",[1099,1322,1323],{"class":1101,"line":1108},[1099,1324,1325],{},"                               int rowStart, int rowEnd, int colStart, int colEnd)\n",[1099,1327,1328],{"class":1101,"line":1114},[1099,1329,1111],{},[1099,1331,1332],{"class":1101,"line":1120},[1099,1333,1334],{},"    int count = 0;\n",[1099,1336,1337],{"class":1101,"line":1126},[1099,1338,1339],{},"    for (int row = rowStart; row \u003C= rowEnd; row++)\n",[1099,1341,1342],{"class":1101,"line":1132},[1099,1343,1129],{},[1099,1345,1346],{"class":1101,"line":1138},[1099,1347,1348],{},"        for (int col = colStart; col \u003C= colEnd; col++)\n",[1099,1350,1351],{"class":1101,"line":1144},[1099,1352,1258],{},[1099,1354,1355],{"class":1101,"line":1150},[1099,1356,1357],{},"            if (a[row][col] > threshold)\n",[1099,1359,1360],{"class":1101,"line":1156},[1099,1361,1268],{},[1099,1363,1364],{"class":1101,"line":1163},[1099,1365,1366],{},"                count++;\n",[1099,1368,1369],{"class":1101,"line":1169},[1099,1370,1278],{},[1099,1372,1373],{"class":1101,"line":1174},[1099,1374,1283],{},[1099,1376,1377],{"class":1101,"line":1179},[1099,1378,1141],{},[1099,1380,1381],{"class":1101,"line":1185},[1099,1382,1383],{},"    return count;\n",[1099,1385,1386],{"class":1101,"line":1190},[1099,1387,1153],{},[1084,1389,1391],{"id":1390},"duplicates-need-4-nested-loops","Duplicates Need 4 Nested Loops",[1080,1393,1394,1395,1399,1400,1404],{},"A 1D duplicate check needs 2 nested loops (Lesson 9.5). A full 2D duplicate check needs ",[1396,1397,1398],"strong",{},"4",": two to pick a starting cell (row, col), and two more to compare it against every cell that comes ",[1401,1402,1403],"em",{},"after"," it — later columns in the same row, plus every cell in every later row:",[1089,1406,1408],{"className":1091,"code":1407,"language":1093,"meta":1094,"style":1094},"public static boolean hasDuplicateReading(double[][] a)\n{\n    for (int row = 0; row \u003C a.length; row++)\n    {\n        for (int col = 0; col \u003C a[0].length; col++)\n        {\n            for (int row2 = row; row2 \u003C a.length; row2++)\n            {\n                \u002F\u002F ?: is the conditional operator, Lesson 5.5\n                int startCol = (row2 == row) ? col + 1 : 0;\n                for (int col2 = startCol; col2 \u003C a[0].length; col2++)\n                {\n                    if (a[row][col] == a[row2][col2])\n                    {\n                        return true;\n                    }\n                }\n            }\n        }\n    }\n    return false;\n}\n",[1096,1409,1410,1415,1419,1423,1427,1431,1435,1440,1444,1449,1454,1459,1464,1469,1474,1479,1484,1489,1493,1497,1502,1508],{"__ignoreMap":1094},[1099,1411,1412],{"class":1101,"line":1102},[1099,1413,1414],{},"public static boolean hasDuplicateReading(double[][] a)\n",[1099,1416,1417],{"class":1101,"line":1108},[1099,1418,1111],{},[1099,1420,1421],{"class":1101,"line":1114},[1099,1422,1182],{},[1099,1424,1425],{"class":1101,"line":1120},[1099,1426,1129],{},[1099,1428,1429],{"class":1101,"line":1126},[1099,1430,1253],{},[1099,1432,1433],{"class":1101,"line":1132},[1099,1434,1258],{},[1099,1436,1437],{"class":1101,"line":1138},[1099,1438,1439],{},"            for (int row2 = row; row2 \u003C a.length; row2++)\n",[1099,1441,1442],{"class":1101,"line":1144},[1099,1443,1268],{},[1099,1445,1446],{"class":1101,"line":1150},[1099,1447,1448],{},"                \u002F\u002F ?: is the conditional operator, Lesson 5.5\n",[1099,1450,1451],{"class":1101,"line":1156},[1099,1452,1453],{},"                int startCol = (row2 == row) ? col + 1 : 0;\n",[1099,1455,1456],{"class":1101,"line":1163},[1099,1457,1458],{},"                for (int col2 = startCol; col2 \u003C a[0].length; col2++)\n",[1099,1460,1461],{"class":1101,"line":1169},[1099,1462,1463],{},"                {\n",[1099,1465,1466],{"class":1101,"line":1174},[1099,1467,1468],{},"                    if (a[row][col] == a[row2][col2])\n",[1099,1470,1471],{"class":1101,"line":1179},[1099,1472,1473],{},"                    {\n",[1099,1475,1476],{"class":1101,"line":1185},[1099,1477,1478],{},"                        return true;\n",[1099,1480,1481],{"class":1101,"line":1190},[1099,1482,1483],{},"                    }\n",[1099,1485,1486],{"class":1101,"line":1195},[1099,1487,1488],{},"                }\n",[1099,1490,1491],{"class":1101,"line":1200},[1099,1492,1278],{},[1099,1494,1495],{"class":1101,"line":1205},[1099,1496,1283],{},[1099,1498,1500],{"class":1101,"line":1499},20,[1099,1501,1141],{},[1099,1503,1505],{"class":1101,"line":1504},21,[1099,1506,1507],{},"    return false;\n",[1099,1509,1511],{"class":1101,"line":1510},22,[1099,1512,1153],{},[1080,1514,1515,1516,1519,1520,1523],{},"The ",[1096,1517,1518],{},"startCol"," trick avoids comparing a pair twice: within the same row (",[1096,1521,1522],{},"row2 == row","), only look at columns after the candidate's own column; in a later row, every column is fair game.",[1084,1525,1527],{"id":1526},"rotatereverse-a-single-row-or-column","Rotate\u002FReverse a Single Row or Column",[1080,1529,1530,1531,1534],{},"Working on just one row (or one \"virtual column\" — a fixed column index across every row) really only touches one 1D array at a time, so the Ch.9 patterns carry over directly: rotating works like Lesson 9.7's ",[1096,1532,1533],{},"ArrayList"," rotate (shift each element into the next slot, then wrap the last one around to the front); reversing works like Lesson 9.5's swap-from-both-ends.",[1089,1536,1538],{"className":1091,"code":1537,"language":1093,"meta":1094,"style":1094},"public static void rotateRowRight(double[][] a, int row)\n{\n    double last = a[row][a[0].length - 1];\n    for (int col = a[0].length - 1; col > 0; col--)\n    {\n        a[row][col] = a[row][col - 1];\n    }\n    a[row][0] = last;\n}\n\npublic static void reverseRow(double[][] a, int row)\n{\n    int left = 0;\n    int right = a[0].length - 1;\n    while (left \u003C right)\n    {\n        double temp = a[row][left];\n        a[row][left] = a[row][right];\n        a[row][right] = temp;\n        left++;\n        right--;\n    }\n}\n",[1096,1539,1540,1545,1549,1554,1559,1563,1568,1572,1577,1581,1585,1590,1594,1599,1604,1609,1613,1618,1623,1628,1633,1638,1642],{"__ignoreMap":1094},[1099,1541,1542],{"class":1101,"line":1102},[1099,1543,1544],{},"public static void rotateRowRight(double[][] a, int row)\n",[1099,1546,1547],{"class":1101,"line":1108},[1099,1548,1111],{},[1099,1550,1551],{"class":1101,"line":1114},[1099,1552,1553],{},"    double last = a[row][a[0].length - 1];\n",[1099,1555,1556],{"class":1101,"line":1120},[1099,1557,1558],{},"    for (int col = a[0].length - 1; col > 0; col--)\n",[1099,1560,1561],{"class":1101,"line":1126},[1099,1562,1129],{},[1099,1564,1565],{"class":1101,"line":1132},[1099,1566,1567],{},"        a[row][col] = a[row][col - 1];\n",[1099,1569,1570],{"class":1101,"line":1138},[1099,1571,1141],{},[1099,1573,1574],{"class":1101,"line":1144},[1099,1575,1576],{},"    a[row][0] = last;\n",[1099,1578,1579],{"class":1101,"line":1150},[1099,1580,1153],{},[1099,1582,1583],{"class":1101,"line":1156},[1099,1584,1160],{"emptyLinePlaceholder":1159},[1099,1586,1587],{"class":1101,"line":1163},[1099,1588,1589],{},"public static void reverseRow(double[][] a, int row)\n",[1099,1591,1592],{"class":1101,"line":1169},[1099,1593,1111],{},[1099,1595,1596],{"class":1101,"line":1174},[1099,1597,1598],{},"    int left = 0;\n",[1099,1600,1601],{"class":1101,"line":1179},[1099,1602,1603],{},"    int right = a[0].length - 1;\n",[1099,1605,1606],{"class":1101,"line":1185},[1099,1607,1608],{},"    while (left \u003C right)\n",[1099,1610,1611],{"class":1101,"line":1190},[1099,1612,1129],{},[1099,1614,1615],{"class":1101,"line":1195},[1099,1616,1617],{},"        double temp = a[row][left];\n",[1099,1619,1620],{"class":1101,"line":1200},[1099,1621,1622],{},"        a[row][left] = a[row][right];\n",[1099,1624,1625],{"class":1101,"line":1205},[1099,1626,1627],{},"        a[row][right] = temp;\n",[1099,1629,1630],{"class":1101,"line":1499},[1099,1631,1632],{},"        left++;\n",[1099,1634,1635],{"class":1101,"line":1504},[1099,1636,1637],{},"        right--;\n",[1099,1639,1640],{"class":1101,"line":1510},[1099,1641,1141],{},[1099,1643,1645],{"class":1101,"line":1644},23,[1099,1646,1153],{},[1084,1648,1650],{"id":1649},"common-pitfalls","Common Pitfalls",[1652,1653,1654,1674,1709],"ul",{},[1655,1656,1657,1660,1661,1664,1665,1668,1669,1664,1671,1673],"li",{},[1396,1658,1659],{},"Confusing \"sum a row\" with \"sum a column.\""," Fixing ",[1096,1662,1663],{},"row"," and looping ",[1096,1666,1667],{},"col"," sums a row; fixing ",[1096,1670,1667],{},[1096,1672,1663],{}," sums a column — it's easy to write the wrong one by habit.",[1655,1675,1676,1682,1683,1686,1687,1689,1690,1693,1694,1696,1697,1700,1701,1704,1705,1708],{},[1396,1677,1678,1679,1681],{},"Forgetting the duplicate check's ",[1096,1680,1518],{}," trick."," Without it, ",[1096,1684,1685],{},"col2"," always starts at ",[1096,1688,1302],{},", so the innermost comparison hits ",[1096,1691,1692],{},"a[row][col] == a[row2][col2]"," with ",[1096,1695,1522],{}," and ",[1096,1698,1699],{},"col2 == col"," — a cell compared to itself — which is always ",[1096,1702,1703],{},"true",". ",[1096,1706,1707],{},"hasDuplicateReading"," would report a duplicate on every array, even ones with none.",[1655,1710,1711,1722,1723,1726,1727,1730,1731,1734,1735,1737],{},[1396,1712,1713,1714,1717,1718,1721],{},"Using ",[1096,1715,1716],{},"\u003C"," instead of ",[1096,1719,1720],{},"\u003C="," on subsection bounds that are meant to be inclusive."," ",[1096,1724,1725],{},"countSpikes","'s ",[1096,1728,1729],{},"rowEnd","\u002F",[1096,1732,1733],{},"colEnd"," are inclusive bounds by design — a ",[1096,1736,1716],{}," would silently skip the last row\u002Fcolumn.",[1084,1739,1741],{"id":1740},"key-takeaways","Key Takeaways",[1652,1743,1744,1747,1750,1753],{},[1655,1745,1746],{},"Every 1D array algorithm pattern (accumulator, min\u002Fmax, property count, duplicates, rotate) extends to 2D — applied to the whole array, one row, one column, or a bounded subsection.",[1655,1748,1749],{},"Summing a row fixes the row index and loops columns; summing a column fixes the column index and loops rows.",[1655,1751,1752],{},"A full 2D duplicate check needs 4 nested loops, not 2 — two to pick the candidate cell, two more to scan every cell that comes after it without re-checking any pair.",[1655,1754,1755,1756,1758],{},"Rotating a single row (or a fixed-column \"column slice\") reuses Lesson 9.7's ",[1096,1757,1533],{}," rotate pattern; reversing one reuses Lesson 9.5's swap-from-both-ends pattern.",[1080,1760,1761,1762,1765,1766,1769],{},"Derived from ",[1096,1763,1764],{},"csawesome-2026",": ",[1096,1767,1768],{},"unit-4-data-collections\u002F4.13-implementing-2d-array-algorithms.md"," (CSA 4.13)",[1771,1772,1773],"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":1775},[1776,1777,1778,1779,1780,1781,1782],{"id":1086,"depth":1108,"text":1087},{"id":1220,"depth":1108,"text":1221},{"id":1306,"depth":1108,"text":1307},{"id":1390,"depth":1108,"text":1391},{"id":1526,"depth":1108,"text":1527},{"id":1649,"depth":1108,"text":1650},{"id":1740,"depth":1108,"text":1741},"md",{"outlineRef":1785,"status":1786},"10.3 — Implementing 2D Array Algorithms (CSA 4.13)","new — authored lesson",{"title":182,"description":1082},"wFRnQk_kwkm1RWEBuXlJmpfbvveFFWvU4eMj4bBqJa8",{"id":1790,"title":619,"body":1791,"description":1094,"extension":1783,"meta":2503,"navigation":1159,"path":618,"seo":2506,"stem":620,"__hash__":2507},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms.md",{"type":1073,"value":1792,"toc":2492},[1793,1796,1800,1803,1807,1810,1831,1865,1869,1872,1915,1924,1928,1935,1977,1986,1990,2004,2074,2083,2087,2106,2177,2186,2204,2208,2221,2332,2341,2362,2366,2369,2435,2450,2454,2490],[1076,1794,619],{"id":1795},"implementing-2d-array-algorithms-worked-example",[1084,1797,1799],{"id":1798},"problem","Problem",[1080,1801,1802],{},"During shooter practice, the team took 10 shots from each of 3 spots on the field (left, center, right) at each of 4 distances (nearest to farthest), and recorded how many went in. Find the total made from one spot, the total made at one distance, the best single result, how many results in a chosen range made at least 5, and whether any two results are exactly equal. Then reverse one spot's row so it reads farthest distance first.",[1084,1804,1806],{"id":1805},"step-1-plan-it-first","Step 1: Plan It First",[1080,1808,1809],{},"Six small tasks, each one a 1D pattern from Lesson 9.5 applied to a 2D array:",[1811,1812,1813,1816,1819,1822,1825,1828],"ol",{},[1655,1814,1815],{},"Total from one spot: sum a row (fix the row, loop the columns).",[1655,1817,1818],{},"Total at one distance: sum a column (fix the column, loop the rows).",[1655,1820,1821],{},"Best single result: running max over the whole grid.",[1655,1823,1824],{},"Results of at least 5 in a range: property count over a subsection.",[1655,1826,1827],{},"Any two equal results: duplicate check (4 nested loops).",[1655,1829,1830],{},"Farthest distance first for one spot: reverse a single row in place.",[1089,1832,1834],{"className":1091,"code":1833,"language":1093,"meta":1094,"style":1094},"int[][] shotsMade =\n{\n    {7, 6, 4, 2}, \u002F\u002F left spot\n    {9, 8, 5, 3}, \u002F\u002F center spot\n    {6, 5, 5, 1}, \u002F\u002F right spot\n};\n",[1096,1835,1836,1841,1845,1850,1855,1860],{"__ignoreMap":1094},[1099,1837,1838],{"class":1101,"line":1102},[1099,1839,1840],{},"int[][] shotsMade =\n",[1099,1842,1843],{"class":1101,"line":1108},[1099,1844,1111],{},[1099,1846,1847],{"class":1101,"line":1114},[1099,1848,1849],{},"    {7, 6, 4, 2}, \u002F\u002F left spot\n",[1099,1851,1852],{"class":1101,"line":1120},[1099,1853,1854],{},"    {9, 8, 5, 3}, \u002F\u002F center spot\n",[1099,1856,1857],{"class":1101,"line":1126},[1099,1858,1859],{},"    {6, 5, 5, 1}, \u002F\u002F right spot\n",[1099,1861,1862],{"class":1101,"line":1132},[1099,1863,1864],{},"};\n",[1084,1866,1868],{"id":1867},"step-2-total-from-one-spot-sum-a-row","Step 2: Total From One Spot (Sum a Row)",[1080,1870,1871],{},"The row is fixed by the parameter, so only the column changes:",[1089,1873,1875],{"className":1091,"code":1874,"language":1093,"meta":1094,"style":1094},"public static int getTotalForSpot(int row, int[][] a)\n{\n    int total = 0;\n    for (int col = 0; col \u003C a[0].length; col++)\n    {\n        total = total + a[row][col];\n    }\n    return total;\n}\n",[1096,1876,1877,1882,1886,1891,1895,1899,1903,1907,1911],{"__ignoreMap":1094},[1099,1878,1879],{"class":1101,"line":1102},[1099,1880,1881],{},"public static int getTotalForSpot(int row, int[][] a)\n",[1099,1883,1884],{"class":1101,"line":1108},[1099,1885,1111],{},[1099,1887,1888],{"class":1101,"line":1114},[1099,1889,1890],{},"    int total = 0;\n",[1099,1892,1893],{"class":1101,"line":1120},[1099,1894,1123],{},[1099,1896,1897],{"class":1101,"line":1126},[1099,1898,1129],{},[1099,1900,1901],{"class":1101,"line":1132},[1099,1902,1135],{},[1099,1904,1905],{"class":1101,"line":1138},[1099,1906,1141],{},[1099,1908,1909],{"class":1101,"line":1144},[1099,1910,1147],{},[1099,1912,1913],{"class":1101,"line":1150},[1099,1914,1153],{},[1089,1916,1918],{"className":1091,"code":1917,"language":1093,"meta":1094,"style":1094},"System.out.println(getTotalForSpot(1, shotsMade)); \u002F\u002F 25 — center spot: 9 + 8 + 5 + 3\n",[1096,1919,1920],{"__ignoreMap":1094},[1099,1921,1922],{"class":1101,"line":1102},[1099,1923,1917],{},[1084,1925,1927],{"id":1926},"step-3-total-at-one-distance-sum-a-column","Step 3: Total at One Distance (Sum a Column)",[1080,1929,1930,1931,1934],{},"Now the column is fixed and the row changes. The loop bound switches to ",[1096,1932,1933],{},"a.length",", the row count:",[1089,1936,1938],{"className":1091,"code":1937,"language":1093,"meta":1094,"style":1094},"public static int getTotalForDistance(int col, int[][] a)\n{\n    int total = 0;\n    for (int row = 0; row \u003C a.length; row++)\n    {\n        total = total + a[row][col];\n    }\n    return total;\n}\n",[1096,1939,1940,1945,1949,1953,1957,1961,1965,1969,1973],{"__ignoreMap":1094},[1099,1941,1942],{"class":1101,"line":1102},[1099,1943,1944],{},"public static int getTotalForDistance(int col, int[][] a)\n",[1099,1946,1947],{"class":1101,"line":1108},[1099,1948,1111],{},[1099,1950,1951],{"class":1101,"line":1114},[1099,1952,1890],{},[1099,1954,1955],{"class":1101,"line":1120},[1099,1956,1182],{},[1099,1958,1959],{"class":1101,"line":1126},[1099,1960,1129],{},[1099,1962,1963],{"class":1101,"line":1132},[1099,1964,1135],{},[1099,1966,1967],{"class":1101,"line":1138},[1099,1968,1141],{},[1099,1970,1971],{"class":1101,"line":1144},[1099,1972,1147],{},[1099,1974,1975],{"class":1101,"line":1150},[1099,1976,1153],{},[1089,1978,1980],{"className":1091,"code":1979,"language":1093,"meta":1094,"style":1094},"System.out.println(getTotalForDistance(0, shotsMade)); \u002F\u002F 22 — nearest distance: 7 + 9 + 6\n",[1096,1981,1982],{"__ignoreMap":1094},[1099,1983,1984],{"class":1101,"line":1102},[1099,1985,1979],{},[1084,1987,1989],{"id":1988},"step-4-best-single-result-running-max","Step 4: Best Single Result (Running Max)",[1080,1991,1992,1993,1996,1997,2000,2001,2003],{},"Seed ",[1096,1994,1995],{},"best"," with a real element, ",[1096,1998,1999],{},"a[0][0]",", not ",[1096,2002,1302],{},". Then check every cell with nested loops:",[1089,2005,2007],{"className":1091,"code":2006,"language":1093,"meta":1094,"style":1094},"public static int getBestResult(int[][] a)\n{\n    int best = a[0][0];\n    for (int row = 0; row \u003C a.length; row++)\n    {\n        for (int col = 0; col \u003C a[0].length; col++)\n        {\n            if (a[row][col] > best)\n            {\n                best = a[row][col];\n            }\n        }\n    }\n    return best;\n}\n",[1096,2008,2009,2014,2018,2023,2027,2031,2035,2039,2044,2048,2053,2057,2061,2065,2070],{"__ignoreMap":1094},[1099,2010,2011],{"class":1101,"line":1102},[1099,2012,2013],{},"public static int getBestResult(int[][] a)\n",[1099,2015,2016],{"class":1101,"line":1108},[1099,2017,1111],{},[1099,2019,2020],{"class":1101,"line":1114},[1099,2021,2022],{},"    int best = a[0][0];\n",[1099,2024,2025],{"class":1101,"line":1120},[1099,2026,1182],{},[1099,2028,2029],{"class":1101,"line":1126},[1099,2030,1129],{},[1099,2032,2033],{"class":1101,"line":1132},[1099,2034,1253],{},[1099,2036,2037],{"class":1101,"line":1138},[1099,2038,1258],{},[1099,2040,2041],{"class":1101,"line":1144},[1099,2042,2043],{},"            if (a[row][col] > best)\n",[1099,2045,2046],{"class":1101,"line":1150},[1099,2047,1268],{},[1099,2049,2050],{"class":1101,"line":1156},[1099,2051,2052],{},"                best = a[row][col];\n",[1099,2054,2055],{"class":1101,"line":1163},[1099,2056,1278],{},[1099,2058,2059],{"class":1101,"line":1169},[1099,2060,1283],{},[1099,2062,2063],{"class":1101,"line":1174},[1099,2064,1141],{},[1099,2066,2067],{"class":1101,"line":1179},[1099,2068,2069],{},"    return best;\n",[1099,2071,2072],{"class":1101,"line":1185},[1099,2073,1153],{},[1089,2075,2077],{"className":1091,"code":2076,"language":1093,"meta":1094,"style":1094},"System.out.println(getBestResult(shotsMade)); \u002F\u002F 9 — center spot, nearest distance\n",[1096,2078,2079],{"__ignoreMap":1094},[1099,2080,2081],{"class":1101,"line":1102},[1099,2082,2076],{},[1084,2084,2086],{"id":2085},"step-5-results-of-at-least-5-in-a-range-subsection-count","Step 5: Results of at Least 5 in a Range (Subsection Count)",[1080,2088,2089,2090,2092,2093,2096,2097,2092,2099,2102,2103,2105],{},"The coach only wants the left and center spots (rows ",[1096,2091,1302],{}," to ",[1096,2094,2095],{},"1",") at the two middle distances (columns ",[1096,2098,2095],{},[1096,2100,2101],{},"2","). Narrowing the loop bounds covers just that rectangle. The end bounds are inclusive, so the loops use ",[1096,2104,1720],{},":",[1089,2107,2109],{"className":1091,"code":2108,"language":1093,"meta":1094,"style":1094},"public static int countAtLeast(int minMade, int[][] a,\n                               int rowStart, int rowEnd, int colStart, int colEnd)\n{\n    int count = 0;\n    for (int row = rowStart; row \u003C= rowEnd; row++)\n    {\n        for (int col = colStart; col \u003C= colEnd; col++)\n        {\n            if (a[row][col] >= minMade)\n            {\n                count++;\n            }\n        }\n    }\n    return count;\n}\n",[1096,2110,2111,2116,2120,2124,2128,2132,2136,2140,2144,2149,2153,2157,2161,2165,2169,2173],{"__ignoreMap":1094},[1099,2112,2113],{"class":1101,"line":1102},[1099,2114,2115],{},"public static int countAtLeast(int minMade, int[][] a,\n",[1099,2117,2118],{"class":1101,"line":1108},[1099,2119,1325],{},[1099,2121,2122],{"class":1101,"line":1114},[1099,2123,1111],{},[1099,2125,2126],{"class":1101,"line":1120},[1099,2127,1334],{},[1099,2129,2130],{"class":1101,"line":1126},[1099,2131,1339],{},[1099,2133,2134],{"class":1101,"line":1132},[1099,2135,1129],{},[1099,2137,2138],{"class":1101,"line":1138},[1099,2139,1348],{},[1099,2141,2142],{"class":1101,"line":1144},[1099,2143,1258],{},[1099,2145,2146],{"class":1101,"line":1150},[1099,2147,2148],{},"            if (a[row][col] >= minMade)\n",[1099,2150,2151],{"class":1101,"line":1156},[1099,2152,1268],{},[1099,2154,2155],{"class":1101,"line":1163},[1099,2156,1366],{},[1099,2158,2159],{"class":1101,"line":1169},[1099,2160,1278],{},[1099,2162,2163],{"class":1101,"line":1174},[1099,2164,1283],{},[1099,2166,2167],{"class":1101,"line":1179},[1099,2168,1141],{},[1099,2170,2171],{"class":1101,"line":1185},[1099,2172,1383],{},[1099,2174,2175],{"class":1101,"line":1190},[1099,2176,1153],{},[1089,2178,2180],{"className":1091,"code":2179,"language":1093,"meta":1094,"style":1094},"System.out.println(countAtLeast(5, shotsMade, 0, 1, 1, 2)); \u002F\u002F 3 — checks 6, 4, 8, 5\n",[1096,2181,2182],{"__ignoreMap":1094},[1099,2183,2184],{"class":1101,"line":1102},[1099,2185,2179],{},[1080,2187,2188,2189,1717,2191,2193,2194,2196,2197,2199,2200,2203],{},"With ",[1096,2190,1716],{},[1096,2192,1720],{},", the loops would stop at row ",[1096,2195,1302],{}," and column ",[1096,2198,2095],{},", and only one cell (the ",[1096,2201,2202],{},"6",") would be checked.",[1084,2205,2207],{"id":2206},"step-6-any-two-equal-results-duplicate-check","Step 6: Any Two Equal Results (Duplicate Check)",[1080,2209,2210,2211,2213,2214,2217,2218,2220],{},"Two loops pick a candidate cell. Two more loops compare it against every cell that comes ",[1401,2212,1403],{}," it: later columns in the same row, then every column of every later row. The inner column loop's starting point depends on which row it's in, so an ",[1096,2215,2216],{},"if"," sets ",[1096,2219,1518],{}," before that loop begins:",[1089,2222,2224],{"className":1091,"code":2223,"language":1093,"meta":1094,"style":1094},"public static boolean hasDuplicateResult(int[][] a)\n{\n    for (int row = 0; row \u003C a.length; row++)\n    {\n        for (int col = 0; col \u003C a[0].length; col++)\n        {\n            for (int row2 = row; row2 \u003C a.length; row2++)\n            {\n                int startCol = 0;\n                if (row2 == row)\n                {\n                    startCol = col + 1;\n                }\n                for (int col2 = startCol; col2 \u003C a[0].length; col2++)\n                {\n                    if (a[row][col] == a[row2][col2])\n                    {\n                        return true;\n                    }\n                }\n            }\n        }\n    }\n    return false;\n}\n",[1096,2225,2226,2231,2235,2239,2243,2247,2251,2255,2259,2264,2269,2273,2278,2282,2286,2290,2294,2298,2302,2306,2310,2314,2318,2322,2327],{"__ignoreMap":1094},[1099,2227,2228],{"class":1101,"line":1102},[1099,2229,2230],{},"public static boolean hasDuplicateResult(int[][] a)\n",[1099,2232,2233],{"class":1101,"line":1108},[1099,2234,1111],{},[1099,2236,2237],{"class":1101,"line":1114},[1099,2238,1182],{},[1099,2240,2241],{"class":1101,"line":1120},[1099,2242,1129],{},[1099,2244,2245],{"class":1101,"line":1126},[1099,2246,1253],{},[1099,2248,2249],{"class":1101,"line":1132},[1099,2250,1258],{},[1099,2252,2253],{"class":1101,"line":1138},[1099,2254,1439],{},[1099,2256,2257],{"class":1101,"line":1144},[1099,2258,1268],{},[1099,2260,2261],{"class":1101,"line":1150},[1099,2262,2263],{},"                int startCol = 0;\n",[1099,2265,2266],{"class":1101,"line":1156},[1099,2267,2268],{},"                if (row2 == row)\n",[1099,2270,2271],{"class":1101,"line":1163},[1099,2272,1463],{},[1099,2274,2275],{"class":1101,"line":1169},[1099,2276,2277],{},"                    startCol = col + 1;\n",[1099,2279,2280],{"class":1101,"line":1174},[1099,2281,1488],{},[1099,2283,2284],{"class":1101,"line":1179},[1099,2285,1458],{},[1099,2287,2288],{"class":1101,"line":1185},[1099,2289,1463],{},[1099,2291,2292],{"class":1101,"line":1190},[1099,2293,1468],{},[1099,2295,2296],{"class":1101,"line":1195},[1099,2297,1473],{},[1099,2299,2300],{"class":1101,"line":1200},[1099,2301,1478],{},[1099,2303,2304],{"class":1101,"line":1205},[1099,2305,1483],{},[1099,2307,2308],{"class":1101,"line":1499},[1099,2309,1488],{},[1099,2311,2312],{"class":1101,"line":1504},[1099,2313,1278],{},[1099,2315,2316],{"class":1101,"line":1510},[1099,2317,1283],{},[1099,2319,2320],{"class":1101,"line":1644},[1099,2321,1141],{},[1099,2323,2325],{"class":1101,"line":2324},24,[1099,2326,1507],{},[1099,2328,2330],{"class":1101,"line":2329},25,[1099,2331,1153],{},[1089,2333,2335],{"className":1091,"code":2334,"language":1093,"meta":1094,"style":1094},"System.out.println(hasDuplicateResult(shotsMade)); \u002F\u002F true — the left spot's 6 matches the right spot's 6\n",[1096,2336,2337],{"__ignoreMap":1094},[1099,2338,2339],{"class":1101,"line":1102},[1099,2340,2334],{},[1080,2342,2343,2344,2347,2348,2350,2351,2354,2355,2357,2358,2361],{},"The first pair it finds is ",[1096,2345,2346],{},"a[0][1]"," (left spot, ",[1096,2349,2202],{},") and ",[1096,2352,2353],{},"a[2][0]"," (right spot, ",[1096,2356,2202],{},"), which are in different rows. That's why the later-rows part of the search matters. A check that only compared cells within the same row would find the two ",[1096,2359,2360],{},"5","s in the right spot's row eventually, but it would miss matches like this one completely.",[1084,2363,2365],{"id":2364},"step-7-farthest-distance-first-for-one-spot-reverse-a-single-row","Step 7: Farthest Distance First for One Spot (Reverse a Single Row)",[1080,2367,2368],{},"One row of a 2D array is a plain 1D array, so this is exactly the 1D reverse from Lesson 9.5: swap from both ends toward the middle. The row index just stays fixed:",[1089,2370,2372],{"className":1091,"code":2371,"language":1093,"meta":1094,"style":1094},"public static void reverseRow(int[][] a, int row)\n{\n    int start = 0;\n    int end = a[0].length - 1;\n    while (start \u003C end)\n    {\n        int temp = a[row][start];\n        a[row][start] = a[row][end];\n        a[row][end] = temp;\n        start++;\n        end--;\n    }\n}\n",[1096,2373,2374,2379,2383,2388,2393,2398,2402,2407,2412,2417,2422,2427,2431],{"__ignoreMap":1094},[1099,2375,2376],{"class":1101,"line":1102},[1099,2377,2378],{},"public static void reverseRow(int[][] a, int row)\n",[1099,2380,2381],{"class":1101,"line":1108},[1099,2382,1111],{},[1099,2384,2385],{"class":1101,"line":1114},[1099,2386,2387],{},"    int start = 0;\n",[1099,2389,2390],{"class":1101,"line":1120},[1099,2391,2392],{},"    int end = a[0].length - 1;\n",[1099,2394,2395],{"class":1101,"line":1126},[1099,2396,2397],{},"    while (start \u003C end)\n",[1099,2399,2400],{"class":1101,"line":1132},[1099,2401,1129],{},[1099,2403,2404],{"class":1101,"line":1138},[1099,2405,2406],{},"        int temp = a[row][start];\n",[1099,2408,2409],{"class":1101,"line":1144},[1099,2410,2411],{},"        a[row][start] = a[row][end];\n",[1099,2413,2414],{"class":1101,"line":1150},[1099,2415,2416],{},"        a[row][end] = temp;\n",[1099,2418,2419],{"class":1101,"line":1156},[1099,2420,2421],{},"        start++;\n",[1099,2423,2424],{"class":1101,"line":1163},[1099,2425,2426],{},"        end--;\n",[1099,2428,2429],{"class":1101,"line":1169},[1099,2430,1141],{},[1099,2432,2433],{"class":1101,"line":1174},[1099,2434,1153],{},[1089,2436,2438],{"className":1091,"code":2437,"language":1093,"meta":1094,"style":1094},"reverseRow(shotsMade, 0);\n\u002F\u002F left spot's row is now: 2, 4, 6, 7 — the other two rows are unchanged\n",[1096,2439,2440,2445],{"__ignoreMap":1094},[1099,2441,2442],{"class":1101,"line":1102},[1099,2443,2444],{},"reverseRow(shotsMade, 0);\n",[1099,2446,2447],{"class":1101,"line":1108},[1099,2448,2449],{},"\u002F\u002F left spot's row is now: 2, 4, 6, 7 — the other two rows are unchanged\n",[1084,2451,2453],{"id":2452},"recap","Recap",[1652,2455,2456,2466,2472,2478,2487],{},[1655,2457,2458,2459,2462,2463,2465],{},"Summing a row fixes the row and loops the columns (bound ",[1096,2460,2461],{},"a[0].length","). Summing a column fixes the column and loops the rows (bound ",[1096,2464,1933],{},").",[1655,2467,2468,2469,2471],{},"A running max over the whole grid needs nested loops and is seeded with a real element, ",[1096,2470,1999],{},".",[1655,2473,2474,2475,2477],{},"A subsection is just narrower loop bounds. Check whether the end bounds are inclusive (",[1096,2476,1720],{},") or not.",[1655,2479,2480,2481,2483,2484,2486],{},"A full duplicate check needs 4 nested loops. ",[1096,2482,1518],{}," makes the search begin just after the candidate in its own row, and at column ",[1096,2485,1302],{}," in every later row.",[1655,2488,2489],{},"Reversing one row reuses the 1D swap-from-both-ends pattern, with the row index held fixed.",[1771,2491,1773],{},{"title":1094,"searchDepth":1108,"depth":1108,"links":2493},[2494,2495,2496,2497,2498,2499,2500,2501,2502],{"id":1798,"depth":1108,"text":1799},{"id":1805,"depth":1108,"text":1806},{"id":1867,"depth":1108,"text":1868},{"id":1926,"depth":1108,"text":1927},{"id":1988,"depth":1108,"text":1989},{"id":2085,"depth":1108,"text":2086},{"id":2206,"depth":1108,"text":2207},{"id":2364,"depth":1108,"text":2365},{"id":2452,"depth":1108,"text":2453},{"outlineRef":1785,"pairsWith":2504,"status":2505},"[`lessons\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms.md`](..\u002F..\u002Flessons\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms.md)","new — authored worked example (fully solved, walked step by step — not a problem to attempt)",{"title":619,"description":1094},"nk7GwAHeBvezlY8f_jtYwjYRKn2MS_D-tVhOFsvYqhw",{"id":2509,"title":928,"body":2510,"description":1094,"extension":1783,"meta":3403,"navigation":1159,"path":927,"seo":3405,"stem":929,"__hash__":3406},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms.md",{"type":1073,"value":2511,"toc":3398},[2512,2515,2519,2525,2534,2541,2584,2589,2614,2620,2643,2691,2695,2709,2772,2775,2831,2836,2930,3001,3005,3011,3036,3039,3068,3076,3081,3117,3122,3238,3243,3365,3396],[1076,2513,928],{"id":2514},"implementing-2d-array-algorithms-exercises",[1084,2516,2518],{"id":2517},"multiple-choice","Multiple Choice",[1080,2520,2521,2524],{},[1396,2522,2523],{},"Question:"," Game pieces scored are stored with one row per match and one column per alliance robot:",[1089,2526,2528],{"className":1091,"code":2527,"language":1093,"meta":1094,"style":1094},"int[][] piecesScored = { {3, 5, 2}, {4, 1, 6} };\n",[1096,2529,2530],{"__ignoreMap":1094},[1099,2531,2532],{"class":1101,"line":1102},[1099,2533,2527],{},[1080,2535,2536,2537,2540],{},"What does ",[1096,2538,2539],{},"mystery(piecesScored, 1)"," return?",[1089,2542,2544],{"className":1091,"code":2543,"language":1093,"meta":1094,"style":1094},"public static int mystery(int[][] a, int k)\n{\n    int total = 0;\n    for (int row = 0; row \u003C a.length; row++)\n    {\n        total = total + a[row][k];\n    }\n    return total;\n}\n",[1096,2545,2546,2551,2555,2559,2563,2567,2572,2576,2580],{"__ignoreMap":1094},[1099,2547,2548],{"class":1101,"line":1102},[1099,2549,2550],{},"public static int mystery(int[][] a, int k)\n",[1099,2552,2553],{"class":1101,"line":1108},[1099,2554,1111],{},[1099,2556,2557],{"class":1101,"line":1114},[1099,2558,1890],{},[1099,2560,2561],{"class":1101,"line":1120},[1099,2562,1182],{},[1099,2564,2565],{"class":1101,"line":1126},[1099,2566,1129],{},[1099,2568,2569],{"class":1101,"line":1132},[1099,2570,2571],{},"        total = total + a[row][k];\n",[1099,2573,2574],{"class":1101,"line":1138},[1099,2575,1141],{},[1099,2577,2578],{"class":1101,"line":1144},[1099,2579,1147],{},[1099,2581,2582],{"class":1101,"line":1150},[1099,2583,1153],{},[1080,2585,2586],{},[1396,2587,2588],{},"Options:",[1652,2590,2591,2596,2602,2608],{},[1655,2592,2593,2594],{},"A. ",[1096,2595,2202],{},[1655,2597,2598,2599],{},"B. ",[1096,2600,2601],{},"11",[1655,2603,2604,2605],{},"C. ",[1096,2606,2607],{},"7",[1655,2609,2610,2611],{},"D. It throws an ",[1096,2612,2613],{},"ArrayIndexOutOfBoundsException",[1080,2615,2616,2619],{},[1396,2617,2618],{},"Answer:"," A",[1080,2621,2622,1722,2625,2628,2629,2632,2633,2635,2636,2638,2639,2642],{},[1396,2623,2624],{},"Why:",[1096,2626,2627],{},"k"," is used as the ",[1401,2630,2631],{},"column"," index while ",[1096,2634,1663],{}," changes, so this sums column ",[1096,2637,2095],{},": robot 2's pieces across both matches, ",[1096,2640,2641],{},"5 + 1 = 6",". Fixing the column and looping the rows sums a column, not a row.",[1652,2644,2645,2660,2679],{},[1655,2646,2647,2648,2650,2651,1722,2653,2655,2656,2659],{},"B is wrong — ",[1096,2649,2601],{}," is the sum of ",[1401,2652,1663],{},[1096,2654,2095],{}," (",[1096,2657,2658],{},"4 + 1 + 6","), the second match. That would need the row fixed and the column looping, which is the classic row-vs-column mix-up.",[1655,2661,2662,2663,2665,2666,2655,2668,2671,2672,2674,2675,2678],{},"C is wrong — ",[1096,2664,2607],{}," is the sum of column ",[1096,2667,1302],{},[1096,2669,2670],{},"3 + 4","). Column indices start at ",[1096,2673,1302],{},", so ",[1096,2676,2677],{},"k = 1"," is the second column, not the first.",[1655,2680,2681,2682,2684,2685,2687,2688,2690],{},"D is wrong — ",[1096,2683,1663],{}," stays below ",[1096,2686,1933],{}," (2), and column ",[1096,2689,2095],{}," exists in every row, so no index is ever out of bounds.",[1084,2692,2694],{"id":2693},"micro-parsons","Micro-Parsons",[1080,2696,2697,2700,2701,2704,2705,2708],{},[1396,2698,2699],{},"Problem:"," Given this class, the header and braces of a ",[1096,2702,2703],{},"getFastestOnDay"," method, and a ",[1096,2706,2707],{},"main"," method that calls it, reorder the fragments below into the method body. The 2D array holds battery-swap times in seconds, one row per pit crew member and one column per practice day. The method should return the fastest (smallest) time on the given day.",[1089,2710,2712],{"className":1091,"code":2711,"language":1093,"meta":1094,"style":1094},"public class BatterySwapTimes\n{\n    public static int getFastestOnDay(int[][] a, int day)\n    {\n        \u002F\u002F fragments go here\n    }\n\n    public static void main(String[] args)\n    {\n        int[][] swapTimes = { {42, 38, 35}, {40, 41, 33}, {45, 36, 37} };\n        System.out.println(getFastestOnDay(swapTimes, 1));\n    }\n}\n",[1096,2713,2714,2719,2723,2728,2732,2737,2741,2745,2750,2754,2759,2764,2768],{"__ignoreMap":1094},[1099,2715,2716],{"class":1101,"line":1102},[1099,2717,2718],{},"public class BatterySwapTimes\n",[1099,2720,2721],{"class":1101,"line":1108},[1099,2722,1111],{},[1099,2724,2725],{"class":1101,"line":1114},[1099,2726,2727],{},"    public static int getFastestOnDay(int[][] a, int day)\n",[1099,2729,2730],{"class":1101,"line":1120},[1099,2731,1129],{},[1099,2733,2734],{"class":1101,"line":1126},[1099,2735,2736],{},"        \u002F\u002F fragments go here\n",[1099,2738,2739],{"class":1101,"line":1132},[1099,2740,1141],{},[1099,2742,2743],{"class":1101,"line":1138},[1099,2744,1160],{"emptyLinePlaceholder":1159},[1099,2746,2747],{"class":1101,"line":1144},[1099,2748,2749],{},"    public static void main(String[] args)\n",[1099,2751,2752],{"class":1101,"line":1150},[1099,2753,1129],{},[1099,2755,2756],{"class":1101,"line":1156},[1099,2757,2758],{},"        int[][] swapTimes = { {42, 38, 35}, {40, 41, 33}, {45, 36, 37} };\n",[1099,2760,2761],{"class":1101,"line":1163},[1099,2762,2763],{},"        System.out.println(getFastestOnDay(swapTimes, 1));\n",[1099,2765,2766],{"class":1101,"line":1169},[1099,2767,1141],{},[1099,2769,2770],{"class":1101,"line":1174},[1099,2771,1153],{},[1080,2773,2774],{},"Reorder the fragments below to complete it:",[1652,2776,2777,2783,2789,2795,2801,2807,2813,2819,2825],{},[1655,2778,2779,2780],{},"a. ",[1096,2781,2782],{},"            {",[1655,2784,2785,2786],{},"b. ",[1096,2787,2788],{},"        return fastest;",[1655,2790,2791,2792],{},"c. ",[1096,2793,2794],{},"        for (int row = 0; row \u003C a.length; row++)",[1655,2796,2797,2798],{},"d. ",[1096,2799,2800],{},"                fastest = a[row][day];",[1655,2802,2803,2804],{},"e. ",[1096,2805,2806],{},"        }",[1655,2808,2809,2810],{},"f. ",[1096,2811,2812],{},"        int fastest = a[0][day];",[1655,2814,2815,2816],{},"g. ",[1096,2817,2818],{},"            if (a[row][day] \u003C fastest)",[1655,2820,2821,2822],{},"h. ",[1096,2823,2824],{},"        {",[1655,2826,2827,2828],{},"i. ",[1096,2829,2830],{},"            }",[1080,2832,2833,2835],{},[1396,2834,2618],{}," f, c, h, g, a, d, i, e, b",[1089,2837,2839],{"className":1091,"code":2838,"language":1093,"meta":1094,"style":1094},"public class BatterySwapTimes\n{\n    public static int getFastestOnDay(int[][] a, int day)\n    {\n        int fastest = a[0][day];\n        for (int row = 0; row \u003C a.length; row++)\n        {\n            if (a[row][day] \u003C fastest)\n            {\n                fastest = a[row][day];\n            }\n        }\n        return fastest;\n    }\n\n    public static void main(String[] args)\n    {\n        int[][] swapTimes = { {42, 38, 35}, {40, 41, 33}, {45, 36, 37} };\n        System.out.println(getFastestOnDay(swapTimes, 1));\n    }\n}\n",[1096,2840,2841,2845,2849,2853,2857,2862,2867,2871,2876,2880,2885,2889,2893,2898,2902,2906,2910,2914,2918,2922,2926],{"__ignoreMap":1094},[1099,2842,2843],{"class":1101,"line":1102},[1099,2844,2718],{},[1099,2846,2847],{"class":1101,"line":1108},[1099,2848,1111],{},[1099,2850,2851],{"class":1101,"line":1114},[1099,2852,2727],{},[1099,2854,2855],{"class":1101,"line":1120},[1099,2856,1129],{},[1099,2858,2859],{"class":1101,"line":1126},[1099,2860,2861],{},"        int fastest = a[0][day];\n",[1099,2863,2864],{"class":1101,"line":1132},[1099,2865,2866],{},"        for (int row = 0; row \u003C a.length; row++)\n",[1099,2868,2869],{"class":1101,"line":1138},[1099,2870,1258],{},[1099,2872,2873],{"class":1101,"line":1144},[1099,2874,2875],{},"            if (a[row][day] \u003C fastest)\n",[1099,2877,2878],{"class":1101,"line":1150},[1099,2879,1268],{},[1099,2881,2882],{"class":1101,"line":1156},[1099,2883,2884],{},"                fastest = a[row][day];\n",[1099,2886,2887],{"class":1101,"line":1163},[1099,2888,1278],{},[1099,2890,2891],{"class":1101,"line":1169},[1099,2892,1283],{},[1099,2894,2895],{"class":1101,"line":1174},[1099,2896,2897],{},"        return fastest;\n",[1099,2899,2900],{"class":1101,"line":1179},[1099,2901,1141],{},[1099,2903,2904],{"class":1101,"line":1185},[1099,2905,1160],{"emptyLinePlaceholder":1159},[1099,2907,2908],{"class":1101,"line":1190},[1099,2909,2749],{},[1099,2911,2912],{"class":1101,"line":1195},[1099,2913,1129],{},[1099,2915,2916],{"class":1101,"line":1200},[1099,2917,2758],{},[1099,2919,2920],{"class":1101,"line":1205},[1099,2921,2763],{},[1099,2923,2924],{"class":1101,"line":1499},[1099,2925,1141],{},[1099,2927,2928],{"class":1101,"line":1504},[1099,2929,1153],{},[1080,2931,2932,1722,2935,2655,2938,2941,2942,2945,2946,2948,2949,2951,2952,2955,2956,2959,2960,2955,2963,2966,2967,2655,2969,2972,2973,2975,2976,2979,2980,2983,2984,2655,2987,2990,2991,2993,2994,2997,2998,3000],{},[1396,2933,2934],{},"Why this order:",[1096,2936,2937],{},"fastest",[1096,2939,2940],{},"f",") is seeded first, with a real time from the chosen day's column (",[1096,2943,2944],{},"a[0][day]","), not ",[1096,2947,1302],{},". A seed of ",[1096,2950,1302],{}," would beat every real time. The loop (",[1096,2953,2954],{},"c",", ",[1096,2957,2958],{},"h",") walks the rows, because the day (the column) stays fixed while each crew member (row) is checked. Inside it, the comparison (",[1096,2961,2962],{},"g",[1096,2964,2965],{},"a",") replaces ",[1096,2968,2937],{},[1096,2970,2971],{},"d",") only when a smaller time turns up. The braces close in reverse of how they opened: the ",[1096,2974,2216],{},"'s (",[1096,2977,2978],{},"i","), then the loop's (",[1096,2981,2982],{},"e","). The ",[1096,2985,2986],{},"return",[1096,2988,2989],{},"b",") comes last, after every row has been checked. For day ",[1096,2992,2095],{},", this prints ",[1096,2995,2996],{},"36",". The class, the method header and its braces, and ",[1096,2999,2707],{}," are the given scaffold. Only the method body needed reordering.",[1084,3002,3004],{"id":3003},"coding","Coding",[1080,3006,3007,3010],{},[1396,3008,3009],{},"Mode:"," harness",[1080,3012,3013,3015,3016,3019,3020,3023,3024,3027,3028,3031,3032,3035],{},[1396,3014,2699],{}," Swerve telemetry is stored in a ",[1096,3017,3018],{},"double[][]"," with one row per module and one column per\ncurrent-draw sample (same layout as the lesson's ",[1096,3021,3022],{},"moduleCurrents","). Write\n",[1096,3025,3026],{},"getPeakSampleIndex",", which returns the index of the ",[1396,3029,3030],{},"sample column with the highest total current\nacross all modules"," — the instant the robot came closest to a brownout. If two columns tie for the\nhighest total, return the ",[1396,3033,3034],{},"earlier"," (smaller) column index. Every array has at least one row and\none column.",[1080,3037,3038],{},"Examples:",[1652,3040,3041,3049,3056],{},[1655,3042,3043,3046,3047],{},[1096,3044,3045],{},"getPeakSampleIndex(new double[][] { {12.1, 11.8, 40.2}, {12.0, 11.9, 12.1} })"," returns ",[1096,3048,2101],{},[1655,3050,3051,3046,3054],{},[1096,3052,3053],{},"getPeakSampleIndex(new double[][] { {5.0, 1.0}, {5.0, 1.0} })",[1096,3055,1302],{},[1655,3057,3058,3046,3061,3063,3064,3067],{},[1096,3059,3060],{},"getPeakSampleIndex(new double[][] { {3.0, 4.0}, {4.0, 3.0} })",[1096,3062,1302],{}," (both columns total ",[1096,3065,3066],{},"7.0",")",[1080,3069,3070,1722,3073],{},[1396,3071,3072],{},"Signature:",[1096,3074,3075],{},"public static int getPeakSampleIndex(double[][] currents)",[1080,3077,3078],{},[1396,3079,3080],{},"Starter:",[1089,3082,3084],{"className":1091,"code":3083,"language":1093,"meta":1094,"style":1094},"public class Solution\n{\n    public static int getPeakSampleIndex(double[][] currents)\n    {\n        \u002F\u002F TODO: return the index of the column with the highest total\n    }\n}\n",[1096,3085,3086,3091,3095,3100,3104,3109,3113],{"__ignoreMap":1094},[1099,3087,3088],{"class":1101,"line":1102},[1099,3089,3090],{},"public class Solution\n",[1099,3092,3093],{"class":1101,"line":1108},[1099,3094,1111],{},[1099,3096,3097],{"class":1101,"line":1114},[1099,3098,3099],{},"    public static int getPeakSampleIndex(double[][] currents)\n",[1099,3101,3102],{"class":1101,"line":1120},[1099,3103,1129],{},[1099,3105,3106],{"class":1101,"line":1126},[1099,3107,3108],{},"        \u002F\u002F TODO: return the index of the column with the highest total\n",[1099,3110,3111],{"class":1101,"line":1132},[1099,3112,1141],{},[1099,3114,3115],{"class":1101,"line":1138},[1099,3116,1153],{},[1080,3118,3119],{},[1396,3120,3121],{},"Tests:",[3123,3124,3125,3141],"table",{},[3126,3127,3128],"thead",{},[3129,3130,3131,3135,3138],"tr",{},[3132,3133,3134],"th",{},"Visible",[3132,3136,3137],{},"Arguments",[3132,3139,3140],{},"Expected",[3142,3143,3144,3159,3172,3185,3199,3212,3225],"tbody",{},[3129,3145,3146,3150,3155],{},[3147,3148,3149],"td",{},"yes",[3147,3151,3152],{},[1096,3153,3154],{},"new double[][] { {12.1, 11.8, 40.2}, {12.0, 11.9, 12.1} }",[3147,3156,3157],{},[1096,3158,2101],{},[3129,3160,3161,3163,3168],{},[3147,3162,3149],{},[3147,3164,3165],{},[1096,3166,3167],{},"new double[][] { {5.0, 1.0}, {5.0, 1.0} }",[3147,3169,3170],{},[1096,3171,1302],{},[3129,3173,3174,3176,3181],{},[3147,3175,3149],{},[3147,3177,3178],{},[1096,3179,3180],{},"new double[][] { {3.0, 4.0}, {4.0, 3.0} }",[3147,3182,3183],{},[1096,3184,1302],{},[3129,3186,3187,3190,3195],{},[3147,3188,3189],{},"no",[3147,3191,3192],{},[1096,3193,3194],{},"new double[][] { {1.5}, {2.5} }",[3147,3196,3197],{},[1096,3198,1302],{},[3129,3200,3201,3203,3208],{},[3147,3202,3189],{},[3147,3204,3205],{},[1096,3206,3207],{},"new double[][] { {1.0, 9.0, 2.0}, {1.0, 9.0, 2.0}, {1.0, 0.0, 2.0} }",[3147,3209,3210],{},[1096,3211,2095],{},[3129,3213,3214,3216,3221],{},[3147,3215,3189],{},[3147,3217,3218],{},[1096,3219,3220],{},"new double[][] { {2.0, 1.0, 3.0}, {2.0, 1.0, 3.0}, {9.0, 0.0, 0.0} }",[3147,3222,3223],{},[1096,3224,1302],{},[3129,3226,3227,3229,3234],{},[3147,3228,3189],{},[3147,3230,3231],{},[1096,3232,3233],{},"new double[][] { {1.0, 2.0, 2.0}, {1.0, 2.0, 2.0} }",[3147,3235,3236],{},[1096,3237,2095],{},[1080,3239,3240],{},[1396,3241,3242],{},"Solution:",[1089,3244,3246],{"className":1091,"code":3245,"language":1093,"meta":1094,"style":1094},"public class Solution\n{\n    public static int getPeakSampleIndex(double[][] currents)\n    {\n        int peakCol = 0;\n        double peakTotal = 0;\n        for (int row = 0; row \u003C currents.length; row++)\n        {\n            peakTotal = peakTotal + currents[row][0];\n        }\n        for (int col = 1; col \u003C currents[0].length; col++)\n        {\n            double total = 0;\n            for (int row = 0; row \u003C currents.length; row++)\n            {\n                total = total + currents[row][col];\n            }\n            if (total > peakTotal)\n            {\n                peakTotal = total;\n                peakCol = col;\n            }\n        }\n        return peakCol;\n    }\n}\n",[1096,3247,3248,3252,3256,3260,3264,3269,3274,3279,3283,3288,3292,3297,3301,3306,3311,3315,3320,3324,3329,3333,3338,3343,3347,3351,3356,3360],{"__ignoreMap":1094},[1099,3249,3250],{"class":1101,"line":1102},[1099,3251,3090],{},[1099,3253,3254],{"class":1101,"line":1108},[1099,3255,1111],{},[1099,3257,3258],{"class":1101,"line":1114},[1099,3259,3099],{},[1099,3261,3262],{"class":1101,"line":1120},[1099,3263,1129],{},[1099,3265,3266],{"class":1101,"line":1126},[1099,3267,3268],{},"        int peakCol = 0;\n",[1099,3270,3271],{"class":1101,"line":1132},[1099,3272,3273],{},"        double peakTotal = 0;\n",[1099,3275,3276],{"class":1101,"line":1138},[1099,3277,3278],{},"        for (int row = 0; row \u003C currents.length; row++)\n",[1099,3280,3281],{"class":1101,"line":1144},[1099,3282,1258],{},[1099,3284,3285],{"class":1101,"line":1150},[1099,3286,3287],{},"            peakTotal = peakTotal + currents[row][0];\n",[1099,3289,3290],{"class":1101,"line":1156},[1099,3291,1283],{},[1099,3293,3294],{"class":1101,"line":1163},[1099,3295,3296],{},"        for (int col = 1; col \u003C currents[0].length; col++)\n",[1099,3298,3299],{"class":1101,"line":1169},[1099,3300,1258],{},[1099,3302,3303],{"class":1101,"line":1174},[1099,3304,3305],{},"            double total = 0;\n",[1099,3307,3308],{"class":1101,"line":1179},[1099,3309,3310],{},"            for (int row = 0; row \u003C currents.length; row++)\n",[1099,3312,3313],{"class":1101,"line":1185},[1099,3314,1268],{},[1099,3316,3317],{"class":1101,"line":1190},[1099,3318,3319],{},"                total = total + currents[row][col];\n",[1099,3321,3322],{"class":1101,"line":1195},[1099,3323,1278],{},[1099,3325,3326],{"class":1101,"line":1200},[1099,3327,3328],{},"            if (total > peakTotal)\n",[1099,3330,3331],{"class":1101,"line":1205},[1099,3332,1268],{},[1099,3334,3335],{"class":1101,"line":1499},[1099,3336,3337],{},"                peakTotal = total;\n",[1099,3339,3340],{"class":1101,"line":1504},[1099,3341,3342],{},"                peakCol = col;\n",[1099,3344,3345],{"class":1101,"line":1510},[1099,3346,1278],{},[1099,3348,3349],{"class":1101,"line":1644},[1099,3350,1283],{},[1099,3352,3353],{"class":1101,"line":2324},[1099,3354,3355],{},"        return peakCol;\n",[1099,3357,3358],{"class":1101,"line":2329},[1099,3359,1141],{},[1099,3361,3363],{"class":1101,"line":3362},26,[1099,3364,1153],{},[1080,3366,3367,3369,3370,3372,3373,3375,3376,3378,3379,3381,3382,2655,3384,3387,3388,3391,3392,3395],{},[1396,3368,2624],{}," This combines two Lesson 10.3 patterns. Summing a column fixes ",[1096,3371,1667],{}," and loops ",[1096,3374,1663],{},"\n(",[1096,3377,1216],{},"). Finding the biggest total seeds with a real value — column ",[1096,3380,1302],{},"'s total — not\n",[1096,3383,1302],{},[1096,3385,3386],{},"getPeakCurrent","'s rule). Using ",[1096,3389,3390],{},">"," rather than ",[1096,3393,3394],{},">="," keeps the earlier column on a tie. A common\nmistake is summing rows instead of columns, which answers \"which module drew the most,\" a different\nquestion.",[1771,3397,1773],{},{"title":1094,"searchDepth":1108,"depth":1108,"links":3399},[3400,3401,3402],{"id":2517,"depth":1108,"text":2518},{"id":2693,"depth":1108,"text":2694},{"id":3003,"depth":1108,"text":3004},{"outlineRef":1785,"pairsWith":2504,"status":3404},"new — authored exercises (Multiple Choice + Micro-Parsons + Coding)",{"title":928,"description":1094},"5NdN1yx6qoZZ8pGG4VfvDS4R04ME6sU7LWZghe4M-GA",1792718165984]