[{"data":1,"prerenderedAt":3389},["ShallowReactive",2],{"item-lessons-light-ch07-the-class-blueprint":3,"item-examples-light-ch07-the-class-blueprint":444,"item-exercises-light-ch07-the-class-blueprint":753,"item-lesson-full-ch07-the-class-blueprint-7.2":1070,"item-example-full-ch07-the-class-blueprint-7.2":1599,"item-exercise-full-ch07-the-class-blueprint-7.2":2101},[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":126,"body":1072,"description":1099,"extension":1593,"meta":1594,"navigation":1127,"path":125,"seo":1597,"stem":127,"__hash__":1598},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them.md",{"type":1073,"value":1074,"toc":1583},"minimark",[1075,1079,1084,1093,1159,1163,1183,1206,1242,1246,1260,1283,1290,1294,1322,1350,1364,1368,1375,1379,1382,1408,1430,1498,1509,1513,1533,1537,1568,1579],[1076,1077,126],"h1",{"id":1078},"methods-how-to-write-them",[1080,1081,1083],"h2",{"id":1082},"void-vs-non-void-revisited-for-your-own-classes","Void vs. Non-Void, Revisited for Your Own Classes",[1085,1086,1087,1088,1092],"p",{},"Same rule as Ch.4, now applied to methods you write inside your own class: ",[1089,1090,1091],"code",{},"void"," methods act (no return value); non-void methods compute and return one.",[1094,1095,1100],"pre",{"className":1096,"code":1097,"language":1098,"meta":1099,"style":1099},"language-java shiki shiki-themes github-light github-dark","public class Intake\n{\n    private double currentSpeed;\n\n    public void spin(double speed) \u002F\u002F void — acts, doesn't return anything\n    {\n        currentSpeed = speed;\n    }\n}\n","java","",[1089,1101,1102,1110,1116,1122,1129,1135,1141,1147,1153],{"__ignoreMap":1099},[1103,1104,1107],"span",{"class":1105,"line":1106},"line",1,[1103,1108,1109],{},"public class Intake\n",[1103,1111,1113],{"class":1105,"line":1112},2,[1103,1114,1115],{},"{\n",[1103,1117,1119],{"class":1105,"line":1118},3,[1103,1120,1121],{},"    private double currentSpeed;\n",[1103,1123,1125],{"class":1105,"line":1124},4,[1103,1126,1128],{"emptyLinePlaceholder":1127},true,"\n",[1103,1130,1132],{"class":1105,"line":1131},5,[1103,1133,1134],{},"    public void spin(double speed) \u002F\u002F void — acts, doesn't return anything\n",[1103,1136,1138],{"class":1105,"line":1137},6,[1103,1139,1140],{},"    {\n",[1103,1142,1144],{"class":1105,"line":1143},7,[1103,1145,1146],{},"        currentSpeed = speed;\n",[1103,1148,1150],{"class":1105,"line":1149},8,[1103,1151,1152],{},"    }\n",[1103,1154,1156],{"class":1105,"line":1155},9,[1103,1157,1158],{},"}\n",[1080,1160,1162],{"id":1161},"getters-accessors","Getters (Accessors)",[1085,1164,1165,1166,1169,1170,1174,1175,1178,1179,1182],{},"Since instance variables are ",[1089,1167,1168],{},"private"," (Lesson 7.1), other classes need a way to read them — a ",[1171,1172,1173],"strong",{},"getter",": a ",[1089,1176,1177],{},"public"," method, no arguments, that returns one instance variable's value. By convention its name starts with ",[1089,1180,1181],{},"get",".",[1094,1184,1186],{"className":1096,"code":1185,"language":1098,"meta":1099,"style":1099},"public double getCurrentSpeed()\n{\n    return currentSpeed;\n}\n",[1089,1187,1188,1193,1197,1202],{"__ignoreMap":1099},[1103,1189,1190],{"class":1105,"line":1106},[1103,1191,1192],{},"public double getCurrentSpeed()\n",[1103,1194,1195],{"class":1105,"line":1112},[1103,1196,1115],{},[1103,1198,1199],{"class":1105,"line":1118},[1103,1200,1201],{},"    return currentSpeed;\n",[1103,1203,1204],{"class":1105,"line":1124},[1103,1205,1158],{},[1085,1207,1208,1209,1212,1213,1216,1217,1220,1221,1224,1225,1227,1228,1216,1231,1234,1235,1238,1239,1182],{},"You don't need a getter for every instance variable — only the ones other code genuinely needs to read. A getter for a ",[1089,1210,1211],{},"boolean"," field is conventionally named ",[1089,1214,1215],{},"is..."," or ",[1089,1218,1219],{},"has..."," instead of ",[1089,1222,1223],{},"get..."," (matching a ",[1089,1226,1211],{}," field itself, like ",[1089,1229,1230],{},"isDeployed",[1089,1232,1233],{},"hasGamePiece"," from Lesson 7.1) — e.g. ",[1089,1236,1237],{},"isDeployed()",", not ",[1089,1240,1241],{},"getIsDeployed()",[1080,1243,1245],{"id":1244},"setters-mutators","Setters (Mutators)",[1085,1247,1248,1249,1252,1253,1255,1256,1259],{},"A ",[1171,1250,1251],{},"setter"," is the write-side equivalent: a ",[1089,1254,1091],{}," method, named starting with ",[1089,1257,1258],{},"set",", taking one parameter — the new value — and assigning it to the instance variable.",[1094,1261,1263],{"className":1096,"code":1262,"language":1098,"meta":1099,"style":1099},"public void setCurrentSpeed(double newSpeed)\n{\n    currentSpeed = newSpeed;\n}\n",[1089,1264,1265,1270,1274,1279],{"__ignoreMap":1099},[1103,1266,1267],{"class":1105,"line":1106},[1103,1268,1269],{},"public void setCurrentSpeed(double newSpeed)\n",[1103,1271,1272],{"class":1105,"line":1112},[1103,1273,1115],{},[1103,1275,1276],{"class":1105,"line":1118},[1103,1277,1278],{},"    currentSpeed = newSpeed;\n",[1103,1280,1281],{"class":1105,"line":1124},[1103,1282,1158],{},[1085,1284,1285,1286,1289],{},"Think just as hard before writing a setter as before writing a getter. Not every instance variable should be freely settable from outside — sometimes the class should only change its own data through a specific method (like ",[1089,1287,1288],{},"spin(speed)"," above) that also enforces some rule, rather than through a bare setter that lets anyone assign anything.",[1080,1291,1293],{"id":1292},"tostring","toString",[1085,1295,1296,1298,1299,1302,1303,1306,1307,1309,1310,1313,1314,1317,1318,1321],{},[1089,1297,1293],{}," is a special method Java calls automatically whenever it needs to turn an object into text — including every time you ",[1089,1300,1301],{},"System.out.println(someObject)"," or concatenate an object with ",[1089,1304,1305],{},"+",". Every class actually already has a ",[1089,1308,1293],{}," (inherited — Ch.17); writing your own ",[1171,1311,1312],{},"overrides"," it with something more useful, which is why the method's name and signature (no parameters, returns ",[1089,1315,1316],{},"String",") have to match exactly (",[1089,1319,1320],{},"@Override"," makes that explicit — also Ch.17).",[1094,1323,1325],{"className":1096,"code":1324,"language":1098,"meta":1099,"style":1099},"\u002F\u002F assumes 7.1's full Intake, with isDeployed added\npublic String toString()\n{\n    return \"Intake[speed=\" + currentSpeed + \", deployed=\" + isDeployed + \"]\";\n}\n",[1089,1326,1327,1332,1337,1341,1346],{"__ignoreMap":1099},[1103,1328,1329],{"class":1105,"line":1106},[1103,1330,1331],{},"\u002F\u002F assumes 7.1's full Intake, with isDeployed added\n",[1103,1333,1334],{"class":1105,"line":1112},[1103,1335,1336],{},"public String toString()\n",[1103,1338,1339],{"class":1105,"line":1118},[1103,1340,1115],{},[1103,1342,1343],{"class":1105,"line":1124},[1103,1344,1345],{},"    return \"Intake[speed=\" + currentSpeed + \", deployed=\" + isDeployed + \"]\";\n",[1103,1347,1348],{"class":1105,"line":1131},[1103,1349,1158],{},[1085,1351,1352,1353,1355,1356,1359,1360,1363],{},"Without a ",[1089,1354,1293],{},", printing an object directly gives an unhelpful default (something like ",[1089,1357,1358],{},"Intake@1a2b3c",") — writing your own gives every ",[1089,1361,1362],{},"System.out.println(myIntake)"," a genuinely useful message instead.",[1080,1365,1367],{"id":1366},"method-parameters-revisited","Method Parameters, Revisited",[1085,1369,1370,1371,1374],{},"Same call-by-value rule from Ch.4.1: a primitive parameter (",[1089,1372,1373],{},"double speed",") gets a copy. Changing it inside the method never affects the caller's original variable.",[1080,1376,1378],{"id":1377},"where-variables-live","Where Variables Live",[1085,1380,1381],{},"Every variable you've written falls into one of three kinds, based on where it's declared:",[1383,1384,1385,1392,1398],"ul",{},[1386,1387,1388,1391],"li",{},[1171,1389,1390],{},"Instance variables"," — declared inside the class, outside any method (Lesson 7.1). One copy per object; it lives as long as the object does.",[1386,1393,1394,1397],{},[1171,1395,1396],{},"Parameters"," — declared in a method's (or constructor's) parameter list. It lives only for that one call — created when the call starts, gone the instant it returns.",[1386,1399,1400,1403,1404,1407],{},[1171,1401,1402],{},"Local variables"," — declared inside a method's body, or inside a block like an ",[1089,1405,1406],{},"if"," or a loop. It lives only inside the block where it's declared — once that block ends, the variable is gone.",[1085,1409,1410,1411,1415,1416,1419,1420,1415,1423,1426,1427,1429],{},"Where a variable can be ",[1412,1413,1414],"em",{},"used"," is its ",[1171,1417,1418],{},"scope","; how long it ",[1412,1421,1422],{},"exists",[1171,1424,1425],{},"lifetime",". A local variable declared inside an ",[1089,1428,1406],{}," block doesn't exist outside that block — reading it afterward is a compile error, not a runtime surprise.",[1094,1431,1433],{"className":1096,"code":1432,"language":1098,"meta":1099,"style":1099},"public class Intake\n{\n    \u002F\u002F currentSpeed is an instance variable — lives as long as the Intake object does\n    private double currentSpeed;\n\n    \u002F\u002F targetSpeed is a parameter — lives only during this one call to spin()\n    public void spin(double targetSpeed)\n    {\n        \u002F\u002F clamped is a local variable — lives only inside spin()\n        double clamped = targetSpeed;\n        currentSpeed = clamped;\n    } \u002F\u002F clamped and targetSpeed both cease to exist here\n}\n",[1089,1434,1435,1439,1443,1448,1452,1456,1461,1466,1470,1475,1481,1487,1493],{"__ignoreMap":1099},[1103,1436,1437],{"class":1105,"line":1106},[1103,1438,1109],{},[1103,1440,1441],{"class":1105,"line":1112},[1103,1442,1115],{},[1103,1444,1445],{"class":1105,"line":1118},[1103,1446,1447],{},"    \u002F\u002F currentSpeed is an instance variable — lives as long as the Intake object does\n",[1103,1449,1450],{"class":1105,"line":1124},[1103,1451,1121],{},[1103,1453,1454],{"class":1105,"line":1131},[1103,1455,1128],{"emptyLinePlaceholder":1127},[1103,1457,1458],{"class":1105,"line":1137},[1103,1459,1460],{},"    \u002F\u002F targetSpeed is a parameter — lives only during this one call to spin()\n",[1103,1462,1463],{"class":1105,"line":1143},[1103,1464,1465],{},"    public void spin(double targetSpeed)\n",[1103,1467,1468],{"class":1105,"line":1149},[1103,1469,1140],{},[1103,1471,1472],{"class":1105,"line":1155},[1103,1473,1474],{},"        \u002F\u002F clamped is a local variable — lives only inside spin()\n",[1103,1476,1478],{"class":1105,"line":1477},10,[1103,1479,1480],{},"        double clamped = targetSpeed;\n",[1103,1482,1484],{"class":1105,"line":1483},11,[1103,1485,1486],{},"        currentSpeed = clamped;\n",[1103,1488,1490],{"class":1105,"line":1489},12,[1103,1491,1492],{},"    } \u002F\u002F clamped and targetSpeed both cease to exist here\n",[1103,1494,1496],{"class":1105,"line":1495},13,[1103,1497,1158],{},[1085,1499,1500,1501,1504,1505,1508],{},"A parameter or local variable can have the ",[1412,1502,1503],{},"same name"," as an instance variable — inside that method, the closer one (the parameter\u002Flocal) \"wins,\" which is called ",[1171,1506,1507],{},"shadowing",". Ch.8 covers this in full, once you've seen a constructor use it on purpose.",[1080,1510,1512],{"id":1511},"common-pitfalls","Common Pitfalls",[1383,1514,1515,1521],{},[1386,1516,1517,1520],{},[1171,1518,1519],{},"Writing a getter or setter for every instance variable reflexively."," Only write one when something outside the class genuinely needs to read or change that specific value — a setter in particular can undermine whatever rules the class's own methods were meant to enforce.",[1386,1522,1523,1529,1530,1532],{},[1171,1524,1525,1526,1528],{},"Forgetting ",[1089,1527,1293],{}," and being surprised by ugly default output."," If you're going to print an object for debugging or status, ",[1089,1531,1293],{}," is worth the two minutes it takes to write.",[1080,1534,1536],{"id":1535},"key-takeaways","Key Takeaways",[1383,1538,1539,1554,1557,1562,1565],{},[1386,1540,1541,1542,1216,1544,1547,1548,1550,1551,1553],{},"Getters return an instance variable's value (no parameters, conventionally ",[1089,1543,1223],{},[1089,1545,1546],{},"is...\u002Fhas..."," for a ",[1089,1549,1211],{},"); setters assign a new value (one parameter, ",[1089,1552,1091],{}," return).",[1386,1555,1556],{},"Not every instance variable needs a getter or setter — only add one when something outside the class actually needs it.",[1386,1558,1559,1561],{},[1089,1560,1293],{}," is called automatically whenever Java needs to convert an object to text — write your own for useful debug output (it overrides the one every class inherits, Ch.17).",[1386,1563,1564],{},"Method parameters follow the same call-by-value rule as before: primitives are copied.",[1386,1566,1567],{},"Instance variables, parameters, and local variables each have their own scope (where they're visible) and lifetime (how long they exist) — a parameter or local variable can shadow an instance variable of the same name (Ch.8).",[1085,1569,1570,1571,1574,1575,1578],{},"Derived from ",[1089,1572,1573],{},"csawesome-2026",": ",[1089,1576,1577],{},"unit-3-class-creation\u002F3.05-methods-how-to-write-them.md"," (CSA 3.5)",[1580,1581,1582],"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":1099,"searchDepth":1112,"depth":1112,"links":1584},[1585,1586,1587,1588,1589,1590,1591,1592],{"id":1082,"depth":1112,"text":1083},{"id":1161,"depth":1112,"text":1162},{"id":1244,"depth":1112,"text":1245},{"id":1292,"depth":1112,"text":1293},{"id":1366,"depth":1112,"text":1367},{"id":1377,"depth":1112,"text":1378},{"id":1511,"depth":1112,"text":1512},{"id":1535,"depth":1112,"text":1536},"md",{"outlineRef":1595,"status":1596},"7.2 — Methods: How to Write Them (CSA 3.5)","new — authored lesson (fuller depth than the teaser slide)",{"title":126,"description":1099},"6jVxqK6qern1NvP91CU7G-MROzNkOn60Yu3AVocy-Gk",{"id":1600,"title":563,"body":1601,"description":1099,"extension":1593,"meta":2096,"navigation":1127,"path":562,"seo":2099,"stem":564,"__hash__":2100},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them.md",{"type":1073,"value":1602,"toc":2085},[1603,1606,1610,1619,1623,1668,1681,1685,1694,1717,1721,1728,1735,1789,1804,1810,1816,1838,1842,2000,2004,2029,2037,2043,2047,2083],[1076,1604,563],{"id":1605},"methods-how-to-write-them-worked-example",[1080,1607,1609],{"id":1608},"problem","Problem",[1085,1611,1248,1612,1615,1616,1618],{},[1089,1613,1614],{},"Shooter"," class already has a ",[1089,1617,1168],{}," instance variable tracking its flywheel speed. Give other code a way to read that speed, a way to safely change it, and a useful printed representation — without just handing out a raw setter.",[1080,1620,1622],{"id":1621},"step-1-start-from-the-existing-class","Step 1: Start From the Existing Class",[1094,1624,1626],{"className":1096,"code":1625,"language":1098,"meta":1099,"style":1099},"public class Shooter\n{\n    private double flywheelRpm;\n\n    public Shooter()\n    {\n        flywheelRpm = 0.0;\n    }\n}\n",[1089,1627,1628,1633,1637,1642,1646,1651,1655,1660,1664],{"__ignoreMap":1099},[1103,1629,1630],{"class":1105,"line":1106},[1103,1631,1632],{},"public class Shooter\n",[1103,1634,1635],{"class":1105,"line":1112},[1103,1636,1115],{},[1103,1638,1639],{"class":1105,"line":1118},[1103,1640,1641],{},"    private double flywheelRpm;\n",[1103,1643,1644],{"class":1105,"line":1124},[1103,1645,1128],{"emptyLinePlaceholder":1127},[1103,1647,1648],{"class":1105,"line":1131},[1103,1649,1650],{},"    public Shooter()\n",[1103,1652,1653],{"class":1105,"line":1137},[1103,1654,1140],{},[1103,1656,1657],{"class":1105,"line":1143},[1103,1658,1659],{},"        flywheelRpm = 0.0;\n",[1103,1661,1662],{"class":1105,"line":1149},[1103,1663,1152],{},[1103,1665,1666],{"class":1105,"line":1155},[1103,1667,1158],{},[1085,1669,1670,1671,1673,1674,1677,1678,1680],{},"Right now nothing outside ",[1089,1672,1614],{}," can read or change ",[1089,1675,1676],{},"flywheelRpm"," — it's ",[1089,1679,1168],{}," (Lesson 7.1).",[1080,1682,1684],{"id":1683},"step-2-add-a-getter","Step 2: Add a Getter",[1085,1686,1687,1688,1690,1691,1693],{},"Other code needs to read the current speed, so add a getter — ",[1089,1689,1177],{},", no parameters, returns the instance variable, named starting with ",[1089,1692,1181],{},":",[1094,1695,1697],{"className":1096,"code":1696,"language":1098,"meta":1099,"style":1099},"public double getFlywheelRpm()\n{\n    return flywheelRpm;\n}\n",[1089,1698,1699,1704,1708,1713],{"__ignoreMap":1099},[1103,1700,1701],{"class":1105,"line":1106},[1103,1702,1703],{},"public double getFlywheelRpm()\n",[1103,1705,1706],{"class":1105,"line":1112},[1103,1707,1115],{},[1103,1709,1710],{"class":1105,"line":1118},[1103,1711,1712],{},"    return flywheelRpm;\n",[1103,1714,1715],{"class":1105,"line":1124},[1103,1716,1158],{},[1080,1718,1720],{"id":1719},"step-3-resist-the-reflex-to-add-a-plain-setter","Step 3: Resist the Reflex to Add a Plain Setter",[1085,1722,1723,1724,1727],{},"The obvious next move is a ",[1089,1725,1726],{},"setFlywheelRpm(double newRpm)"," setter. But think about what that would let any other class do: set the flywheel to an arbitrary value, including something unsafe, with zero checks. Not every instance variable should be freely settable from outside.",[1085,1729,1730,1731,1734],{},"Instead, write a method that changes the data ",[1412,1732,1733],{},"and"," enforces a rule — a maximum safe speed of 6000 RPM:",[1094,1736,1738],{"className":1096,"code":1737,"language":1098,"meta":1099,"style":1099},"public void spinUpTo(double targetRpm)\n{\n    if (targetRpm > 6000.0)\n    {\n        flywheelRpm = 6000.0;\n    }\n    else\n    {\n        flywheelRpm = targetRpm;\n    }\n}\n",[1089,1739,1740,1745,1749,1754,1758,1763,1767,1772,1776,1781,1785],{"__ignoreMap":1099},[1103,1741,1742],{"class":1105,"line":1106},[1103,1743,1744],{},"public void spinUpTo(double targetRpm)\n",[1103,1746,1747],{"class":1105,"line":1112},[1103,1748,1115],{},[1103,1750,1751],{"class":1105,"line":1118},[1103,1752,1753],{},"    if (targetRpm > 6000.0)\n",[1103,1755,1756],{"class":1105,"line":1124},[1103,1757,1140],{},[1103,1759,1760],{"class":1105,"line":1131},[1103,1761,1762],{},"        flywheelRpm = 6000.0;\n",[1103,1764,1765],{"class":1105,"line":1137},[1103,1766,1152],{},[1103,1768,1769],{"class":1105,"line":1143},[1103,1770,1771],{},"    else\n",[1103,1773,1774],{"class":1105,"line":1149},[1103,1775,1140],{},[1103,1777,1778],{"class":1105,"line":1155},[1103,1779,1780],{},"        flywheelRpm = targetRpm;\n",[1103,1782,1783],{"class":1105,"line":1477},[1103,1784,1152],{},[1103,1786,1787],{"class":1105,"line":1483},[1103,1788,1158],{},[1085,1790,1791,1794,1795,1798,1799,1801,1802,1182],{},[1089,1792,1793],{},"targetRpm"," is a primitive parameter, so it's copied in (call-by-value, Ch.4.1) — passing a variable from the caller in never lets ",[1089,1796,1797],{},"spinUpTo"," change that caller's own variable, only ",[1089,1800,1614],{},"'s own ",[1089,1803,1676],{},[1080,1805,1807,1808],{"id":1806},"step-4-add-tostring","Step 4: Add ",[1089,1809,1293],{},[1085,1811,1812,1813,1815],{},"So printing a ",[1089,1814,1614],{}," directly gives something useful instead of Java's default:",[1094,1817,1819],{"className":1096,"code":1818,"language":1098,"meta":1099,"style":1099},"public String toString()\n{\n    return \"Shooter[flywheelRpm=\" + flywheelRpm + \"]\";\n}\n",[1089,1820,1821,1825,1829,1834],{"__ignoreMap":1099},[1103,1822,1823],{"class":1105,"line":1106},[1103,1824,1336],{},[1103,1826,1827],{"class":1105,"line":1112},[1103,1828,1115],{},[1103,1830,1831],{"class":1105,"line":1118},[1103,1832,1833],{},"    return \"Shooter[flywheelRpm=\" + flywheelRpm + \"]\";\n",[1103,1835,1836],{"class":1105,"line":1124},[1103,1837,1158],{},[1080,1839,1841],{"id":1840},"step-5-put-it-together","Step 5: Put It Together",[1094,1843,1845],{"className":1096,"code":1844,"language":1098,"meta":1099,"style":1099},"public class Shooter\n{\n    private double flywheelRpm;\n\n    public Shooter()\n    {\n        flywheelRpm = 0.0;\n    }\n\n    public double getFlywheelRpm()\n    {\n        return flywheelRpm;\n    }\n\n    public void spinUpTo(double targetRpm)\n    {\n        if (targetRpm > 6000.0)\n        {\n            flywheelRpm = 6000.0;\n        }\n        else\n        {\n            flywheelRpm = targetRpm;\n        }\n    }\n\n    public String toString()\n    {\n        return \"Shooter[flywheelRpm=\" + flywheelRpm + \"]\";\n    }\n}\n",[1089,1846,1847,1851,1855,1859,1863,1867,1871,1875,1879,1883,1888,1892,1897,1901,1906,1912,1917,1923,1929,1935,1941,1947,1952,1958,1963,1968,1973,1979,1984,1990,1995],{"__ignoreMap":1099},[1103,1848,1849],{"class":1105,"line":1106},[1103,1850,1632],{},[1103,1852,1853],{"class":1105,"line":1112},[1103,1854,1115],{},[1103,1856,1857],{"class":1105,"line":1118},[1103,1858,1641],{},[1103,1860,1861],{"class":1105,"line":1124},[1103,1862,1128],{"emptyLinePlaceholder":1127},[1103,1864,1865],{"class":1105,"line":1131},[1103,1866,1650],{},[1103,1868,1869],{"class":1105,"line":1137},[1103,1870,1140],{},[1103,1872,1873],{"class":1105,"line":1143},[1103,1874,1659],{},[1103,1876,1877],{"class":1105,"line":1149},[1103,1878,1152],{},[1103,1880,1881],{"class":1105,"line":1155},[1103,1882,1128],{"emptyLinePlaceholder":1127},[1103,1884,1885],{"class":1105,"line":1477},[1103,1886,1887],{},"    public double getFlywheelRpm()\n",[1103,1889,1890],{"class":1105,"line":1483},[1103,1891,1140],{},[1103,1893,1894],{"class":1105,"line":1489},[1103,1895,1896],{},"        return flywheelRpm;\n",[1103,1898,1899],{"class":1105,"line":1495},[1103,1900,1152],{},[1103,1902,1904],{"class":1105,"line":1903},14,[1103,1905,1128],{"emptyLinePlaceholder":1127},[1103,1907,1909],{"class":1105,"line":1908},15,[1103,1910,1911],{},"    public void spinUpTo(double targetRpm)\n",[1103,1913,1915],{"class":1105,"line":1914},16,[1103,1916,1140],{},[1103,1918,1920],{"class":1105,"line":1919},17,[1103,1921,1922],{},"        if (targetRpm > 6000.0)\n",[1103,1924,1926],{"class":1105,"line":1925},18,[1103,1927,1928],{},"        {\n",[1103,1930,1932],{"class":1105,"line":1931},19,[1103,1933,1934],{},"            flywheelRpm = 6000.0;\n",[1103,1936,1938],{"class":1105,"line":1937},20,[1103,1939,1940],{},"        }\n",[1103,1942,1944],{"class":1105,"line":1943},21,[1103,1945,1946],{},"        else\n",[1103,1948,1950],{"class":1105,"line":1949},22,[1103,1951,1928],{},[1103,1953,1955],{"class":1105,"line":1954},23,[1103,1956,1957],{},"            flywheelRpm = targetRpm;\n",[1103,1959,1961],{"class":1105,"line":1960},24,[1103,1962,1940],{},[1103,1964,1966],{"class":1105,"line":1965},25,[1103,1967,1152],{},[1103,1969,1971],{"class":1105,"line":1970},26,[1103,1972,1128],{"emptyLinePlaceholder":1127},[1103,1974,1976],{"class":1105,"line":1975},27,[1103,1977,1978],{},"    public String toString()\n",[1103,1980,1982],{"class":1105,"line":1981},28,[1103,1983,1140],{},[1103,1985,1987],{"class":1105,"line":1986},29,[1103,1988,1989],{},"        return \"Shooter[flywheelRpm=\" + flywheelRpm + \"]\";\n",[1103,1991,1993],{"class":1105,"line":1992},30,[1103,1994,1152],{},[1103,1996,1998],{"class":1105,"line":1997},31,[1103,1999,1158],{},[1080,2001,2003],{"id":2002},"step-6-try-it","Step 6: Try It",[1094,2005,2007],{"className":1096,"code":2006,"language":1098,"meta":1099,"style":1099},"Shooter shooter = new Shooter();\nshooter.spinUpTo(7500.0);              \u002F\u002F over the cap\nSystem.out.println(shooter);           \u002F\u002F Java calls toString() automatically\nSystem.out.println(shooter.getFlywheelRpm());\n",[1089,2008,2009,2014,2019,2024],{"__ignoreMap":1099},[1103,2010,2011],{"class":1105,"line":1106},[1103,2012,2013],{},"Shooter shooter = new Shooter();\n",[1103,2015,2016],{"class":1105,"line":1112},[1103,2017,2018],{},"shooter.spinUpTo(7500.0);              \u002F\u002F over the cap\n",[1103,2020,2021],{"class":1105,"line":1118},[1103,2022,2023],{},"System.out.println(shooter);           \u002F\u002F Java calls toString() automatically\n",[1103,2025,2026],{"class":1105,"line":1124},[1103,2027,2028],{},"System.out.println(shooter.getFlywheelRpm());\n",[1094,2030,2035],{"className":2031,"code":2033,"language":2034},[2032],"language-text","Shooter[flywheelRpm=6000.0]\n6000.0\n","text",[1089,2036,2033],{"__ignoreMap":1099},[1085,2038,2039,2040,2042],{},"Requesting 7500 RPM didn't produce 7500 RPM — ",[1089,2041,1797],{}," clamped it, which a bare setter never would have.",[1080,2044,2046],{"id":2045},"recap","Recap",[1383,2048,2049,2056,2065,2074],{},[1386,2050,2051,2052,2055],{},"Getters return an instance variable's value and take no parameters — ",[1089,2053,2054],{},"getFlywheelRpm()"," here.",[1386,2057,2058,2059,2061,2062,2064],{},"Not every instance variable needs a plain setter — ",[1089,2060,1676],{}," only changes through ",[1089,2063,1797],{},", which enforces the 6000 RPM cap a bare setter couldn't.",[1386,2066,2067,2069,2070,2073],{},[1089,2068,1293],{}," is called automatically whenever Java needs to turn an object into text — ",[1089,2071,2072],{},"System.out.println(shooter)"," used it without being asked explicitly.",[1386,2075,2076,2077,2079,2080,2082],{},"Method parameters follow the same call-by-value rule as before: ",[1089,2078,1793],{}," is a copy, so ",[1089,2081,1797],{}," never reaches back and changes the caller's own variable.",[1580,2084,1582],{},{"title":1099,"searchDepth":1112,"depth":1112,"links":2086},[2087,2088,2089,2090,2091,2093,2094,2095],{"id":1608,"depth":1112,"text":1609},{"id":1621,"depth":1112,"text":1622},{"id":1683,"depth":1112,"text":1684},{"id":1719,"depth":1112,"text":1720},{"id":1806,"depth":1112,"text":2092},"Step 4: Add toString",{"id":1840,"depth":1112,"text":1841},{"id":2002,"depth":1112,"text":2003},{"id":2045,"depth":1112,"text":2046},{"outlineRef":1595,"pairsWith":2097,"status":2098},"[`lessons\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them.md`](..\u002F..\u002Flessons\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them.md)","new — authored worked example (fully solved, walked step by step — not a problem to attempt)",{"title":563,"description":1099},"MYiBQFoKDLxTqbWaiQN05I76KvBxV7udTOMlAoM0ofU",{"id":2102,"title":872,"body":2103,"description":1099,"extension":1593,"meta":3385,"navigation":1127,"path":871,"seo":3387,"stem":873,"__hash__":3388},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them.md",{"type":1073,"value":2104,"toc":3380},[2105,2108,2112,2126,2149,2156,2161,2195,2201,2220,2247,2251,2274,2329,2332,2386,2391,2397,2491,2554,2558,2564,2579,2632,2645,2665,2670,2846,2851,2856,2862,2867,2873,2878,2882,2888,2892,2898,2903,2907,2913,2917,2923,2928,2932,2938,2942,2948,2953,2957,2963,2967,2973,2978,3322,3378],[1076,2106,872],{"id":2107},"methods-how-to-write-them-exercises",[1080,2109,2111],{"id":2110},"multiple-choice","Multiple Choice",[1085,2113,2114,2117,2118,2121,2122,2125],{},[1171,2115,2116],{},"Question:"," A ",[1089,2119,2120],{},"Transmission"," class has a private instance variable ",[1089,2123,2124],{},"private int currentGear;",". A teammate writes this method, intending it as a getter:",[1094,2127,2129],{"className":1096,"code":2128,"language":1098,"meta":1099,"style":1099},"public void getCurrentGear()\n{\n    System.out.println(currentGear);\n}\n",[1089,2130,2131,2136,2140,2145],{"__ignoreMap":1099},[1103,2132,2133],{"class":1105,"line":1106},[1103,2134,2135],{},"public void getCurrentGear()\n",[1103,2137,2138],{"class":1105,"line":1112},[1103,2139,1115],{},[1103,2141,2142],{"class":1105,"line":1118},[1103,2143,2144],{},"    System.out.println(currentGear);\n",[1103,2146,2147],{"class":1105,"line":1124},[1103,2148,1158],{},[1085,2150,2151,2152,2155],{},"Other code then tries ",[1089,2153,2154],{},"int gear = myTransmission.getCurrentGear();",", and it fails to compile. What's wrong with the method?",[1085,2157,2158],{},[1171,2159,2160],{},"Options:",[1383,2162,2163,2176,2182,2192],{},[1386,2164,2165,2166,2168,2169,2171,2172,2175],{},"A. It's ",[1089,2167,1091],{},", so it doesn't return a value at all — a getter must be non-",[1089,2170,1091],{}," and ",[1089,2173,2174],{},"return"," the instance variable, not just print it",[1386,2177,2178,2179,2181],{},"B. It's missing the ",[1089,2180,1168],{}," keyword, so other classes can't call it",[1386,2183,2184,2185,2188,2189,2191],{},"C. ",[1089,2186,2187],{},"currentGear"," needs to be ",[1089,2190,1177],{}," before any method can read it",[1386,2193,2194],{},"D. Getter methods must take one parameter — the value being returned",[1085,2196,2197,2200],{},[1171,2198,2199],{},"Answer:"," A",[1085,2202,2203,2206,2207,2209,2210,2212,2213,2215,2216,2219],{},[1171,2204,2205],{},"Why:"," A getter's whole job is to hand a value back to whoever called it, which requires a return type matching the field and a ",[1089,2208,2174],{}," statement. This method is ",[1089,2211,1091],{}," and only prints — it never hands anything back, so ",[1089,2214,2154],{}," has nothing to assign to ",[1089,2217,2218],{},"gear",", and that's a compile error.",[1383,2221,2222,2228,2244],{},[1386,2223,2224,2225,2227],{},"B is wrong — the method is already declared ",[1089,2226,1177],{},", exactly as a getter should be; that's not the problem here.",[1386,2229,2230,2231,2234,2235,2237,2238,2240,2241,2243],{},"C is wrong — getters exist precisely so an instance variable ",[1412,2232,2233],{},"can"," stay ",[1089,2236,1168],{}," while still being readable from outside; making ",[1089,2239,2187],{}," ",[1089,2242,1177],{}," would remove the need for this getter, not fix it.",[1386,2245,2246],{},"D is wrong — getters conventionally take zero parameters; adding one would make this a different kind of method entirely, not fix the missing return value.",[1080,2248,2250],{"id":2249},"micro-parsons","Micro-Parsons",[1085,2252,2253,2256,2257,2259,2260,2263,2264,2267,2268,2270,2271,2273],{},[1171,2254,2255],{},"Problem:"," This lesson emphasizes getters ",[1412,2258,1733],{}," setters as a pair, so scrambling only a getter would tell half the story — but a full getter+setter+",[1089,2261,2262],{},"main"," program runs well past a reasonable fragment count. Below is the outer scaffold of a complete program: the ",[1089,2265,2266],{},"Elevator"," class declaration and braces, and a complete, already-written ",[1089,2269,2262],{}," that constructs an ",[1089,2272,2266],{},", raises it to a new height, and prints that height back out. Reorder the fragments below to fill in the class body: the field, then its getter, then its setter.",[1094,2275,2277],{"className":1096,"code":2276,"language":1098,"meta":1099,"style":1099},"public class Elevator\n{\n    \u002F\u002F ⟵ reorder the fragments below into this spot: field, getter, setter\n\n    public static void main(String[] args)\n    {\n        Elevator e = new Elevator();\n        e.setHeightInches(24.0);\n        System.out.println(e.getHeightInches());\n    }\n}\n",[1089,2278,2279,2284,2288,2293,2297,2302,2306,2311,2316,2321,2325],{"__ignoreMap":1099},[1103,2280,2281],{"class":1105,"line":1106},[1103,2282,2283],{},"public class Elevator\n",[1103,2285,2286],{"class":1105,"line":1112},[1103,2287,1115],{},[1103,2289,2290],{"class":1105,"line":1118},[1103,2291,2292],{},"    \u002F\u002F ⟵ reorder the fragments below into this spot: field, getter, setter\n",[1103,2294,2295],{"class":1105,"line":1124},[1103,2296,1128],{"emptyLinePlaceholder":1127},[1103,2298,2299],{"class":1105,"line":1131},[1103,2300,2301],{},"    public static void main(String[] args)\n",[1103,2303,2304],{"class":1105,"line":1137},[1103,2305,1140],{},[1103,2307,2308],{"class":1105,"line":1143},[1103,2309,2310],{},"        Elevator e = new Elevator();\n",[1103,2312,2313],{"class":1105,"line":1149},[1103,2314,2315],{},"        e.setHeightInches(24.0);\n",[1103,2317,2318],{"class":1105,"line":1155},[1103,2319,2320],{},"        System.out.println(e.getHeightInches());\n",[1103,2322,2323],{"class":1105,"line":1477},[1103,2324,1152],{},[1103,2326,2327],{"class":1105,"line":1483},[1103,2328,1158],{},[1085,2330,2331],{},"Reorder the fragments below:",[1383,2333,2334,2340,2346,2352,2358,2364,2370,2376,2381],{},[1386,2335,2336,2337],{},"a. ",[1089,2338,2339],{},"    {",[1386,2341,2342,2343],{},"b. ",[1089,2344,2345],{},"    private double heightInches;",[1386,2347,2348,2349],{},"c. ",[1089,2350,2351],{},"        heightInches = newHeight;",[1386,2353,2354,2355],{},"d. ",[1089,2356,2357],{},"    public double getHeightInches()",[1386,2359,2360,2361],{},"e. ",[1089,2362,2363],{},"    }",[1386,2365,2366,2367],{},"f. ",[1089,2368,2369],{},"        return heightInches;",[1386,2371,2372,2373],{},"g. ",[1089,2374,2375],{},"    public void setHeightInches(double newHeight)",[1386,2377,2378,2379],{},"h. ",[1089,2380,2363],{},[1386,2382,2383,2384],{},"i. ",[1089,2385,2339],{},[1085,2387,2388,2390],{},[1171,2389,2199],{}," b, d, a, f, h, g, i, c, e",[1085,2392,2393,2396],{},[1171,2394,2395],{},"Interchangeable:"," (a, i) (e, h)",[1094,2398,2400],{"className":1096,"code":2399,"language":1098,"meta":1099,"style":1099},"public class Elevator\n{\n    private double heightInches;\n\n    public double getHeightInches()\n    {\n        return heightInches;\n    }\n\n    public void setHeightInches(double newHeight)\n    {\n        heightInches = newHeight;\n    }\n\n    public static void main(String[] args)\n    {\n        Elevator e = new Elevator();\n        e.setHeightInches(24.0);\n        System.out.println(e.getHeightInches());\n    }\n}\n",[1089,2401,2402,2406,2410,2415,2419,2424,2428,2433,2437,2441,2446,2450,2455,2459,2463,2467,2471,2475,2479,2483,2487],{"__ignoreMap":1099},[1103,2403,2404],{"class":1105,"line":1106},[1103,2405,2283],{},[1103,2407,2408],{"class":1105,"line":1112},[1103,2409,1115],{},[1103,2411,2412],{"class":1105,"line":1118},[1103,2413,2414],{},"    private double heightInches;\n",[1103,2416,2417],{"class":1105,"line":1124},[1103,2418,1128],{"emptyLinePlaceholder":1127},[1103,2420,2421],{"class":1105,"line":1131},[1103,2422,2423],{},"    public double getHeightInches()\n",[1103,2425,2426],{"class":1105,"line":1137},[1103,2427,1140],{},[1103,2429,2430],{"class":1105,"line":1143},[1103,2431,2432],{},"        return heightInches;\n",[1103,2434,2435],{"class":1105,"line":1149},[1103,2436,1152],{},[1103,2438,2439],{"class":1105,"line":1155},[1103,2440,1128],{"emptyLinePlaceholder":1127},[1103,2442,2443],{"class":1105,"line":1477},[1103,2444,2445],{},"    public void setHeightInches(double newHeight)\n",[1103,2447,2448],{"class":1105,"line":1483},[1103,2449,1140],{},[1103,2451,2452],{"class":1105,"line":1489},[1103,2453,2454],{},"        heightInches = newHeight;\n",[1103,2456,2457],{"class":1105,"line":1495},[1103,2458,1152],{},[1103,2460,2461],{"class":1105,"line":1903},[1103,2462,1128],{"emptyLinePlaceholder":1127},[1103,2464,2465],{"class":1105,"line":1908},[1103,2466,2301],{},[1103,2468,2469],{"class":1105,"line":1914},[1103,2470,1140],{},[1103,2472,2473],{"class":1105,"line":1919},[1103,2474,2310],{},[1103,2476,2477],{"class":1105,"line":1925},[1103,2478,2315],{},[1103,2480,2481],{"class":1105,"line":1931},[1103,2482,2320],{},[1103,2484,2485],{"class":1105,"line":1937},[1103,2486,1152],{},[1103,2488,2489],{"class":1105,"line":1943},[1103,2490,1158],{},[1085,2492,2493,2496,2497,2499,2500,2503,2504,2507,2508,2507,2511,2507,2514,2517,2518,2520,2521,2507,2524,2507,2527,2507,2530,2533,2534,2536,2537,2171,2539,2541,2542,2545,2546,2171,2548,2541,2550,2553],{},[1171,2494,2495],{},"Why this order:"," With the class declaration, its braces, and the complete, already-written ",[1089,2498,2262],{}," held fixed as scaffold, only the field, getter, and setter are left to place. The field (",[1089,2501,2502],{},"b",") is declared first, then the getter (",[1089,2505,2506],{},"d",", ",[1089,2509,2510],{},"a",[1089,2512,2513],{},"f",[1089,2515,2516],{},"h"," — signature, opening brace, ",[1089,2519,2174],{}," statement, closing brace), followed by the setter (",[1089,2522,2523],{},"g",[1089,2525,2526],{},"i",[1089,2528,2529],{},"c",[1089,2531,2532],{},"e",") in that same signature\u002Fbrace\u002Fstatement\u002Fbrace shape, matching this lesson's getter-then-setter presentation — the getter and setter are exercised together in ",[1089,2535,2262],{},", rather than just one in isolation. Note that ",[1089,2538,2510],{},[1089,2540,2526],{}," (both a bare four-space ",[1089,2543,2544],{},"{",") are textually identical, as are ",[1089,2547,2532],{},[1089,2549,2516],{},[1089,2551,2552],{},"}",") — one pair belongs to the getter and the other to the setter, so it doesn't matter which physical copy lands in which slot as long as each method gets one opening and one closing brace.",[1080,2555,2557],{"id":2556},"coding","Coding",[1085,2559,2560,2563],{},[1171,2561,2562],{},"Mode:"," full-program",[1085,2565,2566,2568,2569,2571,2572,2574,2575,2578],{},[1171,2567,2255],{}," Write the class ",[1089,2570,1614],{}," with two ",[1089,2573,1168],{}," instance variables (its speed in rpm and whether it is\nspinning). A new shooter starts stopped at ",[1089,2576,2577],{},"0"," rpm. The methods:",[1383,2580,2581,2600,2609,2619],{},[1386,2582,2583,2586,2587,2589,2590,2596,2597,2599],{},[1089,2584,2585],{},"spinUp(int targetRpm)"," sets the rpm to ",[1089,2588,1793],{},", but ",[1171,2591,2592,2593],{},"never above ",[1089,2594,2595],{},"6000"," (a higher target is\nclamped to ",[1089,2598,2595],{},"), and marks the shooter as spinning.",[1386,2601,2602,2605,2606,2608],{},[1089,2603,2604],{},"stop()"," sets the rpm back to ",[1089,2607,2577],{}," and marks it as not spinning.",[1386,2610,2611,2614,2615,2618],{},[1089,2612,2613],{},"getRpm()"," returns the rpm, and ",[1089,2616,2617],{},"isSpinning()"," returns whether it is spinning (getters, as in the lesson).",[1386,2620,2621,2624,2625,2628,2629,2631],{},[1089,2622,2623],{},"toString()"," returns text in the form ",[1089,2626,2627],{},"Shooter[rpm=3000, spinning=true]",", so that\n",[1089,2630,2072],{}," prints that.",[1085,2633,2634,2635,2637,2638,1216,2641,2644],{},"The fixed ",[1089,2636,2262],{}," reads a number of commands (",[1089,2639,2640],{},"spinUp \u003Crpm>",[1089,2642,2643],{},"stop","), prints the shooter after each\none, and finishes with a line built from the two getters.",[1085,2646,2647,2648,2651,2652,2654,2655,2657,2658,2661,2662,1182],{},"For example, the commands ",[1089,2649,2650],{},"spinUp 3000"," then ",[1089,2653,2643],{}," print ",[1089,2656,2627],{},", then\n",[1089,2659,2660],{},"Shooter[rpm=0, spinning=false]",", then ",[1089,2663,2664],{},"rpm=0 spinning=false",[1085,2666,2667],{},[1171,2668,2669],{},"Starter:",[1094,2671,2673],{"className":1096,"code":2672,"language":1098,"meta":1099,"style":1099},"import java.util.*;\n\npublic class Main\n{\n    \u002F\u002F Don't change main\n    public static void main(String[] args)\n    {\n        Scanner in = new Scanner(System.in);\n        int commandCount = in.nextInt();\n        Shooter shooter = new Shooter();\n        for (int i = 0; i \u003C commandCount; i++)\n        {\n            String command = in.next();\n            if (command.equals(\"spinUp\"))\n            {\n                shooter.spinUp(in.nextInt());\n            }\n            else\n            {\n                shooter.stop();\n            }\n            System.out.println(shooter);\n        }\n        System.out.println(\"rpm=\" + shooter.getRpm() + \" spinning=\" + shooter.isSpinning());\n    }\n}\n\nclass Shooter\n{\n    \u002F\u002F TODO: private instance variables and a constructor (starts stopped, rpm 0)\n\n    \u002F\u002F spinUp(int targetRpm): sets the rpm to targetRpm, but never above 6000; marks it spinning\n    \u002F\u002F stop(): sets the rpm to 0 and marks it not spinning\n    \u002F\u002F getRpm(), isSpinning(): getters\n    \u002F\u002F toString(): returns text like \"Shooter[rpm=3000, spinning=true]\"\n}\n",[1089,2674,2675,2680,2684,2689,2693,2698,2702,2706,2711,2716,2721,2726,2730,2735,2740,2745,2750,2755,2760,2764,2769,2773,2778,2782,2787,2791,2795,2799,2804,2808,2813,2817,2823,2829,2835,2841],{"__ignoreMap":1099},[1103,2676,2677],{"class":1105,"line":1106},[1103,2678,2679],{},"import java.util.*;\n",[1103,2681,2682],{"class":1105,"line":1112},[1103,2683,1128],{"emptyLinePlaceholder":1127},[1103,2685,2686],{"class":1105,"line":1118},[1103,2687,2688],{},"public class Main\n",[1103,2690,2691],{"class":1105,"line":1124},[1103,2692,1115],{},[1103,2694,2695],{"class":1105,"line":1131},[1103,2696,2697],{},"    \u002F\u002F Don't change main\n",[1103,2699,2700],{"class":1105,"line":1137},[1103,2701,2301],{},[1103,2703,2704],{"class":1105,"line":1143},[1103,2705,1140],{},[1103,2707,2708],{"class":1105,"line":1149},[1103,2709,2710],{},"        Scanner in = new Scanner(System.in);\n",[1103,2712,2713],{"class":1105,"line":1155},[1103,2714,2715],{},"        int commandCount = in.nextInt();\n",[1103,2717,2718],{"class":1105,"line":1477},[1103,2719,2720],{},"        Shooter shooter = new Shooter();\n",[1103,2722,2723],{"class":1105,"line":1483},[1103,2724,2725],{},"        for (int i = 0; i \u003C commandCount; i++)\n",[1103,2727,2728],{"class":1105,"line":1489},[1103,2729,1928],{},[1103,2731,2732],{"class":1105,"line":1495},[1103,2733,2734],{},"            String command = in.next();\n",[1103,2736,2737],{"class":1105,"line":1903},[1103,2738,2739],{},"            if (command.equals(\"spinUp\"))\n",[1103,2741,2742],{"class":1105,"line":1908},[1103,2743,2744],{},"            {\n",[1103,2746,2747],{"class":1105,"line":1914},[1103,2748,2749],{},"                shooter.spinUp(in.nextInt());\n",[1103,2751,2752],{"class":1105,"line":1919},[1103,2753,2754],{},"            }\n",[1103,2756,2757],{"class":1105,"line":1925},[1103,2758,2759],{},"            else\n",[1103,2761,2762],{"class":1105,"line":1931},[1103,2763,2744],{},[1103,2765,2766],{"class":1105,"line":1937},[1103,2767,2768],{},"                shooter.stop();\n",[1103,2770,2771],{"class":1105,"line":1943},[1103,2772,2754],{},[1103,2774,2775],{"class":1105,"line":1949},[1103,2776,2777],{},"            System.out.println(shooter);\n",[1103,2779,2780],{"class":1105,"line":1954},[1103,2781,1940],{},[1103,2783,2784],{"class":1105,"line":1960},[1103,2785,2786],{},"        System.out.println(\"rpm=\" + shooter.getRpm() + \" spinning=\" + shooter.isSpinning());\n",[1103,2788,2789],{"class":1105,"line":1965},[1103,2790,1152],{},[1103,2792,2793],{"class":1105,"line":1970},[1103,2794,1158],{},[1103,2796,2797],{"class":1105,"line":1975},[1103,2798,1128],{"emptyLinePlaceholder":1127},[1103,2800,2801],{"class":1105,"line":1981},[1103,2802,2803],{},"class Shooter\n",[1103,2805,2806],{"class":1105,"line":1986},[1103,2807,1115],{},[1103,2809,2810],{"class":1105,"line":1992},[1103,2811,2812],{},"    \u002F\u002F TODO: private instance variables and a constructor (starts stopped, rpm 0)\n",[1103,2814,2815],{"class":1105,"line":1997},[1103,2816,1128],{"emptyLinePlaceholder":1127},[1103,2818,2820],{"class":1105,"line":2819},32,[1103,2821,2822],{},"    \u002F\u002F spinUp(int targetRpm): sets the rpm to targetRpm, but never above 6000; marks it spinning\n",[1103,2824,2826],{"class":1105,"line":2825},33,[1103,2827,2828],{},"    \u002F\u002F stop(): sets the rpm to 0 and marks it not spinning\n",[1103,2830,2832],{"class":1105,"line":2831},34,[1103,2833,2834],{},"    \u002F\u002F getRpm(), isSpinning(): getters\n",[1103,2836,2838],{"class":1105,"line":2837},35,[1103,2839,2840],{},"    \u002F\u002F toString(): returns text like \"Shooter[rpm=3000, spinning=true]\"\n",[1103,2842,2844],{"class":1105,"line":2843},36,[1103,2845,1158],{},[1085,2847,2848],{},[1171,2849,2850],{},"Scenario 1 (visible):",[1085,2852,2853],{},[1171,2854,2855],{},"Input:",[1094,2857,2860],{"className":2858,"code":2859,"language":2034,"meta":1099},[2032],"2\nspinUp 3000\nstop\n",[1089,2861,2859],{"__ignoreMap":1099},[1085,2863,2864],{},[1171,2865,2866],{},"Expected output:",[1094,2868,2871],{"className":2869,"code":2870,"language":2034,"meta":1099},[2032],"Shooter[rpm=3000, spinning=true]\nShooter[rpm=0, spinning=false]\nrpm=0 spinning=false\n",[1089,2872,2870],{"__ignoreMap":1099},[1085,2874,2875],{},[1171,2876,2877],{},"Scenario 2 (visible):",[1085,2879,2880],{},[1171,2881,2855],{},[1094,2883,2886],{"className":2884,"code":2885,"language":2034,"meta":1099},[2032],"1\nspinUp 4500\n",[1089,2887,2885],{"__ignoreMap":1099},[1085,2889,2890],{},[1171,2891,2866],{},[1094,2893,2896],{"className":2894,"code":2895,"language":2034,"meta":1099},[2032],"Shooter[rpm=4500, spinning=true]\nrpm=4500 spinning=true\n",[1089,2897,2895],{"__ignoreMap":1099},[1085,2899,2900],{},[1171,2901,2902],{},"Scenario 3 (visible):",[1085,2904,2905],{},[1171,2906,2855],{},[1094,2908,2911],{"className":2909,"code":2910,"language":2034,"meta":1099},[2032],"0\n",[1089,2912,2910],{"__ignoreMap":1099},[1085,2914,2915],{},[1171,2916,2866],{},[1094,2918,2921],{"className":2919,"code":2920,"language":2034,"meta":1099},[2032],"rpm=0 spinning=false\n",[1089,2922,2920],{"__ignoreMap":1099},[1085,2924,2925],{},[1171,2926,2927],{},"Scenario 4 (hidden):",[1085,2929,2930],{},[1171,2931,2855],{},[1094,2933,2936],{"className":2934,"code":2935,"language":2034,"meta":1099},[2032],"2\nspinUp 9000\nspinUp 2500\n",[1089,2937,2935],{"__ignoreMap":1099},[1085,2939,2940],{},[1171,2941,2866],{},[1094,2943,2946],{"className":2944,"code":2945,"language":2034,"meta":1099},[2032],"Shooter[rpm=6000, spinning=true]\nShooter[rpm=2500, spinning=true]\nrpm=2500 spinning=true\n",[1089,2947,2945],{"__ignoreMap":1099},[1085,2949,2950],{},[1171,2951,2952],{},"Scenario 5 (hidden):",[1085,2954,2955],{},[1171,2956,2855],{},[1094,2958,2961],{"className":2959,"code":2960,"language":2034,"meta":1099},[2032],"3\nspinUp 6000\nstop\nspinUp 100\n",[1089,2962,2960],{"__ignoreMap":1099},[1085,2964,2965],{},[1171,2966,2866],{},[1094,2968,2971],{"className":2969,"code":2970,"language":2034,"meta":1099},[2032],"Shooter[rpm=6000, spinning=true]\nShooter[rpm=0, spinning=false]\nShooter[rpm=100, spinning=true]\nrpm=100 spinning=true\n",[1089,2972,2970],{"__ignoreMap":1099},[1085,2974,2975],{},[1171,2976,2977],{},"Solution:",[1094,2979,2981],{"className":1096,"code":2980,"language":1098,"meta":1099,"style":1099},"import java.util.*;\n\npublic class Main\n{\n    \u002F\u002F Don't change main\n    public static void main(String[] args)\n    {\n        Scanner in = new Scanner(System.in);\n        int commandCount = in.nextInt();\n        Shooter shooter = new Shooter();\n        for (int i = 0; i \u003C commandCount; i++)\n        {\n            String command = in.next();\n            if (command.equals(\"spinUp\"))\n            {\n                shooter.spinUp(in.nextInt());\n            }\n            else\n            {\n                shooter.stop();\n            }\n            System.out.println(shooter);\n        }\n        System.out.println(\"rpm=\" + shooter.getRpm() + \" spinning=\" + shooter.isSpinning());\n    }\n}\n\nclass Shooter\n{\n    private int rpm;\n    private boolean isSpinning;\n\n    public Shooter()\n    {\n        rpm = 0;\n        isSpinning = false;\n    }\n\n    public void spinUp(int targetRpm)\n    {\n        if (targetRpm > 6000)\n        {\n            rpm = 6000;\n        }\n        else\n        {\n            rpm = targetRpm;\n        }\n        isSpinning = true;\n    }\n\n    public void stop()\n    {\n        rpm = 0;\n        isSpinning = false;\n    }\n\n    public int getRpm()\n    {\n        return rpm;\n    }\n\n    public boolean isSpinning()\n    {\n        return isSpinning;\n    }\n\n    public String toString()\n    {\n        return \"Shooter[rpm=\" + rpm + \", spinning=\" + isSpinning + \"]\";\n    }\n}\n",[1089,2982,2983,2987,2991,2995,2999,3003,3007,3011,3015,3019,3023,3027,3031,3035,3039,3043,3047,3051,3055,3059,3063,3067,3071,3075,3079,3083,3087,3091,3095,3099,3104,3109,3113,3117,3121,3126,3131,3136,3141,3147,3152,3158,3163,3169,3174,3179,3184,3190,3195,3201,3206,3211,3217,3222,3227,3232,3237,3242,3248,3253,3259,3264,3269,3275,3280,3286,3291,3296,3301,3306,3312,3317],{"__ignoreMap":1099},[1103,2984,2985],{"class":1105,"line":1106},[1103,2986,2679],{},[1103,2988,2989],{"class":1105,"line":1112},[1103,2990,1128],{"emptyLinePlaceholder":1127},[1103,2992,2993],{"class":1105,"line":1118},[1103,2994,2688],{},[1103,2996,2997],{"class":1105,"line":1124},[1103,2998,1115],{},[1103,3000,3001],{"class":1105,"line":1131},[1103,3002,2697],{},[1103,3004,3005],{"class":1105,"line":1137},[1103,3006,2301],{},[1103,3008,3009],{"class":1105,"line":1143},[1103,3010,1140],{},[1103,3012,3013],{"class":1105,"line":1149},[1103,3014,2710],{},[1103,3016,3017],{"class":1105,"line":1155},[1103,3018,2715],{},[1103,3020,3021],{"class":1105,"line":1477},[1103,3022,2720],{},[1103,3024,3025],{"class":1105,"line":1483},[1103,3026,2725],{},[1103,3028,3029],{"class":1105,"line":1489},[1103,3030,1928],{},[1103,3032,3033],{"class":1105,"line":1495},[1103,3034,2734],{},[1103,3036,3037],{"class":1105,"line":1903},[1103,3038,2739],{},[1103,3040,3041],{"class":1105,"line":1908},[1103,3042,2744],{},[1103,3044,3045],{"class":1105,"line":1914},[1103,3046,2749],{},[1103,3048,3049],{"class":1105,"line":1919},[1103,3050,2754],{},[1103,3052,3053],{"class":1105,"line":1925},[1103,3054,2759],{},[1103,3056,3057],{"class":1105,"line":1931},[1103,3058,2744],{},[1103,3060,3061],{"class":1105,"line":1937},[1103,3062,2768],{},[1103,3064,3065],{"class":1105,"line":1943},[1103,3066,2754],{},[1103,3068,3069],{"class":1105,"line":1949},[1103,3070,2777],{},[1103,3072,3073],{"class":1105,"line":1954},[1103,3074,1940],{},[1103,3076,3077],{"class":1105,"line":1960},[1103,3078,2786],{},[1103,3080,3081],{"class":1105,"line":1965},[1103,3082,1152],{},[1103,3084,3085],{"class":1105,"line":1970},[1103,3086,1158],{},[1103,3088,3089],{"class":1105,"line":1975},[1103,3090,1128],{"emptyLinePlaceholder":1127},[1103,3092,3093],{"class":1105,"line":1981},[1103,3094,2803],{},[1103,3096,3097],{"class":1105,"line":1986},[1103,3098,1115],{},[1103,3100,3101],{"class":1105,"line":1992},[1103,3102,3103],{},"    private int rpm;\n",[1103,3105,3106],{"class":1105,"line":1997},[1103,3107,3108],{},"    private boolean isSpinning;\n",[1103,3110,3111],{"class":1105,"line":2819},[1103,3112,1128],{"emptyLinePlaceholder":1127},[1103,3114,3115],{"class":1105,"line":2825},[1103,3116,1650],{},[1103,3118,3119],{"class":1105,"line":2831},[1103,3120,1140],{},[1103,3122,3123],{"class":1105,"line":2837},[1103,3124,3125],{},"        rpm = 0;\n",[1103,3127,3128],{"class":1105,"line":2843},[1103,3129,3130],{},"        isSpinning = false;\n",[1103,3132,3134],{"class":1105,"line":3133},37,[1103,3135,1152],{},[1103,3137,3139],{"class":1105,"line":3138},38,[1103,3140,1128],{"emptyLinePlaceholder":1127},[1103,3142,3144],{"class":1105,"line":3143},39,[1103,3145,3146],{},"    public void spinUp(int targetRpm)\n",[1103,3148,3150],{"class":1105,"line":3149},40,[1103,3151,1140],{},[1103,3153,3155],{"class":1105,"line":3154},41,[1103,3156,3157],{},"        if (targetRpm > 6000)\n",[1103,3159,3161],{"class":1105,"line":3160},42,[1103,3162,1928],{},[1103,3164,3166],{"class":1105,"line":3165},43,[1103,3167,3168],{},"            rpm = 6000;\n",[1103,3170,3172],{"class":1105,"line":3171},44,[1103,3173,1940],{},[1103,3175,3177],{"class":1105,"line":3176},45,[1103,3178,1946],{},[1103,3180,3182],{"class":1105,"line":3181},46,[1103,3183,1928],{},[1103,3185,3187],{"class":1105,"line":3186},47,[1103,3188,3189],{},"            rpm = targetRpm;\n",[1103,3191,3193],{"class":1105,"line":3192},48,[1103,3194,1940],{},[1103,3196,3198],{"class":1105,"line":3197},49,[1103,3199,3200],{},"        isSpinning = true;\n",[1103,3202,3204],{"class":1105,"line":3203},50,[1103,3205,1152],{},[1103,3207,3209],{"class":1105,"line":3208},51,[1103,3210,1128],{"emptyLinePlaceholder":1127},[1103,3212,3214],{"class":1105,"line":3213},52,[1103,3215,3216],{},"    public void stop()\n",[1103,3218,3220],{"class":1105,"line":3219},53,[1103,3221,1140],{},[1103,3223,3225],{"class":1105,"line":3224},54,[1103,3226,3125],{},[1103,3228,3230],{"class":1105,"line":3229},55,[1103,3231,3130],{},[1103,3233,3235],{"class":1105,"line":3234},56,[1103,3236,1152],{},[1103,3238,3240],{"class":1105,"line":3239},57,[1103,3241,1128],{"emptyLinePlaceholder":1127},[1103,3243,3245],{"class":1105,"line":3244},58,[1103,3246,3247],{},"    public int getRpm()\n",[1103,3249,3251],{"class":1105,"line":3250},59,[1103,3252,1140],{},[1103,3254,3256],{"class":1105,"line":3255},60,[1103,3257,3258],{},"        return rpm;\n",[1103,3260,3262],{"class":1105,"line":3261},61,[1103,3263,1152],{},[1103,3265,3267],{"class":1105,"line":3266},62,[1103,3268,1128],{"emptyLinePlaceholder":1127},[1103,3270,3272],{"class":1105,"line":3271},63,[1103,3273,3274],{},"    public boolean isSpinning()\n",[1103,3276,3278],{"class":1105,"line":3277},64,[1103,3279,1140],{},[1103,3281,3283],{"class":1105,"line":3282},65,[1103,3284,3285],{},"        return isSpinning;\n",[1103,3287,3289],{"class":1105,"line":3288},66,[1103,3290,1152],{},[1103,3292,3294],{"class":1105,"line":3293},67,[1103,3295,1128],{"emptyLinePlaceholder":1127},[1103,3297,3299],{"class":1105,"line":3298},68,[1103,3300,1978],{},[1103,3302,3304],{"class":1105,"line":3303},69,[1103,3305,1140],{},[1103,3307,3309],{"class":1105,"line":3308},70,[1103,3310,3311],{},"        return \"Shooter[rpm=\" + rpm + \", spinning=\" + isSpinning + \"]\";\n",[1103,3313,3315],{"class":1105,"line":3314},71,[1103,3316,1152],{},[1103,3318,3320],{"class":1105,"line":3319},72,[1103,3321,1158],{},[1085,3323,3324,3326,3327,3330,3331,3333,3334,3337,3338,3340,3341,3343,3344,3346,3347,3349,3350,3353,3354,3356,3357,3359,3360,3363,3364,3366,3367,3369,3370,3373,3374,3377],{},[1171,3325,2205],{}," Three lesson ideas show up. ",[1089,3328,3329],{},"spinUp"," is the \"method that enforces a rule\" the lesson prefers over a bare\nsetter: the ",[1089,3332,2595],{}," cap lives in one place, which is why a target of ",[1089,3335,3336],{},"9000"," still prints ",[1089,3339,2595],{},". The two\ngetters are the only way ",[1089,3342,2262],{}," reads the private values; the ",[1089,3345,1211],{}," one is named ",[1089,3348,2617],{},", not\n",[1089,3351,3352],{},"getIsSpinning()",". And ",[1089,3355,2623],{}," is what ",[1089,3358,2072],{}," calls automatically; without\nit, the output is the default ",[1089,3361,3362],{},"Shooter@1a2b3c","-style text. A target of exactly ",[1089,3365,2595],{}," stays ",[1089,3368,2595],{},", and\n",[1089,3371,3372],{},">"," rather than ",[1089,3375,3376],{},">="," makes no difference there, so the boundary is safe either way.",[1580,3379,1582],{},{"title":1099,"searchDepth":1112,"depth":1112,"links":3381},[3382,3383,3384],{"id":2110,"depth":1112,"text":2111},{"id":2249,"depth":1112,"text":2250},{"id":2556,"depth":1112,"text":2557},{"outlineRef":1595,"pairsWith":2097,"status":3386},"new — authored exercises (Multiple Choice + Micro-Parsons + Coding)",{"title":872,"description":1099},"qYHufhQAIC7UI07yqer8-R8aa0bS04aaAxgjpDz974o",1792718164822]