[{"data":1,"prerenderedAt":2021},["ShallowReactive",2],{"item-lessons-light-ch07-the-class-blueprint":3,"item-examples-light-ch07-the-class-blueprint":436,"item-exercises-light-ch07-the-class-blueprint":597,"item-lesson-full-ch07-the-class-blueprint-7.1":758,"item-example-full-ch07-the-class-blueprint-7.1":1174,"item-exercise-full-ch07-the-class-blueprint-7.1":1584},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392,396,400,404,408,412,416,420,424,428,432],{"path":5,"title":6,"stem":7},"\u002Fshockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1-why-java-for-frc","Why Java for FRC?","shockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1.1-why-java-for-frc",{"path":9,"title":10,"stem":11},"\u002Fshockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming & Compilers","shockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":13,"title":14,"stem":15},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F1-variables-and-data-types","Variables & Data Types","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.1-variables-and-data-types",{"path":17,"title":18,"stem":19},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2-expressions-and-output","Expressions & Output","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.2-expressions-and-output",{"path":21,"title":22,"stem":23},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F3-assignment-and-input","Assignment & Input","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.3-assignment-and-input",{"path":25,"title":26,"stem":27},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F4-casting-and-ranges-of-values","Casting & Ranges of Values","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.4-casting-and-ranges-of-values",{"path":29,"title":30,"stem":31},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F5-compound-assignment-operators","Compound Assignment Operators","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.5-compound-assignment-operators",{"path":33,"title":34,"stem":35},"\u002Fshockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F1-apis-and-libraries","APIs and Libraries","shockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3.1-apis-and-libraries",{"path":37,"title":38,"stem":39},"\u002Fshockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F2-documentation-with-comments-and-preconditions","Documentation with Comments and Preconditions","shockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3.2-documentation-with-comments-and-preconditions",{"path":41,"title":42,"stem":43},"\u002Fshockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3-packages-and-imports","Packages & Imports","shockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3.3-packages-and-imports",{"path":45,"title":46,"stem":47},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F1-methods-signatures-and-parameters","Methods, Signatures & Parameters","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters",{"path":49,"title":50,"stem":51},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F2-calling-class-methods","Calling Class Methods","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.2-calling-class-methods",{"path":53,"title":54,"stem":55},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F3-using-the-math-class","Using the Math Class","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.3-using-the-math-class",{"path":57,"title":58,"stem":59},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4-objects-instances-of-classes","Objects — Instances of Classes","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.4-objects-instances-of-classes",{"path":61,"title":62,"stem":63},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F5-creating-and-initializing-objects-constructors","Creating & Initializing Objects: Constructors","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.5-creating-and-initializing-objects-constructors",{"path":65,"title":66,"stem":67},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F6-calling-instance-methods","Calling Instance Methods","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.6-calling-instance-methods",{"path":69,"title":70,"stem":71},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F1-5.2-if-statements-and-for-loops","Control Structures: if Statements & For Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.1-5.2-if-statements-and-for-loops",{"path":73,"title":74,"stem":75},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":77,"title":78,"stem":79},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F11-informal-runtime-analysis-of-loops","Informal Runtime Analysis of Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.11-informal-runtime-analysis-of-loops",{"path":81,"title":82,"stem":83},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F3-algorithms-with-selection-and-repetition","Algorithms with Selection and Repetition","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.3-algorithms-with-selection-and-repetition",{"path":85,"title":86,"stem":87},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":89,"title":90,"stem":91},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5-nested-if-statements","Nested if Statements","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.5-nested-if-statements",{"path":93,"title":94,"stem":95},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F6-compound-boolean-expressions","Compound Boolean Expressions","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.6-compound-boolean-expressions",{"path":97,"title":98,"stem":99},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F7-comparing-boolean-expressions-de-morgans-laws","Comparing Boolean Expressions (De Morgan's Laws)","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.7-comparing-boolean-expressions-de-morgans-laws",{"path":101,"title":102,"stem":103},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F8-while-loops","While Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.8-while-loops",{"path":105,"title":106,"stem":107},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F9-implementing-selection-and-iteration-algorithms","Implementing Selection and Iteration Algorithms","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.9-implementing-selection-and-iteration-algorithms",{"path":109,"title":110,"stem":111},"\u002Fshockwave-curriculum\u002Flessons\u002Fch06-strings\u002F1-strings","Strings","shockwave-curriculum\u002Flessons\u002Fch06-strings\u002F6.1-strings",{"path":113,"title":114,"stem":115},"\u002Fshockwave-curriculum\u002Flessons\u002Fch06-strings\u002F2-string-algorithms","String Algorithms","shockwave-curriculum\u002Flessons\u002Fch06-strings\u002F6.2-string-algorithms",{"path":117,"title":118,"stem":119},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F1-anatomy-of-a-java-class","The Class Blueprint","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class",{"path":121,"title":122,"stem":123},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F2-methods-how-to-write-them","Methods: How to Write Them","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them",{"path":125,"title":126,"stem":127},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F3-methods-passing-and-returning-references-of-an-object","Methods: Passing & Returning References of an Object","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.3-methods-passing-and-returning-references-of-an-object",{"path":129,"title":130,"stem":131},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F4-class-static-variables-and-methods","Class (static) Variables & Methods","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods",{"path":133,"title":134,"stem":135},"\u002Fshockwave-curriculum\u002Flessons\u002Fch08-constructors-and-this\u002F1-8.2-constructors-and-this","Constructors & \"this\"","shockwave-curriculum\u002Flessons\u002Fch08-constructors-and-this\u002F8.1-8.2-constructors-and-this",{"path":137,"title":138,"stem":139},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F1-array-creation-and-access","Array Creation and Access","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.1-array-creation-and-access",{"path":141,"title":142,"stem":143},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F2-arraylist-and-its-methods","ArrayList and its Methods","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.2-arraylist-and-its-methods",{"path":145,"title":146,"stem":147},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","Optional: HashMap (Dictionary) Data Structure","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":149,"title":150,"stem":151},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":153,"title":154,"stem":155},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F5-implementing-array-algorithms","Implementing Array Algorithms","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.5-implementing-array-algorithms",{"path":157,"title":158,"stem":159},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":161,"title":162,"stem":163},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F7-implementing-arraylist-algorithms","Implementing ArrayList Algorithms","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms",{"path":165,"title":166,"stem":167},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F8-using-text-files","Using Text Files","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.8-using-text-files",{"path":169,"title":170,"stem":171},"\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F1-2d-array-creation-and-access","2D Array Creation and Access","shockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.1-2d-array-creation-and-access",{"path":173,"title":174,"stem":175},"\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F2-2d-array-traversals-nested-loops","2D Array Traversals: Nested Loops","shockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops",{"path":177,"title":178,"stem":179},"\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F3-implementing-2d-array-algorithms","Implementing 2D Array Algorithms","shockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms",{"path":181,"title":182,"stem":183},"\u002Fshockwave-curriculum\u002Flessons\u002Fch11-enums-named-choices\u002F11-enums-named-choices","Enums: Named Choices","shockwave-curriculum\u002Flessons\u002Fch11-enums-named-choices\u002F11-enums-named-choices",{"path":185,"title":186,"stem":187},"\u002Fshockwave-curriculum\u002Flessons\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch","Exceptions & try\u002Fcatch","shockwave-curriculum\u002Flessons\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch",{"path":189,"title":190,"stem":191},"\u002Fshockwave-curriculum\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas","Common Gotchas","shockwave-curriculum\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas",{"path":193,"title":194,"stem":195},"\u002Fshockwave-curriculum\u002Flessons\u002Fch14-why-design-patterns\u002F14-why-design-patterns","Why Design Patterns?","shockwave-curriculum\u002Flessons\u002Fch14-why-design-patterns\u002F14-why-design-patterns",{"path":197,"title":198,"stem":199},"\u002Fshockwave-curriculum\u002Flessons\u002Fch15-advanced-collections\u002F15-advanced-collections","Advanced Collections (Set\u002FQueue\u002FMap)","shockwave-curriculum\u002Flessons\u002Fch15-advanced-collections\u002F15-advanced-collections",{"path":201,"title":202,"stem":203},"\u002Fshockwave-curriculum\u002Flessons\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics","Writing Your Own Generics","shockwave-curriculum\u002Flessons\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics",{"path":205,"title":206,"stem":207},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F1-inheritance-superclass-subclass","Inheritance, Superclass, Subclass","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.1-inheritance-superclass-subclass",{"path":209,"title":210,"stem":211},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F2-inheritance-and-constructors","Inheritance and Constructors","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.2-inheritance-and-constructors",{"path":213,"title":214,"stem":215},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F3-inheritance-hierarchies","Inheritance Hierarchies","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.3-inheritance-hierarchies",{"path":217,"title":218,"stem":219},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F4-object-superclass","Object Superclass","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.4-object-superclass",{"path":221,"title":222,"stem":223},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F1-overriding-methods","Overriding Methods","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.1-overriding-methods",{"path":225,"title":226,"stem":227},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F2-super-keyword","super Keyword","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.2-super-keyword",{"path":229,"title":230,"stem":231},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F3-polymorphism","Polymorphism","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.3-polymorphism",{"path":233,"title":234,"stem":235},"\u002Fshockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts","Interfaces as Contracts","shockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts",{"path":237,"title":238,"stem":239},"\u002Fshockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F1-lambdas-and-method-references","Lambdas & Method References","shockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F19.1-lambdas-and-method-references",{"path":241,"title":242,"stem":243},"\u002Fshockwave-curriculum\u002Flessons\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern","The IO-Layer Pattern","shockwave-curriculum\u002Flessons\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern",{"path":245,"title":246,"stem":247},"\u002Fshockwave-curriculum\u002Flessons\u002Fch21-static-factories\u002F21-static-factories","Static Factories","shockwave-curriculum\u002Flessons\u002Fch21-static-factories\u002F21-static-factories",{"path":249,"title":250,"stem":251},"\u002Fshockwave-curriculum\u002Flessons\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern","The Builder Pattern","shockwave-curriculum\u002Flessons\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern",{"path":253,"title":254,"stem":255},"\u002Fshockwave-curriculum\u002Flessons\u002Fch23-encapsulation-and-final\u002F1-scope-and-access","Scope and Access","shockwave-curriculum\u002Flessons\u002Fch23-encapsulation-and-final\u002F23.1-scope-and-access",{"path":257,"title":258,"stem":259},"\u002Fshockwave-curriculum\u002Flessons\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions","Optional: Avoiding Null Pointer Exceptions","shockwave-curriculum\u002Flessons\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions",{"path":261,"title":262,"stem":263},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F1-what-is-command-based-programming","What Is Command-Based Programming?","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.1-what-is-command-based-programming",{"path":265,"title":266,"stem":267},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F2-commands-and-command-compositions","Commands & Command Compositions","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.2-commands-and-command-compositions",{"path":269,"title":270,"stem":271},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F3-the-command-scheduler","The Command Scheduler","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.3-the-command-scheduler",{"path":273,"title":274,"stem":275},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F4-state-machines-logic","State Machines: Logic","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.4-state-machines-logic",{"path":277,"title":278,"stem":279},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F5-managing-transitions","Managing Transitions","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.5-managing-transitions",{"path":281,"title":282,"stem":283},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F6-binding-commands-to-triggers","Binding Commands to Triggers","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.6-binding-commands-to-triggers",{"path":285,"title":286,"stem":287},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F7-structuring-a-command-based-robot-project","Structuring a Command-Based Robot Project","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.7-structuring-a-command-based-robot-project",{"path":289,"title":290,"stem":291},"\u002Fshockwave-curriculum\u002Flessons\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways","Architecture Takeaways","shockwave-curriculum\u002Flessons\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways",{"path":293,"title":294,"stem":295},"\u002Fshockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F1-abstraction-and-program-design","Abstraction and Program Design","shockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F27.1-abstraction-and-program-design",{"path":297,"title":298,"stem":299},"\u002Fshockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F2-impact-of-program-design","Impact of Program Design","shockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F27.2-impact-of-program-design",{"path":301,"title":302,"stem":303},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F1-searching-algorithms","Searching Algorithms","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.1-searching-algorithms",{"path":305,"title":306,"stem":307},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F2-sorting-algorithms","Sorting Algorithms","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.2-sorting-algorithms",{"path":309,"title":310,"stem":311},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F3-recursion","Recursion","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.3-recursion",{"path":313,"title":314,"stem":315},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F4-recursive-searching-and-sorting","Recursive Searching and Sorting","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.4-recursive-searching-and-sorting",{"path":317,"title":318,"stem":319},"\u002Fshockwave-curriculum\u002Flessons\u002Fch29-git-and-github-basics\u002F1-coming-soon","Git & GitHub Basics — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch29-git-and-github-basics\u002F29.1-coming-soon",{"path":321,"title":322,"stem":323},"\u002Fshockwave-curriculum\u002Flessons\u002Fch30-git-history-and-merging\u002F1-coming-soon","Git — History & Merging — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch30-git-history-and-merging\u002F30.1-coming-soon",{"path":325,"title":326,"stem":327},"\u002Fshockwave-curriculum\u002Flessons\u002Fch31-dev-environment-and-tooling\u002F1-coming-soon","Dev Environment & Tooling — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch31-dev-environment-and-tooling\u002F31.1-coming-soon",{"path":329,"title":330,"stem":331},"\u002Fshockwave-curriculum\u002Flessons\u002Fch32-unit-testing\u002F1-coming-soon","Unit Testing — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch32-unit-testing\u002F32.1-coming-soon",{"path":333,"title":334,"stem":335},"\u002Fshockwave-curriculum\u002Flessons\u002Fch33-advantagekit-autologging\u002F1-coming-soon","AdvantageKit — AutoLogging — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch33-advantagekit-autologging\u002F33.1-coming-soon",{"path":337,"title":338,"stem":339},"\u002Fshockwave-curriculum\u002Flessons\u002Fch34-log-replay\u002F1-coming-soon","Log Replay — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch34-log-replay\u002F34.1-coming-soon",{"path":341,"title":342,"stem":343},"\u002Fshockwave-curriculum\u002Flessons\u002Fch35-advantagescope-i-visualization\u002F1-coming-soon","AdvantageScope I: Visualization — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch35-advantagescope-i-visualization\u002F35.1-coming-soon",{"path":345,"title":346,"stem":347},"\u002Fshockwave-curriculum\u002Flessons\u002Fch36-advantagescope-ii-custom-3d-assets\u002F1-coming-soon","AdvantageScope II: Custom 3D Assets — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch36-advantagescope-ii-custom-3d-assets\u002F36.1-coming-soon",{"path":349,"title":350,"stem":351},"\u002Fshockwave-curriculum\u002Flessons\u002Fch37-autonomous-i\u002F1-coming-soon","Autonomous I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch37-autonomous-i\u002F37.1-coming-soon",{"path":353,"title":354,"stem":355},"\u002Fshockwave-curriculum\u002Flessons\u002Fch38-autonomous-ii-pathplanner-and-trajectories\u002F1-coming-soon","Autonomous II: PathPlanner & Trajectories — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch38-autonomous-ii-pathplanner-and-trajectories\u002F38.1-coming-soon",{"path":357,"title":358,"stem":359},"\u002Fshockwave-curriculum\u002Flessons\u002Fch39-control-fundamentals\u002F1-coming-soon","Control Fundamentals — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch39-control-fundamentals\u002F39.1-coming-soon",{"path":361,"title":362,"stem":363},"\u002Fshockwave-curriculum\u002Flessons\u002Fch40-motion-profiles\u002F1-coming-soon","Motion Profiles — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch40-motion-profiles\u002F40.1-coming-soon",{"path":365,"title":366,"stem":367},"\u002Fshockwave-curriculum\u002Flessons\u002Fch41-hardware-fundamentals\u002F1-coming-soon","Hardware Fundamentals — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch41-hardware-fundamentals\u002F41.1-coming-soon",{"path":369,"title":370,"stem":371},"\u002Fshockwave-curriculum\u002Flessons\u002Fch42-photonvision\u002F1-coming-soon","PhotonVision — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch42-photonvision\u002F42.1-coming-soon",{"path":373,"title":374,"stem":375},"\u002Fshockwave-curriculum\u002Flessons\u002Fch43-apriltags-and-pose\u002F1-coming-soon","AprilTags & Pose — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch43-apriltags-and-pose\u002F43.1-coming-soon",{"path":377,"title":378,"stem":379},"\u002Fshockwave-curriculum\u002Flessons\u002Fch44-subsystems-i\u002F1-coming-soon","Subsystems I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch44-subsystems-i\u002F44.1-coming-soon",{"path":381,"title":382,"stem":383},"\u002Fshockwave-curriculum\u002Flessons\u002Fch45-subsystems-ii-advanced\u002F1-coming-soon","Subsystems II — Advanced — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch45-subsystems-ii-advanced\u002F45.1-coming-soon",{"path":385,"title":386,"stem":387},"\u002Fshockwave-curriculum\u002Flessons\u002Fch46-team-utilities-i\u002F1-coming-soon","Team Utilities I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch46-team-utilities-i\u002F46.1-coming-soon",{"path":389,"title":390,"stem":391},"\u002Fshockwave-curriculum\u002Flessons\u002Fch47-field-constants\u002F1-coming-soon","Field Constants — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch47-field-constants\u002F47.1-coming-soon",{"path":393,"title":394,"stem":395},"\u002Fshockwave-curriculum\u002Flessons\u002Fch48-troubleshooting-i-runtime-debug\u002F1-coming-soon","Troubleshooting I — Runtime Debug — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch48-troubleshooting-i-runtime-debug\u002F48.1-coming-soon",{"path":397,"title":398,"stem":399},"\u002Fshockwave-curriculum\u002Flessons\u002Fch49-troubleshooting-ii-can-and-sim\u002F1-coming-soon","Troubleshooting II: CAN & Sim — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch49-troubleshooting-ii-can-and-sim\u002F49.1-coming-soon",{"path":401,"title":402,"stem":403},"\u002Fshockwave-curriculum\u002Flessons\u002Fch50-vendor-libraries-talonfx\u002F1-coming-soon","Vendor Libraries: TalonFX — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch50-vendor-libraries-talonfx\u002F50.1-coming-soon",{"path":405,"title":406,"stem":407},"\u002Fshockwave-curriculum\u002Flessons\u002Fch51-robot-alerts\u002F1-coming-soon","Robot Alerts — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch51-robot-alerts\u002F51.1-coming-soon",{"path":409,"title":410,"stem":411},"\u002Fshockwave-curriculum\u002Flessons\u002Fch52-wpilib-commands\u002F1-coming-soon","WPILib Commands — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch52-wpilib-commands\u002F52.1-coming-soon",{"path":413,"title":414,"stem":415},"\u002Fshockwave-curriculum\u002Flessons\u002Fch53-wpilib-geometry\u002F1-coming-soon","WPILib Geometry — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch53-wpilib-geometry\u002F53.1-coming-soon",{"path":417,"title":418,"stem":419},"\u002Fshockwave-curriculum\u002Flessons\u002Fch54-networktables\u002F1-coming-soon","NetworkTables — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch54-networktables\u002F54.1-coming-soon",{"path":421,"title":422,"stem":423},"\u002Fshockwave-curriculum\u002Flessons\u002Fch55-command-scheduler\u002F1-coming-soon","Command Scheduler — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch55-command-scheduler\u002F55.1-coming-soon",{"path":425,"title":426,"stem":427},"\u002Fshockwave-curriculum\u002Flessons\u002Fch56-wpilib-timers\u002F1-coming-soon","WPILib Timers — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch56-wpilib-timers\u002F56.1-coming-soon",{"path":429,"title":430,"stem":431},"\u002Fshockwave-curriculum\u002Flessons\u002Fch57-wpilib-triggers\u002F1-coming-soon","WPILib Triggers — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch57-wpilib-triggers\u002F57.1-coming-soon",{"path":433,"title":434,"stem":435},"\u002Fshockwave-curriculum\u002Flessons\u002Fch58-vendor-units-and-conversions\u002F1-coming-soon","Vendor Units & Conversions — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch58-vendor-units-and-conversions\u002F58.1-coming-soon",[437,441,445,449,453,457,461,465,469,473,477,481,485,489,493,497,501,505,509,513,517,521,525,529,533,537,541,545,549,553,557,561,565,569,573,577,581,585,589,593],{"path":438,"title":439,"stem":440},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming & Compilers — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":442,"title":443,"stem":444},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F1-variables-and-data-types","Variables & Data Types — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.1-variables-and-data-types",{"path":446,"title":447,"stem":448},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2-expressions-and-output","Expressions & Output — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.2-expressions-and-output",{"path":450,"title":451,"stem":452},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F3-assignment-and-input","Assignment & Input — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.3-assignment-and-input",{"path":454,"title":455,"stem":456},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F4-casting-and-ranges-of-values","Casting & Ranges of Values — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.4-casting-and-ranges-of-values",{"path":458,"title":459,"stem":460},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F5-compound-assignment-operators","Compound Assignment Operators — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.5-compound-assignment-operators",{"path":462,"title":463,"stem":464},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F1-apis-and-libraries","APIs and Libraries — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3.1-apis-and-libraries",{"path":466,"title":467,"stem":468},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F2-documentation-with-comments-and-preconditions","Documentation with Comments and Preconditions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3.2-documentation-with-comments-and-preconditions",{"path":470,"title":471,"stem":472},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3-packages-and-imports","Packages & Imports — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3.3-packages-and-imports",{"path":474,"title":475,"stem":476},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F1-methods-signatures-and-parameters","Methods, Signatures & Parameters — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters",{"path":478,"title":479,"stem":480},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F2-calling-class-methods","Calling Class Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.2-calling-class-methods",{"path":482,"title":483,"stem":484},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F3-using-the-math-class","Using the Math Class — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.3-using-the-math-class",{"path":486,"title":487,"stem":488},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4-objects-instances-of-classes","Objects — Instances of Classes — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.4-objects-instances-of-classes",{"path":490,"title":491,"stem":492},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F5-creating-and-initializing-objects-constructors","Creating & Initializing Objects: Constructors — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.5-creating-and-initializing-objects-constructors",{"path":494,"title":495,"stem":496},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F6-calling-instance-methods","Calling Instance Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.6-calling-instance-methods",{"path":498,"title":499,"stem":500},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F1-5.2-if-statements-and-for-loops","if Statements & For Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.1-5.2-if-statements-and-for-loops",{"path":502,"title":503,"stem":504},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":506,"title":507,"stem":508},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F11-informal-runtime-analysis-of-loops","Informal Runtime Analysis of Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.11-informal-runtime-analysis-of-loops",{"path":510,"title":511,"stem":512},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F3-algorithms-with-selection-and-repetition","Algorithms with Selection and Repetition — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.3-algorithms-with-selection-and-repetition",{"path":514,"title":515,"stem":516},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":518,"title":519,"stem":520},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5-nested-if-statements","Nested if Statements — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.5-nested-if-statements",{"path":522,"title":523,"stem":524},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F6-compound-boolean-expressions","Compound Boolean Expressions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.6-compound-boolean-expressions",{"path":526,"title":527,"stem":528},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F7-comparing-boolean-expressions-de-morgans-laws","Comparing Boolean Expressions (De Morgan's Laws) — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.7-comparing-boolean-expressions-de-morgans-laws",{"path":530,"title":531,"stem":532},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F8-while-loops","While Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.8-while-loops",{"path":534,"title":535,"stem":536},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F9-implementing-selection-and-iteration-algorithms","Implementing Selection and Iteration Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.9-implementing-selection-and-iteration-algorithms",{"path":538,"title":539,"stem":540},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F1-strings","Strings — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F6.1-strings",{"path":542,"title":543,"stem":544},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F2-string-algorithms","String Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F6.2-string-algorithms",{"path":546,"title":547,"stem":548},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F1-anatomy-of-a-java-class","Anatomy of a Java Class — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class",{"path":550,"title":551,"stem":552},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F2-methods-how-to-write-them","Methods: How to Write Them — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them",{"path":554,"title":555,"stem":556},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F3-methods-passing-and-returning-references-of-an-object","Methods: Passing & Returning References of an Object — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.3-methods-passing-and-returning-references-of-an-object",{"path":558,"title":559,"stem":560},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F4-class-static-variables-and-methods","Class (static) Variables & Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods",{"path":562,"title":563,"stem":564},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch08-constructors-and-this\u002F1-8.2-constructors-and-this","Constructors & \"this\" — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch08-constructors-and-this\u002F8.1-8.2-constructors-and-this",{"path":566,"title":567,"stem":568},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F1-array-creation-and-access","Array Creation and Access — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.1-array-creation-and-access",{"path":570,"title":571,"stem":572},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F2-arraylist-and-its-methods","ArrayList and its Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.2-arraylist-and-its-methods",{"path":574,"title":575,"stem":576},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","Optional: HashMap (Dictionary) Data Structure — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":578,"title":579,"stem":580},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":582,"title":583,"stem":584},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F5-implementing-array-algorithms","Implementing Array Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.5-implementing-array-algorithms",{"path":586,"title":587,"stem":588},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":590,"title":591,"stem":592},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F7-implementing-arraylist-algorithms","Implementing ArrayList Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms",{"path":594,"title":595,"stem":596},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F8-using-text-files","Using Text Files — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.8-using-text-files",[598,602,606,610,614,618,622,626,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738,742,746,750,754],{"path":599,"title":600,"stem":601},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming & Compilers — Exercises","shockwave-curriculum\u002Fexercises\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":603,"title":604,"stem":605},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F1-variables-and-data-types","Variables & Data Types — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.1-variables-and-data-types",{"path":607,"title":608,"stem":609},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2-expressions-and-output","Expressions & Output — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.2-expressions-and-output",{"path":611,"title":612,"stem":613},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F3-assignment-and-input","Assignment & Input — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.3-assignment-and-input",{"path":615,"title":616,"stem":617},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F4-casting-and-ranges-of-values","Casting & Ranges of Values — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.4-casting-and-ranges-of-values",{"path":619,"title":620,"stem":621},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F5-compound-assignment-operators","Compound Assignment Operators — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.5-compound-assignment-operators",{"path":623,"title":624,"stem":625},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F1-apis-and-libraries","APIs and Libraries — Exercises","shockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3.1-apis-and-libraries",{"path":627,"title":628,"stem":629},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F2-documentation-with-comments-and-preconditions","Documentation with Comments and Preconditions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3.2-documentation-with-comments-and-preconditions",{"path":631,"title":632,"stem":633},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3-packages-and-imports","Packages & Imports — Exercises","shockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3.3-packages-and-imports",{"path":635,"title":636,"stem":637},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F1-methods-signatures-and-parameters","Methods, Signatures & Parameters — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters",{"path":639,"title":640,"stem":641},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F2-calling-class-methods","Calling Class Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.2-calling-class-methods",{"path":643,"title":644,"stem":645},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F3-using-the-math-class","Using the Math Class — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.3-using-the-math-class",{"path":647,"title":648,"stem":649},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4-objects-instances-of-classes","Objects — Instances of Classes — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.4-objects-instances-of-classes",{"path":651,"title":652,"stem":653},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F5-creating-and-initializing-objects-constructors","Creating & Initializing Objects: Constructors — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.5-creating-and-initializing-objects-constructors",{"path":655,"title":656,"stem":657},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F6-calling-instance-methods","Calling Instance Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.6-calling-instance-methods",{"path":659,"title":660,"stem":661},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F1-5.2-if-statements-and-for-loops","if Statements & For Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.1-5.2-if-statements-and-for-loops",{"path":663,"title":664,"stem":665},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":667,"title":668,"stem":669},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F11-informal-runtime-analysis-of-loops","Informal Runtime Analysis of Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.11-informal-runtime-analysis-of-loops",{"path":671,"title":672,"stem":673},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F3-algorithms-with-selection-and-repetition","Algorithms with Selection and Repetition — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.3-algorithms-with-selection-and-repetition",{"path":675,"title":676,"stem":677},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":679,"title":680,"stem":681},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5-nested-if-statements","Nested if Statements — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.5-nested-if-statements",{"path":683,"title":684,"stem":685},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F6-compound-boolean-expressions","Compound Boolean Expressions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.6-compound-boolean-expressions",{"path":687,"title":688,"stem":689},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F7-comparing-boolean-expressions-de-morgans-laws","Comparing Boolean Expressions (De Morgan's Laws) — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.7-comparing-boolean-expressions-de-morgans-laws",{"path":691,"title":692,"stem":693},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F8-while-loops","While Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.8-while-loops",{"path":695,"title":696,"stem":697},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F9-implementing-selection-and-iteration-algorithms","Implementing Selection and Iteration Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.9-implementing-selection-and-iteration-algorithms",{"path":699,"title":700,"stem":701},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F1-strings","Strings — Exercises","shockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F6.1-strings",{"path":703,"title":704,"stem":705},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F2-string-algorithms","String Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F6.2-string-algorithms",{"path":707,"title":708,"stem":709},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F1-anatomy-of-a-java-class","Anatomy of a Java Class — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class",{"path":711,"title":712,"stem":713},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F2-methods-how-to-write-them","Methods: How to Write Them — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them",{"path":715,"title":716,"stem":717},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F3-methods-passing-and-returning-references-of-an-object","Methods: Passing & Returning References of an Object — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.3-methods-passing-and-returning-references-of-an-object",{"path":719,"title":720,"stem":721},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F4-class-static-variables-and-methods","Class (static) Variables & Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods",{"path":723,"title":724,"stem":725},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch08-constructors-and-this\u002F1-8.2-constructors-and-this","Constructors & \"this\" — Exercises","shockwave-curriculum\u002Fexercises\u002Fch08-constructors-and-this\u002F8.1-8.2-constructors-and-this",{"path":727,"title":728,"stem":729},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F1-array-creation-and-access","Array Creation and Access — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.1-array-creation-and-access",{"path":731,"title":732,"stem":733},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F2-arraylist-and-its-methods","ArrayList and its Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.2-arraylist-and-its-methods",{"path":735,"title":736,"stem":737},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","Optional: HashMap (Dictionary) Data Structure — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":739,"title":740,"stem":741},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":743,"title":744,"stem":745},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F5-implementing-array-algorithms","Implementing Array Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.5-implementing-array-algorithms",{"path":747,"title":748,"stem":749},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":751,"title":752,"stem":753},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F7-implementing-arraylist-algorithms","Implementing ArrayList Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms",{"path":755,"title":756,"stem":757},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F8-using-text-files","Using Text Files — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.8-using-text-files",{"id":759,"title":118,"body":760,"description":782,"extension":1168,"meta":1169,"navigation":811,"path":117,"seo":1172,"stem":119,"__hash__":1173},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class.md",{"type":761,"value":762,"toc":1159},"minimark",[763,767,772,776,836,870,874,880,912,919,934,964,986,990,1092,1099,1103,1120,1124,1144,1155],[764,765,118],"h1",{"id":766},"the-class-blueprint",[768,769,771],"h2",{"id":770},"the-three-anatomical-parts","The Three Anatomical Parts",[773,774,775],"p",{},"Every class you write has the same three main parts, in this order:",[777,778,783],"pre",{"className":779,"code":780,"language":781,"meta":782,"style":782},"language-java shiki shiki-themes github-light github-dark","public class Intake\n{\n    \u002F\u002F 1. instance variables — the data each object owns\n\n    \u002F\u002F 2. constructors — initialize the instance variables\n\n    \u002F\u002F 3. methods — the behaviors\n}\n","java","",[784,785,786,794,800,806,813,819,824,830],"code",{"__ignoreMap":782},[787,788,791],"span",{"class":789,"line":790},"line",1,[787,792,793],{},"public class Intake\n",[787,795,797],{"class":789,"line":796},2,[787,798,799],{},"{\n",[787,801,803],{"class":789,"line":802},3,[787,804,805],{},"    \u002F\u002F 1. instance variables — the data each object owns\n",[787,807,809],{"class":789,"line":808},4,[787,810,812],{"emptyLinePlaceholder":811},true,"\n",[787,814,816],{"class":789,"line":815},5,[787,817,818],{},"    \u002F\u002F 2. constructors — initialize the instance variables\n",[787,820,822],{"class":789,"line":821},6,[787,823,812],{"emptyLinePlaceholder":811},[787,825,827],{"class":789,"line":826},7,[787,828,829],{},"    \u002F\u002F 3. methods — the behaviors\n",[787,831,833],{"class":789,"line":832},8,[787,834,835],{},"}\n",[837,838,839,855,864],"ul",{},[840,841,842,846,847,850,851,854],"li",{},[843,844,845],"strong",{},"Instance variables"," hold the data — each object gets its own separate copy. Two ",[784,848,849],{},"Intake"," objects can each have their own ",[784,852,853],{},"currentSpeed",".",[840,856,857,860,861,854],{},[843,858,859],{},"Constructors"," initialize those instance variables when an object is built with ",[784,862,863],{},"new",[840,865,866,869],{},[843,867,868],{},"Methods"," define what the object can do, and can read\u002Fchange its instance variables.",[768,871,873],{"id":872},"designing-a-class-what-data-does-it-represent","Designing a Class: What Data Does It Represent?",[773,875,876,877,879],{},"Before writing any code, ask: what does this thing need to know about itself? For an ",[784,878,849],{}," subsystem: is it currently deployed? What's its current motor speed? Does it have a sensor reading a game piece?",[777,881,883],{"className":779,"code":882,"language":781,"meta":782,"style":782},"public class Intake\n{\n    private boolean isDeployed;\n    private double currentSpeed;\n    private boolean hasGamePiece;\n}\n",[784,884,885,889,893,898,903,908],{"__ignoreMap":782},[787,886,887],{"class":789,"line":790},[787,888,793],{},[787,890,891],{"class":789,"line":796},[787,892,799],{},[787,894,895],{"class":789,"line":802},[787,896,897],{},"    private boolean isDeployed;\n",[787,899,900],{"class":789,"line":808},[787,901,902],{},"    private double currentSpeed;\n",[787,904,905],{"class":789,"line":815},[787,906,907],{},"    private boolean hasGamePiece;\n",[787,909,910],{"class":789,"line":821},[787,911,835],{},[768,913,915,916],{"id":914},"encapsulation-why-instance-variables-are-private","Encapsulation: Why Instance Variables Are ",[784,917,918],{},"private",[773,920,921,924,925,927,928,930,931,933],{},[784,922,923],{},"public"," and ",[784,926,918],{}," control who can access something. ",[784,929,923],{}," means any other class can reach it; ",[784,932,918],{}," restricts access to code inside that same class only.",[773,935,936,937,939,940,943,944,946,947,949,950,952,953,955,956,960,961,963],{},"Instance variables should almost always be ",[784,938,918],{}," — this is ",[843,941,942],{},"encapsulation",": the class's internal data is hidden, and other code can only interact with it through the methods the class chooses to expose. This matters in practice: if ",[784,945,853],{}," were ",[784,948,923],{},", any other subsystem could set it directly, bypassing whatever safety logic the ",[784,951,849],{}," class's own methods enforce (a ramp limit, a max-speed clamp). Keeping it ",[784,954,918],{}," means the ",[957,958,959],"em",{},"only"," way to change it is through ",[784,962,849],{},"'s own methods, which can enforce those rules every time.",[777,965,967],{"className":779,"code":966,"language":781,"meta":782,"style":782},"public class Intake\n{\n    private double currentSpeed; \u002F\u002F only Intake's own code can touch this directly\n}\n",[784,968,969,973,977,982],{"__ignoreMap":782},[787,970,971],{"class":789,"line":790},[787,972,793],{},[787,974,975],{"class":789,"line":796},[787,976,799],{},[787,978,979],{"class":789,"line":802},[787,980,981],{},"    private double currentSpeed; \u002F\u002F only Intake's own code can touch this directly\n",[787,983,984],{"class":789,"line":808},[787,985,835],{},[768,987,989],{"id":988},"putting-it-together","Putting It Together",[777,991,993],{"className":779,"code":992,"language":781,"meta":782,"style":782},"public class Intake\n{\n    \u002F\u002F 1. instance variables\n    private boolean isDeployed;\n    private double currentSpeed;\n\n    \u002F\u002F 2. constructor\n    public Intake()\n    {\n        isDeployed = false;\n        currentSpeed = 0.0;\n    }\n\n    \u002F\u002F 3. methods\n    public void deploy()\n    {\n        isDeployed = true;\n    }\n}\n",[784,994,995,999,1003,1008,1012,1016,1020,1025,1030,1036,1042,1048,1054,1059,1065,1071,1076,1082,1087],{"__ignoreMap":782},[787,996,997],{"class":789,"line":790},[787,998,793],{},[787,1000,1001],{"class":789,"line":796},[787,1002,799],{},[787,1004,1005],{"class":789,"line":802},[787,1006,1007],{},"    \u002F\u002F 1. instance variables\n",[787,1009,1010],{"class":789,"line":808},[787,1011,897],{},[787,1013,1014],{"class":789,"line":815},[787,1015,902],{},[787,1017,1018],{"class":789,"line":821},[787,1019,812],{"emptyLinePlaceholder":811},[787,1021,1022],{"class":789,"line":826},[787,1023,1024],{},"    \u002F\u002F 2. constructor\n",[787,1026,1027],{"class":789,"line":832},[787,1028,1029],{},"    public Intake()\n",[787,1031,1033],{"class":789,"line":1032},9,[787,1034,1035],{},"    {\n",[787,1037,1039],{"class":789,"line":1038},10,[787,1040,1041],{},"        isDeployed = false;\n",[787,1043,1045],{"class":789,"line":1044},11,[787,1046,1047],{},"        currentSpeed = 0.0;\n",[787,1049,1051],{"class":789,"line":1050},12,[787,1052,1053],{},"    }\n",[787,1055,1057],{"class":789,"line":1056},13,[787,1058,812],{"emptyLinePlaceholder":811},[787,1060,1062],{"class":789,"line":1061},14,[787,1063,1064],{},"    \u002F\u002F 3. methods\n",[787,1066,1068],{"class":789,"line":1067},15,[787,1069,1070],{},"    public void deploy()\n",[787,1072,1074],{"class":789,"line":1073},16,[787,1075,1035],{},[787,1077,1079],{"class":789,"line":1078},17,[787,1080,1081],{},"        isDeployed = true;\n",[787,1083,1085],{"class":789,"line":1084},18,[787,1086,1053],{},[787,1088,1090],{"class":789,"line":1089},19,[787,1091,835],{},[773,1093,1094,1095,1098],{},"Any class can also have a ",[784,1096,1097],{},"main"," method — usually not for the class's normal job, but as a quick way to test that one class in isolation.",[768,1100,1102],{"id":1101},"common-pitfalls","Common Pitfalls",[837,1104,1105,1114],{},[840,1106,1107,1113],{},[843,1108,1109,1110,1112],{},"Making instance variables ",[784,1111,923],{}," \"to keep things simple.\""," This defeats encapsulation — any other class can then set them to anything, with none of the class's own safety logic enforced.",[840,1115,1116,1119],{},[843,1117,1118],{},"Skipping the design step."," Jumping straight to code without first asking \"what does this class need to know about itself\" tends to produce classes with the wrong data, discovered only after writing several methods around it.",[768,1121,1123],{"id":1122},"key-takeaways","Key Takeaways",[837,1125,1126,1129,1132,1141],{},[840,1127,1128],{},"Every class has the same three parts, in order: instance variables, constructors, methods.",[840,1130,1131],{},"Instance variables are per-object — each object gets its own independent copies.",[840,1133,1134,1135,1137,1138,1140],{},"Instance variables should be ",[784,1136,918],{},"; methods that are meant to be used by other classes are ",[784,1139,923],{},". This is encapsulation.",[840,1142,1143],{},"Design a class by first asking what data it needs to represent, before writing any code.",[773,1145,1146,1147,1150,1151,1154],{},"Derived from ",[784,1148,1149],{},"csawesome-2026",": ",[784,1152,1153],{},"unit-3-class-creation\u002F3.03-anatomy-of-a-java-class.md"," (CSA 3.3)",[1156,1157,1158],"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":782,"searchDepth":796,"depth":796,"links":1160},[1161,1162,1163,1165,1166,1167],{"id":770,"depth":796,"text":771},{"id":872,"depth":796,"text":873},{"id":914,"depth":796,"text":1164},"Encapsulation: Why Instance Variables Are private",{"id":988,"depth":796,"text":989},{"id":1101,"depth":796,"text":1102},{"id":1122,"depth":796,"text":1123},"md",{"outlineRef":1170,"status":1171},"7.1 — Anatomy of a Java Class (CSA 3.3)","new — authored lesson (fuller depth than the teaser slide)",{"title":118,"description":782},"5iJGKU_N4CNmaGw6KtRtS78fv7Bn25jCo9Lej63SPu4",{"id":1175,"title":547,"body":1176,"description":782,"extension":1168,"meta":1579,"navigation":811,"path":546,"seo":1582,"stem":548,"__hash__":1583},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class.md",{"type":761,"value":1177,"toc":1566},[1178,1181,1185,1192,1196,1199,1207,1210,1214,1217,1255,1261,1284,1311,1315,1324,1376,1380,1386,1456,1460,1486,1493,1524,1528,1564],[764,1179,547],{"id":1180},"anatomy-of-a-java-class-worked-example",[768,1182,1184],{"id":1183},"problem","Problem",[773,1186,1187,1188,1191],{},"Design and write a ",[784,1189,1190],{},"Turret"," class: it should track which way it's currently pointed and whether it's locked onto a target, and it should be able to start a search sweep (which gives up any lock it currently has).",[768,1193,1195],{"id":1194},"step-1-design-what-does-this-class-need-to-know-about-itself","Step 1: Design — What Does This Class Need to Know About Itself?",[773,1197,1198],{},"Before writing any code, ask what the thing needs to know about itself:",[837,1200,1201,1204],{},[840,1202,1203],{},"Which way is it pointed right now? → a heading, in degrees.",[840,1205,1206],{},"Is it currently locked onto a target? → yes\u002Fno.",[773,1208,1209],{},"That's the data. The search sweep is behavior, not data — it belongs in a method, not an instance variable.",[768,1211,1213],{"id":1212},"step-2-lay-out-the-three-parts","Step 2: Lay Out the Three Parts",[773,1215,1216],{},"Every class has the same three main parts, in this order: instance variables, constructors, methods. Start from the empty skeleton:",[777,1218,1220],{"className":779,"code":1219,"language":781,"meta":782,"style":782},"public class Turret\n{\n    \u002F\u002F 1. instance variables — the data each object owns\n\n    \u002F\u002F 2. constructors — initialize the instance variables\n\n    \u002F\u002F 3. methods — the behaviors\n}\n",[784,1221,1222,1227,1231,1235,1239,1243,1247,1251],{"__ignoreMap":782},[787,1223,1224],{"class":789,"line":790},[787,1225,1226],{},"public class Turret\n",[787,1228,1229],{"class":789,"line":796},[787,1230,799],{},[787,1232,1233],{"class":789,"line":802},[787,1234,805],{},[787,1236,1237],{"class":789,"line":808},[787,1238,812],{"emptyLinePlaceholder":811},[787,1240,1241],{"class":789,"line":815},[787,1242,818],{},[787,1244,1245],{"class":789,"line":821},[787,1246,812],{"emptyLinePlaceholder":811},[787,1248,1249],{"class":789,"line":826},[787,1250,829],{},[787,1252,1253],{"class":789,"line":832},[787,1254,835],{},[768,1256,1258,1259],{"id":1257},"step-3-add-the-instance-variables-private","Step 3: Add the Instance Variables, ",[784,1260,918],{},[773,1262,1263,1264,1266,1267,1269,1270,1272,1273,1276,1277,1279,1280,1283],{},"Two ",[784,1265,1190],{}," objects each need their own independent heading and lock state, so these are instance variables — one separate copy per object. They're ",[784,1268,918],{},": only ",[784,1271,1190],{},"'s own code should be able to set ",[784,1274,1275],{},"isLockedOnTarget"," directly, since \"locked on\" should only ever be the result of ",[784,1278,1190],{},"'s own targeting logic, not something any other class can just declare ",[784,1281,1282],{},"true"," from the outside.",[777,1285,1287],{"className":779,"code":1286,"language":781,"meta":782,"style":782},"public class Turret\n{\n    private double headingDegrees;\n    private boolean isLockedOnTarget;\n}\n",[784,1288,1289,1293,1297,1302,1307],{"__ignoreMap":782},[787,1290,1291],{"class":789,"line":790},[787,1292,1226],{},[787,1294,1295],{"class":789,"line":796},[787,1296,799],{},[787,1298,1299],{"class":789,"line":802},[787,1300,1301],{},"    private double headingDegrees;\n",[787,1303,1304],{"class":789,"line":808},[787,1305,1306],{},"    private boolean isLockedOnTarget;\n",[787,1308,1309],{"class":789,"line":815},[787,1310,835],{},[768,1312,1314],{"id":1313},"step-4-add-a-constructor","Step 4: Add a Constructor",[773,1316,1317,1318,1320,1321,1323],{},"The constructor initializes the instance variables when a ",[784,1319,1190],{}," is built with ",[784,1322,863],{},". A freshly built turret starts pointed at 0 degrees and not locked onto anything:",[777,1325,1327],{"className":779,"code":1326,"language":781,"meta":782,"style":782},"public class Turret\n{\n    private double headingDegrees;\n    private boolean isLockedOnTarget;\n\n    public Turret()\n    {\n        headingDegrees = 0.0;\n        isLockedOnTarget = false;\n    }\n}\n",[784,1328,1329,1333,1337,1341,1345,1349,1354,1358,1363,1368,1372],{"__ignoreMap":782},[787,1330,1331],{"class":789,"line":790},[787,1332,1226],{},[787,1334,1335],{"class":789,"line":796},[787,1336,799],{},[787,1338,1339],{"class":789,"line":802},[787,1340,1301],{},[787,1342,1343],{"class":789,"line":808},[787,1344,1306],{},[787,1346,1347],{"class":789,"line":815},[787,1348,812],{"emptyLinePlaceholder":811},[787,1350,1351],{"class":789,"line":821},[787,1352,1353],{},"    public Turret()\n",[787,1355,1356],{"class":789,"line":826},[787,1357,1035],{},[787,1359,1360],{"class":789,"line":832},[787,1361,1362],{},"        headingDegrees = 0.0;\n",[787,1364,1365],{"class":789,"line":1032},[787,1366,1367],{},"        isLockedOnTarget = false;\n",[787,1369,1370],{"class":789,"line":1038},[787,1371,1053],{},[787,1373,1374],{"class":789,"line":1044},[787,1375,835],{},[768,1377,1379],{"id":1378},"step-5-add-a-method","Step 5: Add a Method",[773,1381,1382,1385],{},[784,1383,1384],{},"startSearchSweep()"," is a behavior: it gives up whatever lock the turret currently has so it can start scanning again.",[777,1387,1389],{"className":779,"code":1388,"language":781,"meta":782,"style":782},"public class Turret\n{\n    private double headingDegrees;\n    private boolean isLockedOnTarget;\n\n    public Turret()\n    {\n        headingDegrees = 0.0;\n        isLockedOnTarget = false;\n    }\n\n    public void startSearchSweep()\n    {\n        isLockedOnTarget = false;\n    }\n}\n",[784,1390,1391,1395,1399,1403,1407,1411,1415,1419,1423,1427,1431,1435,1440,1444,1448,1452],{"__ignoreMap":782},[787,1392,1393],{"class":789,"line":790},[787,1394,1226],{},[787,1396,1397],{"class":789,"line":796},[787,1398,799],{},[787,1400,1401],{"class":789,"line":802},[787,1402,1301],{},[787,1404,1405],{"class":789,"line":808},[787,1406,1306],{},[787,1408,1409],{"class":789,"line":815},[787,1410,812],{"emptyLinePlaceholder":811},[787,1412,1413],{"class":789,"line":821},[787,1414,1353],{},[787,1416,1417],{"class":789,"line":826},[787,1418,1035],{},[787,1420,1421],{"class":789,"line":832},[787,1422,1362],{},[787,1424,1425],{"class":789,"line":1032},[787,1426,1367],{},[787,1428,1429],{"class":789,"line":1038},[787,1430,1053],{},[787,1432,1433],{"class":789,"line":1044},[787,1434,812],{"emptyLinePlaceholder":811},[787,1436,1437],{"class":789,"line":1050},[787,1438,1439],{},"    public void startSearchSweep()\n",[787,1441,1442],{"class":789,"line":1056},[787,1443,1035],{},[787,1445,1446],{"class":789,"line":1061},[787,1447,1367],{},[787,1449,1450],{"class":789,"line":1067},[787,1451,1053],{},[787,1453,1454],{"class":789,"line":1073},[787,1455,835],{},[768,1457,1459],{"id":1458},"step-6-check-the-naming-and-the-order","Step 6: Check the Naming and the Order",[837,1461,1462,1467,1473,1483],{},[840,1463,1464,1466],{},[784,1465,1190],{}," is a class name → PascalCase.",[840,1468,1469,1472],{},[784,1470,1471],{},"startSearchSweep"," is a method name → lowerCamelCase.",[840,1474,1475,924,1478,1480,1481,854],{},[784,1476,1477],{},"headingDegrees",[784,1479,1275],{}," are instance variables → lowerCamelCase, ",[784,1482,918],{},[840,1484,1485],{},"The three parts appear in the standard order: instance variables, then the constructor, then methods.",[768,1487,1489,1490,1492],{"id":1488},"why-private-matters-here","Why ",[784,1491,918],{}," Matters Here",[773,1494,1495,1496,946,1498,1500,1501,1504,1505,1507,1508,1510,1511,1513,1514,1517,1518,1520,1521,1523],{},"If ",[784,1497,1275],{},[784,1499,923],{},", any other class could write ",[784,1502,1503],{},"myTurret.isLockedOnTarget = true;"," directly — claiming a lock the turret never actually acquired. Because it's ",[784,1506,918],{},", the only way it can become ",[784,1509,1282],{}," is through code that lives inside ",[784,1512,1190],{}," itself (targeting logic not shown here), and the only way it can become ",[784,1515,1516],{},"false"," again from the outside is by calling ",[784,1519,1384],{},". That's encapsulation: outside code can only affect the turret's data through the behavior ",[784,1522,1190],{}," chooses to expose.",[768,1525,1527],{"id":1526},"recap","Recap",[837,1529,1530,1536,1546,1561],{},[840,1531,1532,1533,1535],{},"Every class has the same three parts, in order: instance variables, constructors, methods — ",[784,1534,1190],{}," follows that order exactly.",[840,1537,1538,1539,1541,1542,924,1544,854],{},"Instance variables are per-object — a second ",[784,1540,1190],{}," would get its own independent ",[784,1543,1477],{},[784,1545,1275],{},[840,1547,1548,1549,1551,1552,1554,1555,1557,1558,1560],{},"Instance variables are ",[784,1550,918],{},"; methods meant for other classes to call are ",[784,1553,923],{},". This is encapsulation, and it's why ",[784,1556,1275],{}," can only change through ",[784,1559,1190],{},"'s own methods.",[840,1562,1563],{},"The class was designed by first asking what data it needs to represent (heading, lock state) before any code was written.",[1156,1565,1158],{},{"title":782,"searchDepth":796,"depth":796,"links":1567},[1568,1569,1570,1571,1573,1574,1575,1576,1578],{"id":1183,"depth":796,"text":1184},{"id":1194,"depth":796,"text":1195},{"id":1212,"depth":796,"text":1213},{"id":1257,"depth":796,"text":1572},"Step 3: Add the Instance Variables, private",{"id":1313,"depth":796,"text":1314},{"id":1378,"depth":796,"text":1379},{"id":1458,"depth":796,"text":1459},{"id":1488,"depth":796,"text":1577},"Why private Matters Here",{"id":1526,"depth":796,"text":1527},{"outlineRef":1170,"pairsWith":1580,"status":1581},"[`lessons\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class.md`](..\u002F..\u002Flessons\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class.md)","new — authored worked example (fully solved, walked step by step — not a problem to attempt)",{"title":547,"description":782},"K5y0AkWOWVCUddYNQlTklclOCDmU_7drlwyapiT5bbg",{"id":1585,"title":708,"body":1586,"description":782,"extension":1168,"meta":2017,"navigation":811,"path":707,"seo":2019,"stem":709,"__hash__":2020},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class.md",{"type":761,"value":1587,"toc":2013},[1588,1591,1595,1623,1628,1660,1666,1683,1722,1726,1742,1745,1840,1845,1922,2011],[764,1589,708],{"id":1590},"anatomy-of-a-java-class-exercises",[768,1592,1594],{"id":1593},"multiple-choice","Multiple Choice",[773,1596,1597,1600,1601,1604,1605,1608,1609,1612,1613,1616,1617,1619,1620,1622],{},[843,1598,1599],{},"Question:"," A ",[784,1602,1603],{},"Climber"," class stores its extension as ",[784,1606,1607],{},"public double currentHeightInches;"," — a public instance variable with no other methods. Another class in the program writes ",[784,1610,1611],{},"myClimber.currentHeightInches = -12.0;"," directly, and it compiles and runs fine. What is the most direct consequence of making ",[784,1614,1615],{},"currentHeightInches"," ",[784,1618,923],{}," instead of ",[784,1621,918],{},"?",[773,1624,1625],{},[843,1626,1627],{},"Options:",[837,1629,1630,1640,1646,1654],{},[840,1631,1632,1633,1636,1637,1639],{},"A. Any other class can set it to any value at all, including a physically impossible one like ",[784,1634,1635],{},"-12.0",", since there's no method in ",[784,1638,1603],{}," enforcing what counts as a valid height",[840,1641,1642,1643,1645],{},"B. The program won't compile — instance variables are required to be ",[784,1644,918],{}," in Java",[840,1647,1648,1649,924,1651,1653],{},"C. Nothing changes in practice; ",[784,1650,923],{},[784,1652,918],{}," only affect how the code looks, not what other classes can do",[840,1655,1656,1657,1659],{},"D. It can now only be changed from inside ",[784,1658,1603],{},"'s own constructor, never afterward",[773,1661,1662,1665],{},[843,1663,1664],{},"Answer:"," A",[773,1667,1668,1671,1672,1616,1674,1676,1677,1679,1680,1682],{},[843,1669,1670],{},"Why:"," Encapsulation means the class's own methods are the only gatekeepers for how its data changes. Making ",[784,1673,1615],{},[784,1675,923],{}," removes that gate entirely — any other class can assign it anything, including a value like ",[784,1678,1635],{}," that no real climber height could be, because there's no ",[784,1681,1603],{}," method standing between the outside code and the raw variable.",[837,1684,1685,1694,1712],{},[840,1686,1687,1688,1690,1691,1693],{},"B is wrong — Java doesn't require instance variables to be ",[784,1689,918],{},"; ",[784,1692,923],{}," compiles just fine, it's simply poor design that breaks encapsulation.",[840,1695,1696,1697,1699,1700,1702,1703,1705,1706,1708,1709,1711],{},"C is wrong — ",[784,1698,923],{}," vs. ",[784,1701,918],{}," controls exactly what other classes can do. A ",[784,1704,918],{}," version of this same line would fail to compile from outside ",[784,1707,1603],{},"; the ",[784,1710,923],{}," version let it through with no check at all.",[840,1713,1714,1715,1717,1718,1721],{},"D is wrong — ",[784,1716,923],{}," makes a variable ",[957,1719,1720],{},"more"," freely changeable from anywhere, not restricted to the constructor.",[768,1723,1725],{"id":1724},"micro-parsons","Micro-Parsons",[773,1727,1728,1731,1732,1734,1735,1738,1739,1741],{},[843,1729,1730],{},"Problem:"," These lines, once correctly ordered, form a complete program whose ",[784,1733,1603],{}," class has a constructor that sets a starting height of ",[784,1736,1737],{},"0.0"," inches and marks it as not locked, then builds one ",[784,1740,1603],{}," and prints its starting height.",[773,1743,1744],{},"Reorder the fragments below into a working program:",[837,1746,1747,1753,1759,1765,1771,1777,1783,1789,1795,1801,1807,1813,1818],{},[840,1748,1749,1750],{},"a. ",[784,1751,1752],{},"        currentHeightInches = 0.0;",[840,1754,1755,1756],{},"b. ",[784,1757,1758],{},"public class Climber",[840,1760,1761,1762],{},"c. ",[784,1763,1764],{},"    }",[840,1766,1767,1768],{},"d. ",[784,1769,1770],{},"{",[840,1772,1773,1774],{},"e. ",[784,1775,1776],{},"    private double currentHeightInches;",[840,1778,1779,1780],{},"f. ",[784,1781,1782],{},"    public Climber()",[840,1784,1785,1786],{},"g. ",[784,1787,1788],{},"    private boolean isLocked;",[840,1790,1791,1792],{},"h. ",[784,1793,1794],{},"        isLocked = false;",[840,1796,1797,1798],{},"i. ",[784,1799,1800],{},"    {",[840,1802,1803,1804],{},"j. ",[784,1805,1806],{},"    public static void main(String[] args)",[840,1808,1809,1810],{},"k. ",[784,1811,1812],{},"        System.out.println(\"Starting height: \" + new Climber().currentHeightInches);",[840,1814,1815,1816],{},"l. ",[784,1817,1800],{},[840,1819,1820,1821,1827],{},"m. ",[957,1822,1823,1824,1826],{},"(two lines, merged into one fragment — nothing valid can ever come between the closing brace of ",[784,1825,1097],{}," and the closing brace of the class)",[777,1828,1830],{"className":779,"code":1829,"language":781,"meta":782,"style":782},"    }\n}\n",[784,1831,1832,1836],{"__ignoreMap":782},[787,1833,1834],{"class":789,"line":790},[787,1835,1053],{},[787,1837,1838],{"class":789,"line":796},[787,1839,835],{},[773,1841,1842,1844],{},[843,1843,1664],{}," b, d, e, g, f, i, a, h, c, j, l, k, m",[777,1846,1848],{"className":779,"code":1847,"language":781,"meta":782,"style":782},"public class Climber\n{\n    private double currentHeightInches;\n    private boolean isLocked;\n\n    public Climber()\n    {\n        currentHeightInches = 0.0;\n        isLocked = false;\n    }\n\n    public static void main(String[] args)\n    {\n        System.out.println(\"Starting height: \" + new Climber().currentHeightInches);\n    }\n}\n",[784,1849,1850,1855,1859,1864,1869,1873,1878,1882,1887,1892,1896,1900,1905,1909,1914,1918],{"__ignoreMap":782},[787,1851,1852],{"class":789,"line":790},[787,1853,1854],{},"public class Climber\n",[787,1856,1857],{"class":789,"line":796},[787,1858,799],{},[787,1860,1861],{"class":789,"line":802},[787,1862,1863],{},"    private double currentHeightInches;\n",[787,1865,1866],{"class":789,"line":808},[787,1867,1868],{},"    private boolean isLocked;\n",[787,1870,1871],{"class":789,"line":815},[787,1872,812],{"emptyLinePlaceholder":811},[787,1874,1875],{"class":789,"line":821},[787,1876,1877],{},"    public Climber()\n",[787,1879,1880],{"class":789,"line":826},[787,1881,1035],{},[787,1883,1884],{"class":789,"line":832},[787,1885,1886],{},"        currentHeightInches = 0.0;\n",[787,1888,1889],{"class":789,"line":1032},[787,1890,1891],{},"        isLocked = false;\n",[787,1893,1894],{"class":789,"line":1038},[787,1895,1053],{},[787,1897,1898],{"class":789,"line":1044},[787,1899,812],{"emptyLinePlaceholder":811},[787,1901,1902],{"class":789,"line":1050},[787,1903,1904],{},"    public static void main(String[] args)\n",[787,1906,1907],{"class":789,"line":1056},[787,1908,1035],{},[787,1910,1911],{"class":789,"line":1061},[787,1912,1913],{},"        System.out.println(\"Starting height: \" + new Climber().currentHeightInches);\n",[787,1915,1916],{"class":789,"line":1067},[787,1917,1053],{},[787,1919,1920],{"class":789,"line":1073},[787,1921,835],{},[773,1923,1924,1927,1928,1931,1932,1935,1936,1939,1940,1943,1944,1947,1948,1951,1952,1939,1955,1958,1959,1962,1963,1965,1966,1969,1970,1973,1974,1965,1977,1980,1981,1983,1984,1986,1987,1989,1990,1992,1993,1996,1997,1999,2000,924,2002,2004,2005,2007,2008,2010],{},[843,1925,1926],{},"Why this order:"," The class declaration (",[784,1929,1930],{},"b",") and its opening brace (",[784,1933,1934],{},"d",") come first. The two instance variables (",[784,1937,1938],{},"e",", ",[784,1941,1942],{},"g",") are declared before any constructor or method, matching the standard three-part order from this lesson. The constructor's signature (",[784,1945,1946],{},"f",") and its own opening brace (",[784,1949,1950],{},"i",") come next, followed by the two assignment statements inside it (",[784,1953,1954],{},"a",[784,1956,1957],{},"h",") — in the same order the fields were declared. The constructor's body then closes (",[784,1960,1961],{},"c","), and ",[784,1964,1097],{}," (",[784,1967,1968],{},"j",") is declared next with its own opening brace (",[784,1971,1972],{},"l","); inside it, the ",[784,1975,1976],{},"println",[784,1978,1979],{},"k",") builds a new ",[784,1982,1603],{}," and reads its starting height straight back — legal even though the field is ",[784,1985,918],{},", since ",[784,1988,1097],{}," lives inside ",[784,1991,1603],{}," itself, and private access is scoped to the whole class, not just one object. Fragment ",[784,1994,1995],{},"m"," merges the program's last two closing braces into a single piece: ",[784,1998,1097],{},"'s body closes and the class's body closes immediately after, with nothing else that could ever land between two closing braces at the end of a file. Note that ",[784,2001,1950],{},[784,2003,1972],{}," (both a bare four-space ",[784,2006,1770],{},") are textually identical — interchangeable copies at the same nesting depth, one opens the constructor and one opens ",[784,2009,1097],{},", so it doesn't matter which physical copy lands in which slot.",[1156,2012,1158],{},{"title":782,"searchDepth":796,"depth":796,"links":2014},[2015,2016],{"id":1593,"depth":796,"text":1594},{"id":1724,"depth":796,"text":1725},{"outlineRef":1170,"pairsWith":1580,"status":2018},"new — authored exercises (Multiple Choice + Micro-Parsons)",{"title":708,"description":782},"e9xKGx-87tgrIasvqq6itq6gOP1Q8dq7z9mHssRuza0",1790274944297]