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