[{"data":1,"prerenderedAt":1882},["ShallowReactive",2],{"item-lessons-light-ch04-using-objects-and-calling-methods":3,"item-examples-light-ch04-using-objects-and-calling-methods":436,"item-exercises-light-ch04-using-objects-and-calling-methods":597,"item-lesson-full-ch04-using-objects-and-calling-methods-4.1":758,"item-example-full-ch04-using-objects-and-calling-methods-4.1":984,"item-exercise-full-ch04-using-objects-and-calling-methods-4.1":1542},[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":46,"body":760,"description":807,"extension":977,"meta":978,"navigation":981,"path":45,"seo":982,"stem":47,"__hash__":983},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters.md",{"type":761,"value":762,"toc":969},"minimark",[763,767,772,790,794,801,817,827,836,855,859,866,870,888,910,914,936,940,954,965],[764,765,46],"h1",{"id":766},"methods-signatures-parameters",[768,769,771],"h2",{"id":770},"what-a-method-is","What a Method Is",[773,774,775,776,780,781,785,786,789],"p",{},"A ",[777,778,779],"strong",{},"method"," is a named block of code that runs when you call it. ",[782,783,784],"code",{},"System.out.println(...)"," is a method call — you've been calling methods since Lesson 1.2 without needing to know how ",[782,787,788],{},"println"," is implemented internally. That's the whole benefit: you use a method by its name and what it does, not by reading its insides.",[768,791,793],{"id":792},"signature-parameters-arguments","Signature, Parameters, Arguments",[773,795,796,797,800],{},"A method's ",[777,798,799],{},"signature"," is its name plus its parameter types — what you need to know to call it correctly.",[802,803,808],"pre",{"className":804,"code":805,"language":806,"meta":807,"style":807},"language-java shiki shiki-themes github-light github-dark","public void rampTo(double targetSpeed) { ... }\n","java","",[782,809,810],{"__ignoreMap":807},[811,812,815],"span",{"class":813,"line":814},"line",1,[811,816,805],{},[773,818,819,822,823,826],{},[782,820,821],{},"targetSpeed"," here is a ",[777,824,825],{},"parameter"," — a variable declared in the method's header, usable inside the method's body. When you actually call the method:",[802,828,830],{"className":804,"code":829,"language":806,"meta":807,"style":807},"drivetrain.rampTo(0.8);\n",[782,831,832],{"__ignoreMap":807},[811,833,834],{"class":813,"line":814},[811,835,829],{},[773,837,838,841,842,845,846,850,851,854],{},[782,839,840],{},"0.8"," is the ",[777,843,844],{},"argument"," — the real value being passed in. \"Parameter\" and \"argument\" describe the same slot from two different sides: the parameter is the variable ",[847,848,849],"em",{},"in the method","; the argument is the value ",[847,852,853],{},"at the call site",".",[768,856,858],{"id":857},"call-by-value","Call by Value",[773,860,861,862,865],{},"Java copies the argument's value into the parameter — ",[777,863,864],{},"call by value",". If the method changes its own parameter internally, the original value the caller passed in is unaffected; only a copy went in.",[768,867,869],{"id":868},"overloading","Overloading",[773,871,872,873,875,876,879,880,883,884,887],{},"Two methods can share the same name if their parameter lists differ in number or type — this is ",[777,874,868],{},". ",[782,877,878],{},"System.out.println()"," is a real example: there's a version for no arguments, one for a ",[782,881,882],{},"String",", one for an ",[782,885,886],{},"int",", and more — Java picks the right one based on what you pass in.",[802,889,891],{"className":804,"code":890,"language":806,"meta":807,"style":807},"void println()          \u002F\u002F no parameters\nvoid println(String x)  \u002F\u002F takes a String\nvoid println(int x)     \u002F\u002F takes an int\n",[782,892,893,898,904],{"__ignoreMap":807},[811,894,895],{"class":813,"line":814},[811,896,897],{},"void println()          \u002F\u002F no parameters\n",[811,899,901],{"class":813,"line":900},2,[811,902,903],{},"void println(String x)  \u002F\u002F takes a String\n",[811,905,907],{"class":813,"line":906},3,[811,908,909],{},"void println(int x)     \u002F\u002F takes an int\n",[768,911,913],{"id":912},"common-pitfalls","Common Pitfalls",[915,916,917,924,930],"ul",{},[918,919,920,923],"li",{},[777,921,922],{},"Mixing up \"parameter\" and \"argument.\""," They're often used loosely as if interchangeable, but precisely: parameter = the variable in the method header, argument = the value at the call site.",[918,925,926,929],{},[777,927,928],{},"Assuming a method can change the caller's original value."," Call by value means the method only ever gets a copy — reassigning a parameter inside the method never affects the variable the caller passed in.",[918,931,932,935],{},[777,933,934],{},"Wrong argument count or type."," The compiler checks a call's arguments against the method's signature — mismatches (wrong count, wrong type, wrong order) won't compile.",[768,937,939],{"id":938},"key-takeaways","Key Takeaways",[915,941,942,945,948,951],{},[918,943,944],{},"A method's signature is its name plus its parameter types.",[918,946,947],{},"A parameter is a variable in the method's own header; an argument is the actual value passed in at the call site.",[918,949,950],{},"Java uses call by value — a method receives a copy of each argument, not the original.",[918,952,953],{},"Overloading means multiple methods share a name but differ in their parameter lists; Java picks the matching one based on the call.",[773,955,956,957,960,961,964],{},"Derived from ",[782,958,959],{},"csawesome-2026",": ",[782,962,963],{},"unit-1-using-objects-and-methods\u002F1.09-method-signatures.md"," (CSA 1.9)",[966,967,968],"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":807,"searchDepth":900,"depth":900,"links":970},[971,972,973,974,975,976],{"id":770,"depth":900,"text":771},{"id":792,"depth":900,"text":793},{"id":857,"depth":900,"text":858},{"id":868,"depth":900,"text":869},{"id":912,"depth":900,"text":913},{"id":938,"depth":900,"text":939},"md",{"outlineRef":979,"status":980},"4.1 — Methods, Signatures and Parameters (CSA 1.9)","new — authored lesson (fuller depth than the teaser slide)",true,{"title":46,"description":807},"b19oBEt6uwnI_2lPtLm88WevR2lsAcnrUJ6g6BadwuY",{"id":985,"title":475,"body":986,"description":807,"extension":977,"meta":1537,"navigation":981,"path":474,"seo":1540,"stem":476,"__hash__":1541},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters.md",{"type":761,"value":987,"toc":1527},[988,991,995,998,1002,1005,1031,1035,1040,1066,1078,1082,1156,1190,1194,1205,1280,1283,1291,1301,1305,1314,1337,1344,1348,1461,1486,1490,1525],[764,989,475],{"id":990},"methods-signatures-parameters-worked-example",[768,992,994],{"id":993},"problem","Problem",[773,996,997],{},"Write a static method that announces a requested drivetrain speed, then add a second, overloaded version that also announces which side of the drivetrain it's for. Along the way, confirm that changing a parameter inside a method never changes the value the caller passed in.",[768,999,1001],{"id":1000},"step-1-plan-it-first","Step 1: Plan It First",[773,1003,1004],{},"In plain English:",[1006,1007,1008,1011,1018,1025,1028],"ol",{},[918,1009,1010],{},"Write a method that takes a requested speed and prints a message about it.",[918,1012,1013,1014,1017],{},"Call that method from ",[782,1015,1016],{},"main"," with a real speed value.",[918,1019,1020,1021,1024],{},"Prove the method only got a ",[847,1022,1023],{},"copy"," of that value.",[918,1026,1027],{},"Write a second version of the same method name that also takes which side it's for.",[918,1029,1030],{},"Call both versions and let Java pick the right one.",[768,1032,1034],{"id":1033},"step-2-write-the-methods-signature","Step 2: Write the Method's Signature",[773,1036,796,1037,1039],{},[777,1038,799],{}," is its name plus its parameter types. Here's the header for the first version, with no body yet:",[802,1041,1043],{"className":804,"code":1042,"language":806,"meta":807,"style":807},"public static void announceSpeed(double requestedSpeed)\n{\n\n}\n",[782,1044,1045,1050,1055,1060],{"__ignoreMap":807},[811,1046,1047],{"class":813,"line":814},[811,1048,1049],{},"public static void announceSpeed(double requestedSpeed)\n",[811,1051,1052],{"class":813,"line":900},[811,1053,1054],{},"{\n",[811,1056,1057],{"class":813,"line":906},[811,1058,1059],{"emptyLinePlaceholder":981},"\n",[811,1061,1063],{"class":813,"line":1062},4,[811,1064,1065],{},"}\n",[773,1067,1068,1071,1072,1074,1075,854],{},[782,1069,1070],{},"requestedSpeed"," is a ",[777,1073,825],{}," — a variable declared in the method's own header, usable inside the method's body. The signature here is ",[782,1076,1077],{},"announceSpeed(double)",[768,1079,1081],{"id":1080},"step-3-fill-in-the-body-and-call-it","Step 3: Fill In the Body and Call It",[802,1083,1085],{"className":804,"code":1084,"language":806,"meta":807,"style":807},"public class DriveAnnouncer\n{\n    public static void main(String[] args)\n    {\n        double commandedSpeed = 0.75;\n        announceSpeed(commandedSpeed);\n    }\n\n    public static void announceSpeed(double requestedSpeed)\n    {\n        System.out.println(\"Setting drivetrain speed to \" + requestedSpeed);\n    }\n}\n",[782,1086,1087,1092,1096,1101,1106,1112,1118,1124,1129,1135,1140,1146,1151],{"__ignoreMap":807},[811,1088,1089],{"class":813,"line":814},[811,1090,1091],{},"public class DriveAnnouncer\n",[811,1093,1094],{"class":813,"line":900},[811,1095,1054],{},[811,1097,1098],{"class":813,"line":906},[811,1099,1100],{},"    public static void main(String[] args)\n",[811,1102,1103],{"class":813,"line":1062},[811,1104,1105],{},"    {\n",[811,1107,1109],{"class":813,"line":1108},5,[811,1110,1111],{},"        double commandedSpeed = 0.75;\n",[811,1113,1115],{"class":813,"line":1114},6,[811,1116,1117],{},"        announceSpeed(commandedSpeed);\n",[811,1119,1121],{"class":813,"line":1120},7,[811,1122,1123],{},"    }\n",[811,1125,1127],{"class":813,"line":1126},8,[811,1128,1059],{"emptyLinePlaceholder":981},[811,1130,1132],{"class":813,"line":1131},9,[811,1133,1134],{},"    public static void announceSpeed(double requestedSpeed)\n",[811,1136,1138],{"class":813,"line":1137},10,[811,1139,1105],{},[811,1141,1143],{"class":813,"line":1142},11,[811,1144,1145],{},"        System.out.println(\"Setting drivetrain speed to \" + requestedSpeed);\n",[811,1147,1149],{"class":813,"line":1148},12,[811,1150,1123],{},[811,1152,1154],{"class":813,"line":1153},13,[811,1155,1065],{},[773,1157,1158,1161,1162,1165,1166,1169,1170,841,1172,1174,1175,1177,1178,1181,1182,1184,1185,1187,1188,854],{},[782,1159,1160],{},"commandedSpeed"," is the caller's variable; ",[782,1163,1164],{},"0.75"," is the value stored in it. When ",[782,1167,1168],{},"announceSpeed(commandedSpeed)"," runs, ",[782,1171,1164],{},[777,1173,844],{}," — the real value being passed in. Parameter and argument name the same slot from two different sides: ",[782,1176,1070],{}," is the variable ",[847,1179,1180],{},"inside"," the method, ",[782,1183,1160],{}," (holding ",[782,1186,1164],{},") is the value ",[847,1189,853],{},[768,1191,1193],{"id":1192},"step-4-confirm-call-by-value","Step 4: Confirm Call by Value",[773,1195,861,1196,1198,1199,1201,1202,1204],{},[777,1197,864],{},". To see this, have the method reassign its own parameter, then check ",[782,1200,1160],{}," back in ",[782,1203,1016],{}," afterward:",[802,1206,1208],{"className":804,"code":1207,"language":806,"meta":807,"style":807},"public class DriveAnnouncer\n{\n    public static void main(String[] args)\n    {\n        double commandedSpeed = 0.75;\n        announceSpeed(commandedSpeed);\n        System.out.println(\"Back in main, commandedSpeed is still: \" + commandedSpeed);\n    }\n\n    public static void announceSpeed(double requestedSpeed)\n    {\n        System.out.println(\"Setting drivetrain speed to \" + requestedSpeed);\n        requestedSpeed = 0.0;\n        System.out.println(\"Inside the method, requestedSpeed is now: \" + requestedSpeed);\n    }\n}\n",[782,1209,1210,1214,1218,1222,1226,1230,1234,1239,1243,1247,1251,1255,1259,1264,1270,1275],{"__ignoreMap":807},[811,1211,1212],{"class":813,"line":814},[811,1213,1091],{},[811,1215,1216],{"class":813,"line":900},[811,1217,1054],{},[811,1219,1220],{"class":813,"line":906},[811,1221,1100],{},[811,1223,1224],{"class":813,"line":1062},[811,1225,1105],{},[811,1227,1228],{"class":813,"line":1108},[811,1229,1111],{},[811,1231,1232],{"class":813,"line":1114},[811,1233,1117],{},[811,1235,1236],{"class":813,"line":1120},[811,1237,1238],{},"        System.out.println(\"Back in main, commandedSpeed is still: \" + commandedSpeed);\n",[811,1240,1241],{"class":813,"line":1126},[811,1242,1123],{},[811,1244,1245],{"class":813,"line":1131},[811,1246,1059],{"emptyLinePlaceholder":981},[811,1248,1249],{"class":813,"line":1137},[811,1250,1134],{},[811,1252,1253],{"class":813,"line":1142},[811,1254,1105],{},[811,1256,1257],{"class":813,"line":1148},[811,1258,1145],{},[811,1260,1261],{"class":813,"line":1153},[811,1262,1263],{},"        requestedSpeed = 0.0;\n",[811,1265,1267],{"class":813,"line":1266},14,[811,1268,1269],{},"        System.out.println(\"Inside the method, requestedSpeed is now: \" + requestedSpeed);\n",[811,1271,1273],{"class":813,"line":1272},15,[811,1274,1123],{},[811,1276,1278],{"class":813,"line":1277},16,[811,1279,1065],{},[773,1281,1282],{},"This prints:",[802,1284,1289],{"className":1285,"code":1287,"language":1288},[1286],"language-text","Setting drivetrain speed to 0.75\nInside the method, requestedSpeed is now: 0.0\nBack in main, commandedSpeed is still: 0.75\n","text",[782,1290,1287],{"__ignoreMap":807},[773,1292,1293,1294,1296,1297,1201,1299,854],{},"Only a copy went into ",[782,1295,1070],{},". Reassigning it inside the method never touches ",[782,1298,1160],{},[782,1300,1016],{},[768,1302,1304],{"id":1303},"step-5-add-an-overload","Step 5: Add an Overload",[773,1306,872,1307,1309,1310,1313],{},[777,1308,868],{},". Add a second ",[782,1311,1312],{},"announceSpeed"," that also takes which side of the drivetrain it's for:",[802,1315,1317],{"className":804,"code":1316,"language":806,"meta":807,"style":807},"public static void announceSpeed(String side, double requestedSpeed)\n{\n    System.out.println(\"Setting \" + side + \" side speed to \" + requestedSpeed);\n}\n",[782,1318,1319,1324,1328,1333],{"__ignoreMap":807},[811,1320,1321],{"class":813,"line":814},[811,1322,1323],{},"public static void announceSpeed(String side, double requestedSpeed)\n",[811,1325,1326],{"class":813,"line":900},[811,1327,1054],{},[811,1329,1330],{"class":813,"line":906},[811,1331,1332],{},"    System.out.println(\"Setting \" + side + \" side speed to \" + requestedSpeed);\n",[811,1334,1335],{"class":813,"line":1062},[811,1336,1065],{},[773,1338,1339,1340,1343],{},"This is a different signature — ",[782,1341,1342],{},"announceSpeed(String, double)"," — even though the name is identical.",[768,1345,1347],{"id":1346},"step-6-call-both-overloads","Step 6: Call Both Overloads",[802,1349,1351],{"className":804,"code":1350,"language":806,"meta":807,"style":807},"public class DriveAnnouncer\n{\n    public static void main(String[] args)\n    {\n        double commandedSpeed = 0.75;\n        announceSpeed(commandedSpeed);\n        System.out.println(\"Back in main, commandedSpeed is still: \" + commandedSpeed);\n\n        announceSpeed(\"left\", 0.5);\n        announceSpeed(\"right\", 0.6);\n    }\n\n    public static void announceSpeed(double requestedSpeed)\n    {\n        System.out.println(\"Setting drivetrain speed to \" + requestedSpeed);\n        requestedSpeed = 0.0;\n        System.out.println(\"Inside the method, requestedSpeed is now: \" + requestedSpeed);\n    }\n\n    public static void announceSpeed(String side, double requestedSpeed)\n    {\n        System.out.println(\"Setting \" + side + \" side speed to \" + requestedSpeed);\n    }\n}\n",[782,1352,1353,1357,1361,1365,1369,1373,1377,1381,1385,1390,1395,1399,1403,1407,1411,1415,1419,1424,1429,1434,1440,1445,1451,1456],{"__ignoreMap":807},[811,1354,1355],{"class":813,"line":814},[811,1356,1091],{},[811,1358,1359],{"class":813,"line":900},[811,1360,1054],{},[811,1362,1363],{"class":813,"line":906},[811,1364,1100],{},[811,1366,1367],{"class":813,"line":1062},[811,1368,1105],{},[811,1370,1371],{"class":813,"line":1108},[811,1372,1111],{},[811,1374,1375],{"class":813,"line":1114},[811,1376,1117],{},[811,1378,1379],{"class":813,"line":1120},[811,1380,1238],{},[811,1382,1383],{"class":813,"line":1126},[811,1384,1059],{"emptyLinePlaceholder":981},[811,1386,1387],{"class":813,"line":1131},[811,1388,1389],{},"        announceSpeed(\"left\", 0.5);\n",[811,1391,1392],{"class":813,"line":1137},[811,1393,1394],{},"        announceSpeed(\"right\", 0.6);\n",[811,1396,1397],{"class":813,"line":1142},[811,1398,1123],{},[811,1400,1401],{"class":813,"line":1148},[811,1402,1059],{"emptyLinePlaceholder":981},[811,1404,1405],{"class":813,"line":1153},[811,1406,1134],{},[811,1408,1409],{"class":813,"line":1266},[811,1410,1105],{},[811,1412,1413],{"class":813,"line":1272},[811,1414,1145],{},[811,1416,1417],{"class":813,"line":1277},[811,1418,1263],{},[811,1420,1422],{"class":813,"line":1421},17,[811,1423,1269],{},[811,1425,1427],{"class":813,"line":1426},18,[811,1428,1123],{},[811,1430,1432],{"class":813,"line":1431},19,[811,1433,1059],{"emptyLinePlaceholder":981},[811,1435,1437],{"class":813,"line":1436},20,[811,1438,1439],{},"    public static void announceSpeed(String side, double requestedSpeed)\n",[811,1441,1443],{"class":813,"line":1442},21,[811,1444,1105],{},[811,1446,1448],{"class":813,"line":1447},22,[811,1449,1450],{},"        System.out.println(\"Setting \" + side + \" side speed to \" + requestedSpeed);\n",[811,1452,1454],{"class":813,"line":1453},23,[811,1455,1123],{},[811,1457,1459],{"class":813,"line":1458},24,[811,1460,1065],{},[773,1462,1463,1464,1467,1468,1470,1471,1473,1474,1477,1478,1481,1482,1470,1484,854],{},"Java looks at the arguments at each call site — a lone ",[782,1465,1466],{},"double"," versus a ",[782,1469,882],{}," followed by a ",[782,1472,1466],{}," — and picks the matching signature automatically. Calling ",[782,1475,1476],{},"announceSpeed(\"left\", 0.5)"," with the arguments in the wrong order, like ",[782,1479,1480],{},"announceSpeed(0.5, \"left\")",", wouldn't compile: no signature matches a ",[782,1483,1466],{},[782,1485,882],{},[768,1487,1489],{"id":1488},"recap","Recap",[915,1491,1492,1501,1513,1522],{},[918,1493,1494,1495,1497,1498,1500],{},"A method's signature is its name plus its parameter types — ",[782,1496,1077],{}," and ",[782,1499,1342],{}," are two different signatures sharing one name.",[918,1502,1503,1504,1506,1507,1509,1510,1512],{},"A parameter (",[782,1505,1070],{},") is a variable in the method's own header; an argument (",[782,1508,1160],{},", or the literal ",[782,1511,1164],{},") is the actual value passed in at the call site.",[918,1514,1515,1516,1518,1519,1521],{},"Java uses call by value — ",[782,1517,1312],{}," only ever received a copy of ",[782,1520,1160],{},"; reassigning its parameter never changed the caller's variable.",[918,1523,1524],{},"Overloading means multiple methods share a name but differ in their parameter lists; Java picks the matching one based on the call's arguments.",[966,1526,968],{},{"title":807,"searchDepth":900,"depth":900,"links":1528},[1529,1530,1531,1532,1533,1534,1535,1536],{"id":993,"depth":900,"text":994},{"id":1000,"depth":900,"text":1001},{"id":1033,"depth":900,"text":1034},{"id":1080,"depth":900,"text":1081},{"id":1192,"depth":900,"text":1193},{"id":1303,"depth":900,"text":1304},{"id":1346,"depth":900,"text":1347},{"id":1488,"depth":900,"text":1489},{"outlineRef":979,"pairsWith":1538,"status":1539},"[`lessons\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters.md`](..\u002F..\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters.md)","new — authored worked example (fully solved, walked step by step — not a problem to attempt)",{"title":475,"description":807},"6XX1kLxSg2aSKgmzbe2wi3CW3H6dYQGrsIaTbMdGeNs",{"id":1543,"title":636,"body":1544,"description":807,"extension":977,"meta":1878,"navigation":981,"path":635,"seo":1880,"stem":637,"__hash__":1881},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters.md",{"type":761,"value":1545,"toc":1874},[1546,1549,1553,1563,1578,1581,1586,1604,1610,1629,1647,1651,1657,1660,1731,1736,1793,1872],[764,1547,636],{"id":1548},"methods-signatures-parameters-exercises",[768,1550,1552],{"id":1551},"multiple-choice","Multiple Choice",[773,1554,1555,1558,1559,1562],{},[777,1556,1557],{},"Question:"," A ",[782,1560,1561],{},"Robot"," class defines two methods:",[802,1564,1566],{"className":804,"code":1565,"language":806,"meta":807,"style":807},"public static void logEvent(String message) { ... }\npublic static void logEvent(String message, int priority) { ... }\n",[782,1567,1568,1573],{"__ignoreMap":807},[811,1569,1570],{"class":813,"line":814},[811,1571,1572],{},"public static void logEvent(String message) { ... }\n",[811,1574,1575],{"class":813,"line":900},[811,1576,1577],{},"public static void logEvent(String message, int priority) { ... }\n",[773,1579,1580],{},"Which statement is correct?",[773,1582,1583],{},[777,1584,1585],{},"Options:",[915,1587,1588,1591,1594,1601],{},[918,1589,1590],{},"A. This is valid overloading — Java picks the matching version based on the number of arguments passed at the call site",[918,1592,1593],{},"B. This won't compile — two methods in the same class can never share a name",[918,1595,1596,1597,1600],{},"C. This compiles, but calling ",[782,1598,1599],{},"logEvent(\"Auto started\")"," is ambiguous and won't run",[918,1602,1603],{},"D. This won't compile — overloaded methods must differ in return type, not parameter list",[773,1605,1606,1609],{},[777,1607,1608],{},"Answer:"," A",[773,1611,1612,1615,1616,1619,1620,1622,1623,1625,1626,1628],{},[777,1613,1614],{},"Why:"," Both methods are named ",[782,1617,1618],{},"logEvent",", but their parameter lists differ in number — one takes a single ",[782,1621,882],{},", the other a ",[782,1624,882],{}," and an ",[782,1627,886],{},". That's a valid overload, and Java resolves which one to run by matching the call site's arguments against each signature.",[915,1630,1631,1638,1644],{},[918,1632,1633,1634,1637],{},"B is wrong — overloading exists precisely so methods ",[847,1635,1636],{},"can"," share a name, as long as their parameter lists differ.",[918,1639,1640,1641,1643],{},"C is wrong — there's no ambiguity. ",[782,1642,1599],{}," has exactly one argument, which only matches the one-parameter signature.",[918,1645,1646],{},"D is wrong — overloaded methods are told apart by their parameter lists (number or type), not by return type. Two methods with identical parameter lists but different return types wouldn't compile, but that isn't the case here.",[768,1648,1650],{"id":1649},"micro-parsons","Micro-Parsons",[773,1652,1653,1656],{},[777,1654,1655],{},"Problem:"," These lines, once correctly ordered, form a complete program that calls an overloaded method with two arguments to report a match score.",[773,1658,1659],{},"Reorder the fragments below into a working program:",[915,1661,1662,1668,1674,1680,1686,1692,1698,1704,1720,1726],{},[918,1663,1664,1665],{},"a. ",[782,1666,1667],{},"        System.out.println(teamName + \" scored \" + score + \" points\");",[918,1669,1670,1671],{},"b. ",[782,1672,1673],{},"public class MatchReport",[918,1675,1676,1677],{},"c. ",[782,1678,1679],{},"    }",[918,1681,1682,1683],{},"d. ",[782,1684,1685],{},"{",[918,1687,1688,1689],{},"e. ",[782,1690,1691],{},"    public static void reportMatchScore(String teamName, int score)",[918,1693,1694,1695],{},"f. ",[782,1696,1697],{},"        reportMatchScore(\"Shockwave\", 145);",[918,1699,1700,1701],{},"g. ",[782,1702,1703],{},"    public static void main(String[] args)",[918,1705,1706,1707],{},"h.\n",[802,1708,1710],{"className":804,"code":1709,"language":806,"meta":807,"style":807},"    }\n}\n",[782,1711,1712,1716],{"__ignoreMap":807},[811,1713,1714],{"class":813,"line":814},[811,1715,1123],{},[811,1717,1718],{"class":813,"line":900},[811,1719,1065],{},[918,1721,1722,1723],{},"i. ",[782,1724,1725],{},"    {",[918,1727,1728,1729],{},"j. ",[782,1730,1725],{},[773,1732,1733,1735],{},[777,1734,1608],{}," b, d, g, i, f, c, e, j, a, h",[802,1737,1739],{"className":804,"code":1738,"language":806,"meta":807,"style":807},"public class MatchReport\n{\n    public static void main(String[] args)\n    {\n        reportMatchScore(\"Shockwave\", 145);\n    }\n\n    public static void reportMatchScore(String teamName, int score)\n    {\n        System.out.println(teamName + \" scored \" + score + \" points\");\n    }\n}\n",[782,1740,1741,1746,1750,1754,1758,1763,1767,1771,1776,1780,1785,1789],{"__ignoreMap":807},[811,1742,1743],{"class":813,"line":814},[811,1744,1745],{},"public class MatchReport\n",[811,1747,1748],{"class":813,"line":900},[811,1749,1054],{},[811,1751,1752],{"class":813,"line":906},[811,1753,1100],{},[811,1755,1756],{"class":813,"line":1062},[811,1757,1105],{},[811,1759,1760],{"class":813,"line":1108},[811,1761,1762],{},"        reportMatchScore(\"Shockwave\", 145);\n",[811,1764,1765],{"class":813,"line":1114},[811,1766,1123],{},[811,1768,1769],{"class":813,"line":1120},[811,1770,1059],{"emptyLinePlaceholder":981},[811,1772,1773],{"class":813,"line":1126},[811,1774,1775],{},"    public static void reportMatchScore(String teamName, int score)\n",[811,1777,1778],{"class":813,"line":1131},[811,1779,1105],{},[811,1781,1782],{"class":813,"line":1137},[811,1783,1784],{},"        System.out.println(teamName + \" scored \" + score + \" points\");\n",[811,1786,1787],{"class":813,"line":1142},[811,1788,1123],{},[811,1790,1791],{"class":813,"line":1148},[811,1792,1065],{},[773,1794,1795,1798,1799,1802,1803,1806,1807,1809,1810,1813,1814,1817,1818,1809,1821,1824,1825,1827,1828,1830,1831,875,1833,1835,1836,1839,1840,1842,1843,1846,1847,1850,1851,1854,1855,1497,1858,1861,1862,1809,1864,1867,1868,1871],{},[777,1796,1797],{},"Why this order:"," The class line (",[782,1800,1801],{},"b",") and its opening brace (",[782,1804,1805],{},"d",") come first. ",[782,1808,1016],{}," (",[782,1811,1812],{},"g",") is declared next with its own opening brace (",[782,1815,1816],{},"i","); the call to ",[782,1819,1820],{},"reportMatchScore",[782,1822,1823],{},"f",") sits inside ",[782,1826,1016],{},"'s body, matching the method's parameter order exactly — ",[782,1829,882],{}," first, then ",[782,1832,886],{},[782,1834,1016],{},"'s body closes (",[782,1837,1838],{},"c",") before ",[782,1841,1820],{},"'s own signature (",[782,1844,1845],{},"e",") and opening brace (",[782,1848,1849],{},"j",") begin. Inside that method, ",[782,1852,1853],{},"teamName"," is used as the parameter name — a variable in the method's own header — while ",[782,1856,1857],{},"\"Shockwave\"",[782,1859,1860],{},"145"," were the arguments supplied at the call site. The ",[782,1863,788],{},[782,1865,1866],{},"a",") lives inside that method's body, and then ",[782,1869,1870],{},"h"," — the method's closing brace immediately followed by the class's closing brace, merged into a single fragment since nothing could ever validly go between them — ends the program.",[966,1873,968],{},{"title":807,"searchDepth":900,"depth":900,"links":1875},[1876,1877],{"id":1551,"depth":900,"text":1552},{"id":1649,"depth":900,"text":1650},{"outlineRef":979,"pairsWith":1538,"status":1879},"new — authored exercises (Multiple Choice + Micro-Parsons)",{"title":636,"description":807},"28C9jkpXydbGFpwfbNEA_m8iA27V7OKI28ZnYYNW_J8",1790274943984]