[{"data":1,"prerenderedAt":2909},["ShallowReactive",2],{"item-lessons-light-ch13-common-gotchas":3,"item-examples-light-ch13-common-gotchas":444,"item-exercises-light-ch13-common-gotchas":753,"item-lesson-full-ch13-common-gotchas-13":1070,"item-example-full-ch13-common-gotchas-13":1714,"item-exercise-full-ch13-common-gotchas-13":2082},[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":194,"body":1072,"description":1706,"extension":1707,"meta":1708,"navigation":1711,"path":193,"seo":1712,"stem":195,"__hash__":1713},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas.md",{"type":1073,"value":1074,"toc":1696},"minimark",[1075,1079,1088,1093,1123,1158,1184,1190,1268,1272,1281,1296,1309,1313,1323,1338,1360,1374,1378,1401,1421,1432,1436,1457,1477,1480,1484,1502,1581,1588,1592,1617,1621,1681,1692],[1076,1077,194],"h1",{"id":1078},"common-gotchas",[1080,1081,1082,1083,1087],"p",{},"This chapter is a quick-reference checklist, not new material — each item below is taught in full elsewhere in this curriculum. Its job is to put the most common real mistakes side by side, since they tend to resurface long after the lesson that first covered them. ",[1084,1085,1086],"strong",{},"Note:"," this list is expected to grow once real code-review and exercise practice surfaces more of the mistakes people actually make — it currently only covers what the original deck flagged.",[1089,1090,1092],"h2",{"id":1091},"vs-equals","== vs. .equals()",[1080,1094,1095,1099,1100,1103,1104,1103,1107,1110,1111,1114,1115,1117,1118,1122],{},[1096,1097,1098],"code",{},"=="," compares primitives (",[1096,1101,1102],{},"int",", ",[1096,1105,1106],{},"double",[1096,1108,1109],{},"boolean",") by value, which is correct and sufficient for them. For objects — including ",[1096,1112,1113],{},"String"," — ",[1096,1116,1098],{}," instead checks whether two variables point at the ",[1119,1120,1121],"em",{},"exact same object in memory",", which is almost never what you actually want to ask:",[1124,1125,1130],"pre",{"className":1126,"code":1127,"language":1128,"meta":1129,"style":1129},"language-java shiki shiki-themes github-light github-dark","String a = new String(\"BlueAlliance-Left\");\nString b = new String(\"BlueAlliance-Left\");\nSystem.out.println(a == b);        \u002F\u002F false — two different objects, same text\nSystem.out.println(a.equals(b));   \u002F\u002F true — compares the actual characters\n","java","",[1096,1131,1132,1140,1146,1152],{"__ignoreMap":1129},[1133,1134,1137],"span",{"class":1135,"line":1136},"line",1,[1133,1138,1139],{},"String a = new String(\"BlueAlliance-Left\");\n",[1133,1141,1143],{"class":1135,"line":1142},2,[1133,1144,1145],{},"String b = new String(\"BlueAlliance-Left\");\n",[1133,1147,1149],{"class":1135,"line":1148},3,[1133,1150,1151],{},"System.out.println(a == b);        \u002F\u002F false — two different objects, same text\n",[1133,1153,1155],{"class":1135,"line":1154},4,[1133,1156,1157],{},"System.out.println(a.equals(b));   \u002F\u002F true — compares the actual characters\n",[1080,1159,1160,1161,1164,1165,1103,1168,1171,1172,1175,1176,1179,1180,1183],{},"Use ",[1096,1162,1163],{},".equals()"," — or a purpose-built comparison method like ",[1096,1166,1167],{},".equalsIgnoreCase()",[1096,1169,1170],{},".compareTo()",", or ",[1096,1173,1174],{},".contains()"," — for any object type, including boxed numbers like ",[1096,1177,1178],{},"Integer"," and ",[1096,1181,1182],{},"Double",". See Lesson 6.1 for the full explanation.",[1080,1185,1186,1187,1189],{},"A few ",[1096,1188,1098],{}," special cases worth knowing by heart:",[1191,1192,1193,1215,1251],"ul",{},[1194,1195,1196,1202,1203,1206,1207,1210,1211,1214],"li",{},[1084,1197,1198,1201],{},[1096,1199,1200],{},"double ==","."," Even without boxing, ",[1096,1204,1205],{},"0.1 + 0.2 == 0.3"," is ",[1096,1208,1209],{},"false"," — floating-point math rarely lands on an exact value. Compare with a tolerance instead (",[1096,1212,1213],{},"Math.abs(a - b) \u003C 0.0001","), as covered in Lesson 2.4.",[1194,1216,1217,1222,1223,1225,1226,1229,1230,1233,1234,1237,1238,1241,1242,1206,1245,1247,1248,1250],{},[1084,1218,1219,1201],{},[1096,1220,1221],{},"Integer =="," Java caches small boxed ",[1096,1224,1178],{}," values (",[1096,1227,1228],{},"-128"," to ",[1096,1231,1232],{},"127","), so ",[1096,1235,1236],{},"Integer x = 100, y = 100; x == y"," happens to be ",[1096,1239,1240],{},"true"," — but ",[1096,1243,1244],{},"Integer p = 1000, q = 1000; p == q",[1096,1246,1209],{},". Never rely on this; always use ",[1096,1249,1163],{}," for boxed numbers.",[1194,1252,1253,1256,1257,1256,1259,1262,1263,1179,1265,1267],{},[1084,1254,1255],{},"Enums are the exception."," ",[1096,1258,1098],{},[1119,1260,1261],{},"is"," safe (and preferred) for comparing enum constants (Lesson 11) — there's only ever one object per constant, so ",[1096,1264,1098],{},[1096,1266,1163],{}," always agree.",[1089,1269,1271],{"id":1270},"integer-division","Integer Division",[1080,1273,1274,1275,1277,1278,1280],{},"Dividing two ",[1096,1276,1102],{},"s produces an ",[1096,1279,1102],{}," — the fractional part is silently discarded (truncated), not rounded:",[1124,1282,1284],{"className":1126,"code":1283,"language":1128,"meta":1129,"style":1129},"int result = 5 \u002F 2;       \u002F\u002F 2, not 2.5 — the .5 is thrown away, not rounded\ndouble result2 = 5.0 \u002F 2.0; \u002F\u002F 2.5 — at least one operand must be a floating-point type\n",[1096,1285,1286,1291],{"__ignoreMap":1129},[1133,1287,1288],{"class":1135,"line":1136},[1133,1289,1290],{},"int result = 5 \u002F 2;       \u002F\u002F 2, not 2.5 — the .5 is thrown away, not rounded\n",[1133,1292,1293],{"class":1135,"line":1142},[1133,1294,1295],{},"double result2 = 5.0 \u002F 2.0; \u002F\u002F 2.5 — at least one operand must be a floating-point type\n",[1080,1297,1298,1299,1302,1303,1305,1306,1308],{},"This bites often when averaging (",[1096,1300,1301],{},"total \u002F count"," where both are ",[1096,1304,1102],{},") — cast at least one operand to ",[1096,1307,1106],{}," first. See Lesson 2.4 for casting rules in full.",[1089,1310,1312],{"id":1311},"nullpointerexception","NullPointerException",[1080,1314,1315,1316,1319,1320,1322],{},"Calling a method or accessing a field on a variable that's ",[1096,1317,1318],{},"null"," (declared but never assigned a real object) throws ",[1096,1321,1312],{}," — one of the most common runtime crashes in any Java program, robot code included:",[1124,1324,1326],{"className":1126,"code":1325,"language":1128,"meta":1129,"style":1129},"Drivetrain drivetrain = null; \u002F\u002F explicitly assigned null — no real object yet\ndrivetrain.stop();            \u002F\u002F NullPointerException — nothing to call stop() on\n",[1096,1327,1328,1333],{"__ignoreMap":1129},[1133,1329,1330],{"class":1135,"line":1136},[1133,1331,1332],{},"Drivetrain drivetrain = null; \u002F\u002F explicitly assigned null — no real object yet\n",[1133,1334,1335],{"class":1135,"line":1142},[1133,1336,1337],{},"drivetrain.stop();            \u002F\u002F NullPointerException — nothing to call stop() on\n",[1080,1339,1340,1341,1344,1345,1348,1349,1352,1353,1356,1357,1359],{},"(A ",[1119,1342,1343],{},"local"," variable left truly unassigned — just ",[1096,1346,1347],{},"Drivetrain drivetrain;"," with no ",[1096,1350,1351],{},"= null"," — is a different, compile-time error: Java refuses to compile code that reads it before it's given a value, reporting \"variable drivetrain might not have been initialized.\" Only a ",[1119,1354,1355],{},"field"," defaults to ",[1096,1358,1318],{}," automatically.)",[1080,1361,1362,1363,1366,1367,1369,1370,1373],{},"The fix is always the same shape: make sure every object is actually constructed (",[1096,1364,1365],{},"new Drivetrain(...)",") before anything calls a method on it, and check for ",[1096,1368,1318],{}," explicitly at any point where a value might legitimately be missing (e.g., a ",[1096,1371,1372],{},"HashMap.get()"," that found no match — see Lesson 9.3).",[1089,1375,1377],{"id":1376},"off-by-one","Off-by-One",[1080,1379,1380,1381,1384,1385,1388,1389,1392,1393,1396,1397,1400],{},"Arrays (and ",[1096,1382,1383],{},"ArrayList",") are indexed starting at ",[1096,1386,1387],{},"0"," — the last valid index is always ",[1096,1390,1391],{},"length - 1"," (or ",[1096,1394,1395],{},"size() - 1","), never ",[1096,1398,1399],{},"length"," itself:",[1124,1402,1404],{"className":1126,"code":1403,"language":1128,"meta":1129,"style":1129},"int[] canBusIds = new int[10]; \u002F\u002F valid indices: 0 through 9\n\u002F\u002F ArrayIndexOutOfBoundsException — 10 is one past the end\nSystem.out.println(canBusIds[10]);\n",[1096,1405,1406,1411,1416],{"__ignoreMap":1129},[1133,1407,1408],{"class":1135,"line":1136},[1133,1409,1410],{},"int[] canBusIds = new int[10]; \u002F\u002F valid indices: 0 through 9\n",[1133,1412,1413],{"class":1135,"line":1142},[1133,1414,1415],{},"\u002F\u002F ArrayIndexOutOfBoundsException — 10 is one past the end\n",[1133,1417,1418],{"class":1135,"line":1148},[1133,1419,1420],{},"System.out.println(canBusIds[10]);\n",[1080,1422,1423,1424,1427,1428,1431],{},"This is the single most common loop-bound mistake — writing ",[1096,1425,1426],{},"i \u003C= array.length"," instead of ",[1096,1429,1430],{},"i \u003C array.length",". See Lesson 9.1 (arrays) and 9.2 (ArrayList) for the full indexing rules.",[1089,1433,1435],{"id":1434},"ignoring-a-return-value","Ignoring a Return Value",[1080,1437,1438,1439,1103,1442,1445,1446,1449,1450,1452,1453,1456],{},"Methods like ",[1096,1440,1441],{},"String.toUpperCase()",[1096,1443,1444],{},".trim()",", and ",[1096,1447,1448],{},".replace()"," don't modify the object they're called on — ",[1096,1451,1113],{}," is immutable — they ",[1119,1454,1455],{},"return"," a new value. Calling one and throwing away the result does nothing:",[1124,1458,1460],{"className":1126,"code":1459,"language":1128,"meta":1129,"style":1129},"String teamName = \"shockwave\";\nteamName.toUpperCase();               \u002F\u002F return value discarded — teamName is unchanged\nteamName = teamName.toUpperCase();    \u002F\u002F correct — reassign the result\n",[1096,1461,1462,1467,1472],{"__ignoreMap":1129},[1133,1463,1464],{"class":1135,"line":1136},[1133,1465,1466],{},"String teamName = \"shockwave\";\n",[1133,1468,1469],{"class":1135,"line":1142},[1133,1470,1471],{},"teamName.toUpperCase();               \u002F\u002F return value discarded — teamName is unchanged\n",[1133,1473,1474],{"class":1135,"line":1148},[1133,1475,1476],{},"teamName = teamName.toUpperCase();    \u002F\u002F correct — reassign the result\n",[1080,1478,1479],{},"See Lesson 6.1 for the full list of String methods that work this way.",[1089,1481,1483],{"id":1482},"switch-fall-through","switch Fall-Through",[1080,1485,1486,1487,1490,1491,1256,1494,1497,1498,1501],{},"A colon-style ",[1096,1488,1489],{},"switch"," (Lesson 5.12) keeps running into the ",[1119,1492,1493],{},"next",[1096,1495,1496],{},"case"," once one matches, unless a ",[1096,1499,1500],{},"break"," stops it — forgetting one is a classic bug:",[1124,1503,1505],{"className":1126,"code":1504,"language":1128,"meta":1129,"style":1129},"switch (day)\n{\n    case 1:\n        System.out.println(\"Mon\");\n    case 2:                          \u002F\u002F day == 2 starts here...\n        System.out.println(\"Tue\");\n    case 3:                          \u002F\u002F ...and falls through to here too\n        System.out.println(\"Wed\");\n        break;\n    default:\n        System.out.println(\"other\");\n}\n\u002F\u002F day == 2 prints both \"Tue\" and \"Wed\" — not just \"Tue\"\n",[1096,1506,1507,1512,1517,1522,1527,1533,1539,1545,1551,1557,1563,1569,1575],{"__ignoreMap":1129},[1133,1508,1509],{"class":1135,"line":1136},[1133,1510,1511],{},"switch (day)\n",[1133,1513,1514],{"class":1135,"line":1142},[1133,1515,1516],{},"{\n",[1133,1518,1519],{"class":1135,"line":1148},[1133,1520,1521],{},"    case 1:\n",[1133,1523,1524],{"class":1135,"line":1154},[1133,1525,1526],{},"        System.out.println(\"Mon\");\n",[1133,1528,1530],{"class":1135,"line":1529},5,[1133,1531,1532],{},"    case 2:                          \u002F\u002F day == 2 starts here...\n",[1133,1534,1536],{"class":1135,"line":1535},6,[1133,1537,1538],{},"        System.out.println(\"Tue\");\n",[1133,1540,1542],{"class":1135,"line":1541},7,[1133,1543,1544],{},"    case 3:                          \u002F\u002F ...and falls through to here too\n",[1133,1546,1548],{"class":1135,"line":1547},8,[1133,1549,1550],{},"        System.out.println(\"Wed\");\n",[1133,1552,1554],{"class":1135,"line":1553},9,[1133,1555,1556],{},"        break;\n",[1133,1558,1560],{"class":1135,"line":1559},10,[1133,1561,1562],{},"    default:\n",[1133,1564,1566],{"class":1135,"line":1565},11,[1133,1567,1568],{},"        System.out.println(\"other\");\n",[1133,1570,1572],{"class":1135,"line":1571},12,[1133,1573,1574],{},"}\n",[1133,1576,1578],{"class":1135,"line":1577},13,[1133,1579,1580],{},"\u002F\u002F day == 2 prints both \"Tue\" and \"Wed\" — not just \"Tue\"\n",[1080,1582,1583,1584,1587],{},"Arrow-style ",[1096,1585,1586],{},"case ->"," (also Lesson 5.12) never falls through, which is why this course defaults to it.",[1089,1589,1591],{"id":1590},"common-pitfalls","Common Pitfalls",[1191,1593,1594,1600],{},[1194,1595,1596,1599],{},[1084,1597,1598],{},"Treating this chapter as the complete list of Java mistakes."," It isn't — it's the handful the original deck happened to flag. Real practice will surface plenty more (this chapter is expected to grow).",[1194,1601,1602,1605,1606,1608,1609,1612,1613,1616],{},[1084,1603,1604],{},"Fixing the symptom instead of the cause."," E.g., wrapping a ",[1096,1607,1312],{}," in a ",[1096,1610,1611],{},"try","\u002F",[1096,1614,1615],{},"catch"," (Lesson 12) instead of fixing why the object was never constructed in the first place.",[1089,1618,1620],{"id":1619},"key-takeaways","Key Takeaways",[1191,1622,1623,1640,1646,1651,1664,1678],{},[1194,1624,1160,1625,1627,1628,1630,1631,1633,1634,1636,1637,1639],{},[1096,1626,1098],{}," for primitives, ",[1096,1629,1163],{}," for objects (Lesson 6.1) — except enums, where ",[1096,1632,1098],{}," is safe. Watch ",[1096,1635,1200],{}," and the ",[1096,1638,1178],{}," cache.",[1194,1641,1642,1645],{},[1096,1643,1644],{},"int \u002F int"," truncates; make at least one operand a floating-point type to keep the fractional part (Lesson 2.4).",[1194,1647,1648,1650],{},[1096,1649,1312],{}," means something was used before it was actually constructed — always initialize before use (Lessons 4.4–4.6, 9.1).",[1194,1652,1653,1654,1229,1656,1392,1658,1660,1661,1663],{},"Valid indices run from ",[1096,1655,1387],{},[1096,1657,1391],{},[1096,1659,1395],{},") — never ",[1096,1662,1399],{}," itself (Lessons 9.1, 9.2).",[1194,1665,1666,1667,1669,1670,1672,1673,1675,1676,1201],{},"A discarded ",[1096,1668,1113],{}," method return value does nothing; a colon-style ",[1096,1671,1489],{}," without ",[1096,1674,1500],{}," falls through to the next ",[1096,1677,1496],{},[1194,1679,1680],{},"This is a living checklist, not a finished one — expect it to grow as more real gotchas surface through practice.",[1080,1682,1683,1684,1687,1688,1691],{},"Derived from ",[1096,1685,1686],{},"mechacoder-test",": ",[1096,1689,1690],{},"src\u002Flessons\u002Fjava-1.js",", slide 13 (\"Common Gotchas\") — original deck content, no external citation",[1693,1694,1695],"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":1129,"searchDepth":1142,"depth":1142,"links":1697},[1698,1699,1700,1701,1702,1703,1704,1705],{"id":1091,"depth":1142,"text":1092},{"id":1270,"depth":1142,"text":1271},{"id":1311,"depth":1142,"text":1312},{"id":1376,"depth":1142,"text":1377},{"id":1434,"depth":1142,"text":1435},{"id":1482,"depth":1142,"text":1483},{"id":1590,"depth":1142,"text":1591},{"id":1619,"depth":1142,"text":1620},"This chapter is a quick-reference checklist, not new material — each item below is taught in full elsewhere in this curriculum. Its job is to put the most common real mistakes side by side, since they tend to resurface long after the lesson that first covered them. Note: this list is expected to grow once real code-review and exercise practice surfaces more of the mistakes people actually make — it currently only covers what the original deck flagged.","md",{"outlineRef":1709,"status":1710},"13 — Common Gotchas (no citation — deck-original content)","new — authored lesson (fuller depth than the teaser slide)",true,{"title":194,"description":1706},"DgF-Uy1JCYxfyYXyoXyPMb1IRo4hAx5K5H3SbD9BwhA",{"id":1715,"title":631,"body":1716,"description":1129,"extension":1707,"meta":2077,"navigation":1711,"path":630,"seo":2080,"stem":632,"__hash__":2081},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch13-common-gotchas\u002F13-common-gotchas.md",{"type":1073,"value":1717,"toc":2068},[1718,1721,1725,1732,1736,1748,1754,1758,1788,1796,1829,1833,1843,1858,1864,1879,1883,1898,1904,1930,1934,2023,2029,2033,2066],[1076,1719,631],{"id":1720},"common-gotchas-worked-example",[1089,1722,1724],{"id":1723},"problem","Problem",[1080,1726,1727,1728,1731],{},"After 4 qualification matches, the scouting sheet shows the robot earned 38 climb points in total. Compute the average climb points per match for the pick-list meeting. This example works through the ",[1084,1729,1730],{},"integer division"," gotcha: the obvious code compiles, runs, and quietly gives the wrong answer.",[1089,1733,1735],{"id":1734},"step-1-plan-it-first","Step 1: Plan It First",[1737,1738,1739,1742,1745],"ol",{},[1194,1740,1741],{},"Store the total points and the number of matches.",[1194,1743,1744],{},"Divide to get the average, and check whether the result is actually right.",[1194,1746,1747],{},"If it's wrong, find out why and fix it.",[1080,1749,1750,1751,1201],{},"The right answer, worked out by hand first: 38 ÷ 4 = ",[1084,1752,1753],{},"9.5",[1089,1755,1757],{"id":1756},"step-2-the-obvious-first-try","Step 2: The Obvious First Try",[1124,1759,1761],{"className":1126,"code":1760,"language":1128,"meta":1129,"style":1129},"int totalClimbPoints = 38; \u002F\u002F over 4 qualification matches\nint matchesPlayed = 4;\n\ndouble firstTry = totalClimbPoints \u002F matchesPlayed;\nSystem.out.println(\"First try:  \" + firstTry);\n",[1096,1762,1763,1768,1773,1778,1783],{"__ignoreMap":1129},[1133,1764,1765],{"class":1135,"line":1136},[1133,1766,1767],{},"int totalClimbPoints = 38; \u002F\u002F over 4 qualification matches\n",[1133,1769,1770],{"class":1135,"line":1142},[1133,1771,1772],{},"int matchesPlayed = 4;\n",[1133,1774,1775],{"class":1135,"line":1148},[1133,1776,1777],{"emptyLinePlaceholder":1711},"\n",[1133,1779,1780],{"class":1135,"line":1154},[1133,1781,1782],{},"double firstTry = totalClimbPoints \u002F matchesPlayed;\n",[1133,1784,1785],{"class":1135,"line":1529},[1133,1786,1787],{},"System.out.println(\"First try:  \" + firstTry);\n",[1124,1789,1794],{"className":1790,"code":1792,"language":1793},[1791],"language-text","First try:  9.0\n","text",[1096,1795,1792],{"__ignoreMap":1129},[1080,1797,1798,1799,1801,1802,1206,1805,1807,1808,1810,1811,1814,1815,1818,1819,1821,1822,1825,1826,1828],{},"Storing the result in a ",[1096,1800,1106],{}," didn't help. Java evaluates the right-hand side first: ",[1096,1803,1804],{},"totalClimbPoints \u002F matchesPlayed",[1096,1806,1644],{},", so the answer is an ",[1096,1809,1102],{}," (",[1096,1812,1813],{},"9","). The ",[1096,1816,1817],{},".5"," is thrown away, not rounded. Only after that is the ",[1096,1820,1813],{}," widened to ",[1096,1823,1824],{},"9.0"," to fit the ",[1096,1827,1106],{}," variable, and by then the fraction is already gone.",[1089,1830,1832],{"id":1831},"step-3-a-tempting-fix-that-still-doesnt-work","Step 3: A Tempting Fix That Still Doesn't Work",[1080,1834,1835,1836,1838,1839,1842],{},"Casting to ",[1096,1837,1106],{}," sounds like the fix, but ",[1119,1840,1841],{},"where"," the cast goes matters:",[1124,1844,1846],{"className":1126,"code":1845,"language":1128,"meta":1129,"style":1129},"double secondTry = (double) (totalClimbPoints \u002F matchesPlayed);\nSystem.out.println(\"Second try: \" + secondTry);\n",[1096,1847,1848,1853],{"__ignoreMap":1129},[1133,1849,1850],{"class":1135,"line":1136},[1133,1851,1852],{},"double secondTry = (double) (totalClimbPoints \u002F matchesPlayed);\n",[1133,1854,1855],{"class":1135,"line":1142},[1133,1856,1857],{},"System.out.println(\"Second try: \" + secondTry);\n",[1124,1859,1862],{"className":1860,"code":1861,"language":1793},[1791],"Second try: 9.0\n",[1096,1863,1861],{"__ignoreMap":1129},[1080,1865,1866,1867,1869,1870,1872,1873,1875,1876,1878],{},"The parentheses force the division to happen first, still as ",[1096,1868,1644],{},", so it still produces ",[1096,1871,1813],{},". The cast then turns that ",[1096,1874,1813],{}," into ",[1096,1877,1824],{},". The fraction was lost before the cast ever ran.",[1089,1880,1882],{"id":1881},"step-4-the-fix-casting-before-dividing","Step 4: The Fix, Casting Before Dividing",[1124,1884,1886],{"className":1126,"code":1885,"language":1128,"meta":1129,"style":1129},"double average = (double) totalClimbPoints \u002F matchesPlayed;\nSystem.out.println(\"Correct:    \" + average);\n",[1096,1887,1888,1893],{"__ignoreMap":1129},[1133,1889,1890],{"class":1135,"line":1136},[1133,1891,1892],{},"double average = (double) totalClimbPoints \u002F matchesPlayed;\n",[1133,1894,1895],{"class":1135,"line":1142},[1133,1896,1897],{},"System.out.println(\"Correct:    \" + average);\n",[1124,1899,1902],{"className":1900,"code":1901,"language":1793},[1791],"Correct:    9.5\n",[1096,1903,1901],{"__ignoreMap":1129},[1080,1905,1906,1907,1910,1911,1875,1914,1256,1917,1920,1921,1924,1925,1927,1928,1201],{},"Now the cast applies to ",[1096,1908,1909],{},"totalClimbPoints"," alone, turning ",[1096,1912,1913],{},"38",[1096,1915,1916],{},"38.0",[1119,1918,1919],{},"before"," the division. ",[1096,1922,1923],{},"double \u002F int"," is floating-point division, so the ",[1096,1926,1817],{}," survives. Only one operand needs to be a ",[1096,1929,1106],{},[1089,1931,1933],{"id":1932},"the-full-program","The Full Program",[1124,1935,1937],{"className":1126,"code":1936,"language":1128,"meta":1129,"style":1129},"public class ClimbAverage\n{\n    public static void main(String[] args)\n    {\n        int totalClimbPoints = 38; \u002F\u002F over 4 qualification matches\n        int matchesPlayed = 4;\n\n        double firstTry = totalClimbPoints \u002F matchesPlayed;\n        System.out.println(\"First try:  \" + firstTry);\n\n        double secondTry = (double) (totalClimbPoints \u002F matchesPlayed);\n        System.out.println(\"Second try: \" + secondTry);\n\n        double average = (double) totalClimbPoints \u002F matchesPlayed;\n        System.out.println(\"Correct:    \" + average);\n    }\n}\n",[1096,1938,1939,1944,1948,1953,1958,1963,1968,1972,1977,1982,1986,1991,1996,2000,2006,2012,2018],{"__ignoreMap":1129},[1133,1940,1941],{"class":1135,"line":1136},[1133,1942,1943],{},"public class ClimbAverage\n",[1133,1945,1946],{"class":1135,"line":1142},[1133,1947,1516],{},[1133,1949,1950],{"class":1135,"line":1148},[1133,1951,1952],{},"    public static void main(String[] args)\n",[1133,1954,1955],{"class":1135,"line":1154},[1133,1956,1957],{},"    {\n",[1133,1959,1960],{"class":1135,"line":1529},[1133,1961,1962],{},"        int totalClimbPoints = 38; \u002F\u002F over 4 qualification matches\n",[1133,1964,1965],{"class":1135,"line":1535},[1133,1966,1967],{},"        int matchesPlayed = 4;\n",[1133,1969,1970],{"class":1135,"line":1541},[1133,1971,1777],{"emptyLinePlaceholder":1711},[1133,1973,1974],{"class":1135,"line":1547},[1133,1975,1976],{},"        double firstTry = totalClimbPoints \u002F matchesPlayed;\n",[1133,1978,1979],{"class":1135,"line":1553},[1133,1980,1981],{},"        System.out.println(\"First try:  \" + firstTry);\n",[1133,1983,1984],{"class":1135,"line":1559},[1133,1985,1777],{"emptyLinePlaceholder":1711},[1133,1987,1988],{"class":1135,"line":1565},[1133,1989,1990],{},"        double secondTry = (double) (totalClimbPoints \u002F matchesPlayed);\n",[1133,1992,1993],{"class":1135,"line":1571},[1133,1994,1995],{},"        System.out.println(\"Second try: \" + secondTry);\n",[1133,1997,1998],{"class":1135,"line":1577},[1133,1999,1777],{"emptyLinePlaceholder":1711},[1133,2001,2003],{"class":1135,"line":2002},14,[1133,2004,2005],{},"        double average = (double) totalClimbPoints \u002F matchesPlayed;\n",[1133,2007,2009],{"class":1135,"line":2008},15,[1133,2010,2011],{},"        System.out.println(\"Correct:    \" + average);\n",[1133,2013,2015],{"class":1135,"line":2014},16,[1133,2016,2017],{},"    }\n",[1133,2019,2021],{"class":1135,"line":2020},17,[1133,2022,1574],{},[1124,2024,2027],{"className":2025,"code":2026,"language":1793},[1791],"First try:  9.0\nSecond try: 9.0\nCorrect:    9.5\n",[1096,2028,2026],{"__ignoreMap":1129},[1089,2030,2032],{"id":2031},"recap","Recap",[1191,2034,2035,2043,2049,2063],{},[1194,2036,2037,2039,2040,2042],{},[1096,2038,1644],{}," always produces an ",[1096,2041,1102],{},". The fractional part is cut off, not rounded, and no error or warning appears.",[1194,2044,2045,2046,2048],{},"Storing that result in a ",[1096,2047,1106],{}," doesn't bring the fraction back. The division already happened as whole numbers.",[1194,2050,2051,2052,2055,2056,2058,2059,2062],{},"Casting the result of the division (",[1096,2053,2054],{},"(double) (a \u002F b)",") is too late. Cast one operand ",[1119,2057,1919],{}," dividing (",[1096,2060,2061],{},"(double) a \u002F b",").",[1194,2064,2065],{},"Averages are where this bites most often, so always check an average against a hand-worked answer (Lesson 2.4 has the full casting rules).",[1693,2067,1695],{},{"title":1129,"searchDepth":1142,"depth":1142,"links":2069},[2070,2071,2072,2073,2074,2075,2076],{"id":1723,"depth":1142,"text":1724},{"id":1734,"depth":1142,"text":1735},{"id":1756,"depth":1142,"text":1757},{"id":1831,"depth":1142,"text":1832},{"id":1881,"depth":1142,"text":1882},{"id":1932,"depth":1142,"text":1933},{"id":2031,"depth":1142,"text":2032},{"outlineRef":1709,"pairsWith":2078,"status":2079},"[`lessons\u002Fch13-common-gotchas\u002F13-common-gotchas.md`](..\u002F..\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas.md)","new — authored worked example (fully solved, walked step by step — not a problem to attempt)",{"title":631,"description":1129},"zEBu4xLvOMh9EX2u1rtyRJT4TU7JLosi-k4VMyzBG_M",{"id":2083,"title":940,"body":2084,"description":1129,"extension":1707,"meta":2905,"navigation":1711,"path":939,"seo":2907,"stem":941,"__hash__":2908},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch13-common-gotchas\u002F13-common-gotchas.md",{"type":1073,"value":2085,"toc":2900},[2086,2089,2093,2099,2154,2159,2187,2193,2231,2261,2265,2286,2289,2357,2362,2425,2431,2508,2512,2518,2553,2556,2581,2589,2594,2630,2635,2751,2756,2852,2898],[1076,2087,940],{"id":2088},"common-gotchas-exercises",[1089,2090,2092],{"id":2091},"multiple-choice","Multiple Choice",[1080,2094,2095,2098],{},[1084,2096,2097],{},"Question:"," The driver picks an autonomous routine on the dashboard, and the code checks it against the routine the strategy team planned. What does this print?",[1124,2100,2102],{"className":1126,"code":2101,"language":1128,"meta":1129,"style":1129},"String selectedAuto = new String(\"TwoPieceCenter\");\nString plannedAuto = new String(\"TwoPieceCenter\");\n\nif (selectedAuto == plannedAuto)\n{\n    System.out.println(\"Running planned auto\");\n}\nelse\n{\n    System.out.println(\"Auto mismatch - check the dashboard\");\n}\n",[1096,2103,2104,2109,2114,2118,2123,2127,2132,2136,2141,2145,2150],{"__ignoreMap":1129},[1133,2105,2106],{"class":1135,"line":1136},[1133,2107,2108],{},"String selectedAuto = new String(\"TwoPieceCenter\");\n",[1133,2110,2111],{"class":1135,"line":1142},[1133,2112,2113],{},"String plannedAuto = new String(\"TwoPieceCenter\");\n",[1133,2115,2116],{"class":1135,"line":1148},[1133,2117,1777],{"emptyLinePlaceholder":1711},[1133,2119,2120],{"class":1135,"line":1154},[1133,2121,2122],{},"if (selectedAuto == plannedAuto)\n",[1133,2124,2125],{"class":1135,"line":1529},[1133,2126,1516],{},[1133,2128,2129],{"class":1135,"line":1535},[1133,2130,2131],{},"    System.out.println(\"Running planned auto\");\n",[1133,2133,2134],{"class":1135,"line":1541},[1133,2135,1574],{},[1133,2137,2138],{"class":1135,"line":1547},[1133,2139,2140],{},"else\n",[1133,2142,2143],{"class":1135,"line":1553},[1133,2144,1516],{},[1133,2146,2147],{"class":1135,"line":1559},[1133,2148,2149],{},"    System.out.println(\"Auto mismatch - check the dashboard\");\n",[1133,2151,2152],{"class":1135,"line":1565},[1133,2153,1574],{},[1080,2155,2156],{},[1084,2157,2158],{},"Options:",[1191,2160,2161,2167,2173,2182],{},[1194,2162,2163,2164],{},"A. ",[1096,2165,2166],{},"Running planned auto",[1194,2168,2169,2170],{},"B. ",[1096,2171,2172],{},"Auto mismatch - check the dashboard",[1194,2174,2175,2176,2178,2179,2181],{},"C. Nothing. It doesn't compile, because ",[1096,2177,1098],{}," can't be used on ",[1096,2180,1113],{},"s",[1194,2183,2184,2185],{},"D. Nothing. It throws a ",[1096,2186,1312],{},[1080,2188,2189,2192],{},[1084,2190,2191],{},"Answer:"," B",[1080,2194,2195,2198,2199,1103,2201,2203,2204,2206,2207,2210,2211,1206,2214,2216,2217,2220,2221,2224,2225,2228,2229,1201],{},[1084,2196,2197],{},"Why:"," For objects like ",[1096,2200,1113],{},[1096,2202,1098],{}," checks whether two variables point at the ",[1119,2205,1121],{},", not whether their text matches. Each ",[1096,2208,2209],{},"new String(...)"," builds a separate object, so ",[1096,2212,2213],{},"selectedAuto == plannedAuto",[1096,2215,1209],{}," even though both hold ",[1096,2218,2219],{},"\"TwoPieceCenter\"",". The ",[1096,2222,2223],{},"else"," branch runs. The fix is ",[1096,2226,2227],{},"selectedAuto.equals(plannedAuto)",", which compares the actual characters and would print ",[1096,2230,2166],{},[1191,2232,2233,2242,2251],{},[1194,2234,2235,2236,2238,2239,2241],{},"A is wrong. That's what ",[1096,2237,1163],{}," would print. ",[1096,2240,1098],{}," isn't comparing the text here.",[1194,2243,2244,2245,2247,2248,2250],{},"C is wrong. ",[1096,2246,1098],{}," on two ",[1096,2249,1113],{},"s compiles and runs without complaint. That's what makes this gotcha dangerous: it silently gives the wrong answer instead of an error.",[1194,2252,2253,2254,2257,2258,2260],{},"D is wrong. Both variables are assigned real objects with ",[1096,2255,2256],{},"new",", so neither is ",[1096,2259,1318],{},". Nothing is being called on a missing object.",[1089,2262,2264],{"id":2263},"micro-parsons","Micro-Parsons",[1080,2266,2267,2270,2271,2274,2275,2277,2278,2280,2281,2283,2284,1201],{},[1084,2268,2269],{},"Problem:"," These lines, once correctly ordered, form a complete program that keeps a list of pit repairs. The list is declared as a field at the top of the class, and ",[1096,2272,2273],{},"main"," adds one repair and prints how many repairs are on the list. Watch the order inside ",[1096,2276,2273],{},": a field that's declared but never assigned an object is ",[1096,2279,1318],{},", so any method called on it before ",[1096,2282,2256],{}," runs throws a ",[1096,2285,1312],{},[1080,2287,2288],{},"Reorder the fragments below into a working program:",[1191,2290,2291,2297,2303,2309,2315,2321,2327,2333,2339,2345,2351],{},[1194,2292,2293,2294],{},"a. ",[1096,2295,2296],{},"        repairs.add(\"Re-tension intake belt\");",[1194,2298,2299,2300],{},"b. ",[1096,2301,2302],{},"public class PitRepairs",[1194,2304,2305,2306],{},"c. ",[1096,2307,2308],{},"    }",[1194,2310,2311,2312],{},"d. ",[1096,2313,2314],{},"    private static ArrayList\u003CString> repairs;",[1194,2316,2317,2318],{},"e. ",[1096,2319,2320],{},"        repairs = new ArrayList\u003CString>();",[1194,2322,2323,2324],{},"f. ",[1096,2325,2326],{},"}",[1194,2328,2329,2330],{},"g. ",[1096,2331,2332],{},"    public static void main(String[] args)",[1194,2334,2335,2336],{},"h. ",[1096,2337,2338],{},"import java.util.ArrayList;",[1194,2340,2341,2342],{},"i. ",[1096,2343,2344],{},"        System.out.println(repairs.size());",[1194,2346,2347,2348],{},"j. ",[1096,2349,2350],{},"{",[1194,2352,2353,2354],{},"k. ",[1096,2355,2356],{},"    {",[1080,2358,2359,2361],{},[1084,2360,2191],{}," h, b, j, d, g, k, e, a, i, c, f",[1124,2363,2365],{"className":1126,"code":2364,"language":1128,"meta":1129,"style":1129},"import java.util.ArrayList;\n\npublic class PitRepairs\n{\n    private static ArrayList\u003CString> repairs;\n\n    public static void main(String[] args)\n    {\n        repairs = new ArrayList\u003CString>();\n        repairs.add(\"Re-tension intake belt\");\n        System.out.println(repairs.size());\n    }\n}\n",[1096,2366,2367,2372,2376,2381,2385,2390,2394,2398,2402,2407,2412,2417,2421],{"__ignoreMap":1129},[1133,2368,2369],{"class":1135,"line":1136},[1133,2370,2371],{},"import java.util.ArrayList;\n",[1133,2373,2374],{"class":1135,"line":1142},[1133,2375,1777],{"emptyLinePlaceholder":1711},[1133,2377,2378],{"class":1135,"line":1148},[1133,2379,2380],{},"public class PitRepairs\n",[1133,2382,2383],{"class":1135,"line":1154},[1133,2384,1516],{},[1133,2386,2387],{"class":1135,"line":1529},[1133,2388,2389],{},"    private static ArrayList\u003CString> repairs;\n",[1133,2391,2392],{"class":1135,"line":1535},[1133,2393,1777],{"emptyLinePlaceholder":1711},[1133,2395,2396],{"class":1135,"line":1541},[1133,2397,1952],{},[1133,2399,2400],{"class":1135,"line":1547},[1133,2401,1957],{},[1133,2403,2404],{"class":1135,"line":1553},[1133,2405,2406],{},"        repairs = new ArrayList\u003CString>();\n",[1133,2408,2409],{"class":1135,"line":1559},[1133,2410,2411],{},"        repairs.add(\"Re-tension intake belt\");\n",[1133,2413,2414],{"class":1135,"line":1565},[1133,2415,2416],{},"        System.out.println(repairs.size());\n",[1133,2418,2419],{"class":1135,"line":1571},[1133,2420,2017],{},[1133,2422,2423],{"class":1135,"line":1577},[1133,2424,1574],{},[1080,2426,2427,2428],{},"Output: ",[1096,2429,2430],{},"1",[1080,2432,2433,2436,2437,1810,2440,2443,2444,2446,2447,1103,2450,2453,2454,2457,2458,2460,2461,1103,2464,2467,2468,2470,2471,2473,2474,2477,2478,2481,2482,2484,2485,2487,2488,1810,2491,2494,2495,2497,2498,2500,2501,2504,2505,2062],{},[1084,2434,2435],{},"Why this order:"," The ",[1096,2438,2439],{},"import",[1096,2441,2442],{},"h",") comes before the class that uses ",[1096,2445,1383],{},". The class line and its brace (",[1096,2448,2449],{},"b",[1096,2451,2452],{},"j",") come next, then the field (",[1096,2455,2456],{},"d","), placed at the top of the class as the problem states. ",[1096,2459,2273],{},"'s signature and brace (",[1096,2462,2463],{},"g",[1096,2465,2466],{},"k",") follow. Inside ",[1096,2469,2273],{},", order is the whole point. The field starts out ",[1096,2472,1318],{},", so the list has to be constructed (",[1096,2475,2476],{},"e",") before anything calls a method on it. Putting ",[1096,2479,2480],{},"a"," first compiles fine but crashes at run time with a ",[1096,2483,1312],{},", because there's no list yet to add to. After construction, the repair is added (",[1096,2486,2480],{},"), and only then does ",[1096,2489,2490],{},"size()",[1096,2492,2493],{},"i",") report ",[1096,2496,2430],{},". The braces close in reverse: ",[1096,2499,2273],{},"'s body (",[1096,2502,2503],{},"c","), then the class's body (",[1096,2506,2507],{},"f",[1089,2509,2511],{"id":2510},"coding","Coding",[1080,2513,2514,2517],{},[1084,2515,2516],{},"Mode:"," harness",[1080,2519,2520,2522,2523,2525,2526,2528,2529,2532,2533,2536,2537,2540,2541,2543,2544,2546,2547,2549,2550,2552],{},[1084,2521,2269],{}," A scouting sheet lists the teams seen in each match as ",[1096,2524,1113],{},"s typed by hand, so they\nare messy: random capitalisation, stray spaces around the name, and ",[1096,2527,1318],{}," where nobody entered\nanything. Write ",[1096,2530,2531],{},"countMatches",", which returns how many entries in ",[1096,2534,2535],{},"scouted"," name the same team as\n",[1096,2538,2539],{},"target",". An entry matches when, after removing the spaces at its start and end, it equals ",[1096,2542,2539],{},"\nignoring upper\u002Flower case. A ",[1096,2545,1318],{}," entry never matches. ",[1096,2548,2539],{}," is never ",[1096,2551,1318],{}," and has no extra\nspaces.",[1080,2554,2555],{},"Examples:",[1191,2557,2558,2567,2574],{},[1194,2559,2560,2563,2564],{},[1096,2561,2562],{},"countMatches(new String[] {\"Shockwave\", \"Other\", \"shockwave \"}, \"Shockwave\")"," returns ",[1096,2565,2566],{},"2",[1194,2568,2569,2563,2572],{},[1096,2570,2571],{},"countMatches(new String[] {\"  SHOCKWAVE\"}, \"Shockwave\")",[1096,2573,2430],{},[1194,2575,2576,2563,2579],{},[1096,2577,2578],{},"countMatches(new String[] {\"Alpha\", \"Beta\"}, \"Gamma\")",[1096,2580,1387],{},[1080,2582,2583,1256,2586],{},[1084,2584,2585],{},"Signature:",[1096,2587,2588],{},"public static int countMatches(String[] scouted, String target)",[1080,2590,2591],{},[1084,2592,2593],{},"Starter:",[1124,2595,2597],{"className":1126,"code":2596,"language":1128,"meta":1129,"style":1129},"public class Solution\n{\n    public static int countMatches(String[] scouted, String target)\n    {\n        \u002F\u002F TODO: count the entries that name the same team as target\n    }\n}\n",[1096,2598,2599,2604,2608,2613,2617,2622,2626],{"__ignoreMap":1129},[1133,2600,2601],{"class":1135,"line":1136},[1133,2602,2603],{},"public class Solution\n",[1133,2605,2606],{"class":1135,"line":1142},[1133,2607,1516],{},[1133,2609,2610],{"class":1135,"line":1148},[1133,2611,2612],{},"    public static int countMatches(String[] scouted, String target)\n",[1133,2614,2615],{"class":1135,"line":1154},[1133,2616,1957],{},[1133,2618,2619],{"class":1135,"line":1529},[1133,2620,2621],{},"        \u002F\u002F TODO: count the entries that name the same team as target\n",[1133,2623,2624],{"class":1135,"line":1535},[1133,2625,2017],{},[1133,2627,2628],{"class":1135,"line":1541},[1133,2629,1574],{},[1080,2631,2632],{},[1084,2633,2634],{},"Tests:",[2636,2637,2638,2654],"table",{},[2639,2640,2641],"thead",{},[2642,2643,2644,2648,2651],"tr",{},[2645,2646,2647],"th",{},"Visible",[2645,2649,2650],{},"Arguments",[2645,2652,2653],{},"Expected",[2655,2656,2657,2672,2685,2698,2712,2725,2738],"tbody",{},[2642,2658,2659,2663,2668],{},[2660,2661,2662],"td",{},"yes",[2660,2664,2665],{},[1096,2666,2667],{},"new String[] {\"Shockwave\", \"Other\", \"shockwave \"}, \"Shockwave\"",[2660,2669,2670],{},[1096,2671,2566],{},[2642,2673,2674,2676,2681],{},[2660,2675,2662],{},[2660,2677,2678],{},[1096,2679,2680],{},"new String[] {\"  SHOCKWAVE\"}, \"Shockwave\"",[2660,2682,2683],{},[1096,2684,2430],{},[2642,2686,2687,2689,2694],{},[2660,2688,2662],{},[2660,2690,2691],{},[1096,2692,2693],{},"new String[] {\"Alpha\", \"Beta\"}, \"Gamma\"",[2660,2695,2696],{},[1096,2697,1387],{},[2642,2699,2700,2703,2708],{},[2660,2701,2702],{},"no",[2660,2704,2705],{},[1096,2706,2707],{},"new String[] {null, \"Shockwave\", null}, \"Shockwave\"",[2660,2709,2710],{},[1096,2711,2430],{},[2642,2713,2714,2716,2721],{},[2660,2715,2702],{},[2660,2717,2718],{},[1096,2719,2720],{},"new String[] {new String(\"Shockwave\"), new String(\"Shockwave\")}, \"Shockwave\"",[2660,2722,2723],{},[1096,2724,2566],{},[2642,2726,2727,2729,2734],{},[2660,2728,2702],{},[2660,2730,2731],{},[1096,2732,2733],{},"new String[] {\" shockWAVE \", null, \"Shock wave\", \"SHOCKWAVE\"}, \"Shockwave\"",[2660,2735,2736],{},[1096,2737,2566],{},[2642,2739,2740,2742,2747],{},[2660,2741,2702],{},[2660,2743,2744],{},[1096,2745,2746],{},"new String[] {}, \"Shockwave\"",[2660,2748,2749],{},[1096,2750,1387],{},[1080,2752,2753],{},[1084,2754,2755],{},"Solution:",[1124,2757,2759],{"className":1126,"code":2758,"language":1128,"meta":1129,"style":1129},"public class Solution\n{\n    public static int countMatches(String[] scouted, String target)\n    {\n        int count = 0;\n        for (String entry : scouted)\n        {\n            if (entry != null)\n            {\n                String cleaned = entry.trim();\n                if (cleaned.equalsIgnoreCase(target))\n                {\n                    count++;\n                }\n            }\n        }\n        return count;\n    }\n}\n",[1096,2760,2761,2765,2769,2773,2777,2782,2787,2792,2797,2802,2807,2812,2817,2822,2827,2832,2837,2842,2847],{"__ignoreMap":1129},[1133,2762,2763],{"class":1135,"line":1136},[1133,2764,2603],{},[1133,2766,2767],{"class":1135,"line":1142},[1133,2768,1516],{},[1133,2770,2771],{"class":1135,"line":1148},[1133,2772,2612],{},[1133,2774,2775],{"class":1135,"line":1154},[1133,2776,1957],{},[1133,2778,2779],{"class":1135,"line":1529},[1133,2780,2781],{},"        int count = 0;\n",[1133,2783,2784],{"class":1135,"line":1535},[1133,2785,2786],{},"        for (String entry : scouted)\n",[1133,2788,2789],{"class":1135,"line":1541},[1133,2790,2791],{},"        {\n",[1133,2793,2794],{"class":1135,"line":1547},[1133,2795,2796],{},"            if (entry != null)\n",[1133,2798,2799],{"class":1135,"line":1553},[1133,2800,2801],{},"            {\n",[1133,2803,2804],{"class":1135,"line":1559},[1133,2805,2806],{},"                String cleaned = entry.trim();\n",[1133,2808,2809],{"class":1135,"line":1565},[1133,2810,2811],{},"                if (cleaned.equalsIgnoreCase(target))\n",[1133,2813,2814],{"class":1135,"line":1571},[1133,2815,2816],{},"                {\n",[1133,2818,2819],{"class":1135,"line":1577},[1133,2820,2821],{},"                    count++;\n",[1133,2823,2824],{"class":1135,"line":2002},[1133,2825,2826],{},"                }\n",[1133,2828,2829],{"class":1135,"line":2008},[1133,2830,2831],{},"            }\n",[1133,2833,2834],{"class":1135,"line":2014},[1133,2835,2836],{},"        }\n",[1133,2838,2839],{"class":1135,"line":2020},[1133,2840,2841],{},"        return count;\n",[1133,2843,2845],{"class":1135,"line":2844},18,[1133,2846,2017],{},[1133,2848,2850],{"class":1135,"line":2849},19,[1133,2851,1574],{},[1080,2853,2854,2856,2857,2859,2860,2862,2863,2865,2866,2869,2870,2873,2874,2877,2878,2880,2881,2884,2885,2888,2889,2891,2892,2894,2895,2897],{},[1084,2855,2197],{}," This stacks three gotchas from the chapter. ",[1096,2858,1098],{}," on ",[1096,2861,1113],{},"s compares identity, so two\nequal-looking strings can fail it (the ",[1096,2864,2209],{}," test shows this), and ",[1096,2867,2868],{},"equalsIgnoreCase","\ncompares the characters. ",[1096,2871,2872],{},"trim()"," does not change ",[1096,2875,2876],{},"entry"," because ",[1096,2879,1113],{}," is immutable, so its\nresult has to be kept (",[1096,2882,2883],{},"cleaned","); calling ",[1096,2886,2887],{},"entry.trim();"," alone does nothing. And calling a method\non a ",[1096,2890,1318],{}," entry throws ",[1096,2893,1312],{},", so the ",[1096,2896,1318],{}," check has to come first.",[1693,2899,1695],{},{"title":1129,"searchDepth":1142,"depth":1142,"links":2901},[2902,2903,2904],{"id":2091,"depth":1142,"text":2092},{"id":2263,"depth":1142,"text":2264},{"id":2510,"depth":1142,"text":2511},{"outlineRef":1709,"pairsWith":2078,"status":2906},"new — authored exercises (Multiple Choice + Micro-Parsons + Coding)",{"title":940,"description":1129},"4gl0Vum55BtXbGWOaTvkm63bV7PkjH2Y_f6zWxcJU4g",1792718166072]