[{"data":1,"prerenderedAt":1790},["ShallowReactive",2],{"item-lessons-light-ch01-why-java-for-frc":3,"item-examples-light-ch01-why-java-for-frc":436,"item-exercises-light-ch01-why-java-for-frc":597,"item-lesson-full-ch01-why-java-for-frc-1.2":758,"item-example-full-ch01-why-java-for-frc-1.2":1229,"item-exercise-full-ch01-why-java-for-frc-1.2":1561},[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":10,"body":760,"description":810,"extension":1222,"meta":1223,"navigation":1226,"path":9,"seo":1227,"stem":11,"__hash__":1228},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers.md",{"type":761,"value":762,"toc":1211},"minimark",[763,767,772,781,788,792,804,857,875,879,890,899,902,916,920,930,933,957,970,974,992,995,1038,1052,1056,1078,1085,1089,1099,1114,1118,1152,1156,1196,1207],[764,765,10],"h1",{"id":766},"intro-to-algorithms-programming-compilers",[768,769,771],"h2",{"id":770},"algorithms","Algorithms",[773,774,775,776,780],"p",{},"An algorithm is just a set of ordered steps to solve a problem — a recipe, directions to a house, and a Java program are all algorithms. Steps run in order, one at a time — this is called ",[777,778,779],"strong",{},"sequencing",".",[773,782,783,784,787],{},"Before writing real code, it helps to plan the steps first: in plain English, a diagram, or ",[777,785,786],{},"pseudocode"," (simplified fake-code written on paper, not run by anything). Getting the steps straight on paper first is what turns a half-formed idea into code that actually works.",[768,789,791],{"id":790},"your-first-java-program","Your First Java Program",[773,793,794,795,799,800,803],{},"Every Java program lives inside a ",[796,797,798],"code",{},"class",", and every class you run needs a ",[796,801,802],{},"main"," method — that's where the program starts running.",[805,806,811],"pre",{"className":807,"code":808,"language":809,"meta":810,"style":810},"language-java shiki shiki-themes github-light github-dark","public class MyClass\n{\n    public static void main(String[] args)\n    {\n        System.out.println(\"Hi there!\");\n    }\n}\n","java","",[796,812,813,821,827,833,839,845,851],{"__ignoreMap":810},[814,815,818],"span",{"class":816,"line":817},"line",1,[814,819,820],{},"public class MyClass\n",[814,822,824],{"class":816,"line":823},2,[814,825,826],{},"{\n",[814,828,830],{"class":816,"line":829},3,[814,831,832],{},"    public static void main(String[] args)\n",[814,834,836],{"class":816,"line":835},4,[814,837,838],{},"    {\n",[814,840,842],{"class":816,"line":841},5,[814,843,844],{},"        System.out.println(\"Hi there!\");\n",[814,846,848],{"class":816,"line":847},6,[814,849,850],{},"    }\n",[814,852,854],{"class":816,"line":853},7,[814,855,856],{},"}\n",[773,858,859,860,863,864,867,868,871,872,780],{},"Every open curly brace ",[796,861,862],{},"{"," needs a matching close ",[796,865,866],{},"}",". The file itself has to be named the same as the class — ",[796,869,870],{},"MyClass.java"," for ",[796,873,874],{},"public class MyClass",[768,876,878],{"id":877},"every-statement-ends-with-a-semicolon","Every Statement Ends With a Semicolon",[773,880,881,882,885,886,889],{},"Each individual instruction is a ",[777,883,884],{},"statement",", and every statement ends with ",[796,887,888],{},";"," — think of it like a period ending a sentence.",[805,891,893],{"className":807,"code":892,"language":809,"meta":810,"style":810},"System.out.println(\"Hi there!\");\n",[796,894,895],{"__ignoreMap":810},[814,896,897],{"class":816,"line":817},[814,898,892],{},[773,900,901],{},"Miss it, and the program won't compile. This is one of the most common mistakes when you're starting out — expect it, don't stress about it.",[773,903,904,905,907,908,910,911,913,914,780],{},"Not everything ends in ",[796,906,888],{},". A line that opens a block, like the ",[796,909,798],{}," or ",[796,912,802],{}," line above, has no semicolon before its ",[796,915,862],{},[768,917,919],{"id":918},"compiling-how-your-code-actually-runs","Compiling: How Your Code Actually Runs",[773,921,922,923,926,927,780],{},"Computers don't understand Java directly. A ",[777,924,925],{},"compiler"," checks your code for mistakes and translates it into something the computer can run. If it finds a mistake, it stops and tells you — that's a ",[777,928,929],{},"syntax error",[773,931,932],{},"For this course, you have two ways to write and run your code:",[934,935,936,951],"ul",{},[937,938,939,942,943,950],"li",{},[777,940,941],{},"Use your own IDE",", like ",[944,945,949],"a",{"href":946,"rel":947},"https:\u002F\u002Fcode.visualstudio.com\u002F",[948],"nofollow","VS Code"," with the Java extension — genuinely how most FRC teams write real robot code, so it's good practice either way. Write and run it there, then copy your finished code into this course's checker when an exercise asks for it.",[937,952,953,956],{},[777,954,955],{},"Use this course's built-in checker directly"," — no copying needed. This part of the course is still being built, so it's not ready yet.",[773,958,959,960,965,966],{},"For now, the first option is what actually works: write and run your code in a real IDE (or an online one, like ",[944,961,964],{"href":962,"rel":963},"https:\u002F\u002Freplit.com\u002F",[948],"Replit","), then paste the result in when an exercise asks for it. ",[967,968,969],"em",{},"(This section will get an update once the built-in checker exists.)",[768,971,973],{"id":972},"keywords-and-naming","Keywords and Naming",[773,975,976,977,980,981,983,984,987,988,991],{},"Words like ",[796,978,979],{},"public",", ",[796,982,798],{},", and ",[796,985,986],{},"void"," are ",[777,989,990],{},"keywords"," — reserved words with a fixed meaning in Java. Keywords are always lowercase.",[773,993,994],{},"Everything else — every name you pick yourself — follows one of three styles:",[934,996,997,1009,1025],{},[937,998,999,1002,1003,980,1006,780],{},[777,1000,1001],{},"lowerCamelCase"," — variables and methods start lowercase, then capitalize each new word: ",[796,1004,1005],{},"motorSpeed",[796,1007,1008],{},"calculateTotal()",[937,1010,1011,1014,1015,980,1018,1021,1022,780],{},[777,1012,1013],{},"PascalCase"," (also called UpperCamelCase) — classes and interfaces capitalize every word, including the first: ",[796,1016,1017],{},"System",[796,1019,1020],{},"String",", or a class you write yourself like ",[796,1023,1024],{},"Drivetrain",[937,1026,1027,1030,1031,980,1034,1037],{},[777,1028,1029],{},"SCREAMING_SNAKE_CASE"," — constants (values that never change) are all uppercase with underscores between words: ",[796,1032,1033],{},"MAX_SPEED",[796,1035,1036],{},"PI",". You'll see this style starting in Ch.23.",[773,1039,1040,1041,1044,1045,1047,1048,1051],{},"That's why ",[796,1042,1043],{},"System.out.println(...)"," looks the way it does: ",[796,1046,1017],{}," is a class, so it's PascalCase. ",[796,1049,1050],{},"println"," is a method — here it's just one word, so there's no second word to capitalize, but it still starts lowercase like every method name does.",[768,1053,1055],{"id":1054},"syntax-errors-vs-run-time-errors","Syntax Errors vs. Run-Time Errors",[934,1057,1058,1072],{},[937,1059,1060,1061,1063,1064,1066,1067,910,1069,780],{},"A ",[777,1062,929],{}," is caught by the compiler, before your program ever runs — a missing ",[796,1065,888],{},", an unmatched ",[796,1068,862],{},[796,1070,1071],{},"\"",[937,1073,1060,1074,1077],{},[777,1075,1076],{},"run-time error"," happens while the program is running, after it already compiled — like dividing by zero.",[773,1079,1080,1081,1084],{},"Both are normal. Finding and fixing errors is called ",[777,1082,1083],{},"debugging"," — informally, an error is a \"bug.\" If you're stuck, explaining your code line-by-line out loud — even to an inanimate object, a real technique called \"rubber duck debugging\" — often reveals the problem before you finish explaining it.",[768,1086,1088],{"id":1087},"comments","Comments",[773,1090,1091,1094,1095,1098],{},[796,1092,1093],{},"\u002F\u002F"," starts a comment that runs to the end of the line; ",[796,1096,1097],{},"\u002F* ... *\u002F"," comments out everything in between, even across multiple lines. The compiler ignores comments completely — they exist to explain your code to yourself and your teammates.",[805,1100,1102],{"className":807,"code":1101,"language":809,"meta":810,"style":810},"\u002F\u002F this line is ignored by the compiler\nint score = 10; \u002F\u002F so is this part, after the \u002F\u002F\n",[796,1103,1104,1109],{"__ignoreMap":810},[814,1105,1106],{"class":816,"line":817},[814,1107,1108],{},"\u002F\u002F this line is ignored by the compiler\n",[814,1110,1111],{"class":816,"line":823},[814,1112,1113],{},"int score = 10; \u002F\u002F so is this part, after the \u002F\u002F\n",[768,1115,1117],{"id":1116},"common-pitfalls","Common Pitfalls",[934,1119,1120,1126,1142],{},[937,1121,1122,1125],{},[777,1123,1124],{},"Missing a semicolon."," The single most common first error — check the end of the line the compiler points at, and the line just before it.",[937,1127,1128,1131,1132,1134,1135,980,1137,980,1139,1141],{},[777,1129,1130],{},"Mismatched capitalization."," ",[796,1133,1017],{}," is capitalized (it's a class); ",[796,1136,979],{},[796,1138,798],{},[796,1140,986],{}," are not (they're keywords). Java is case-sensitive everywhere.",[937,1143,1144,1147,1148,1151],{},[777,1145,1146],{},"Trusting the error's line number completely."," The compiler tells you where it ",[967,1149,1150],{},"noticed"," the problem, which is sometimes a line or two after where the actual mistake is.",[768,1153,1155],{"id":1154},"key-takeaways","Key Takeaways",[934,1157,1158,1161,1164,1173,1178,1181,1184,1187],{},[937,1159,1160],{},"An algorithm is an ordered set of steps, run one at a time (sequencing) — you already use these outside of code.",[937,1162,1163],{},"Planning steps in plain English or pseudocode before coding turns a half-formed idea into working code.",[937,1165,1166,1167,1169,1170,1172],{},"Every Java program has a ",[796,1168,798],{},", and a ",[796,1171,802],{}," method where it starts running.",[937,1174,1175,1176,780],{},"Every statement ends with ",[796,1177,888],{},[937,1179,1180],{},"Three naming styles: lowerCamelCase (variables\u002Fmethods), PascalCase (classes\u002Finterfaces), SCREAMING_SNAKE_CASE (constants).",[937,1182,1183],{},"A compiler checks your code and translates it to run; a syntax error is a mistake it catches before your program ever runs.",[937,1185,1186],{},"Write and run code in a real IDE (like VS Code) or an online one, then paste it in when an exercise asks for it.",[937,1188,1189,1191,1192,1195],{},[796,1190,1093],{}," and ",[796,1193,1194],{},"\u002F* *\u002F"," are comments — the compiler ignores them completely.",[773,1197,1198,1199,1202,1203,1206],{},"Derived from ",[796,1200,1201],{},"csawesome-2026",": ",[796,1204,1205],{},"unit-1-using-objects-and-methods\u002F1.01-introduction-to-algorithms-programming-and-compilers.md"," (CSA 1.1)",[1208,1209,1210],"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":810,"searchDepth":823,"depth":823,"links":1212},[1213,1214,1215,1216,1217,1218,1219,1220,1221],{"id":770,"depth":823,"text":771},{"id":790,"depth":823,"text":791},{"id":877,"depth":823,"text":878},{"id":918,"depth":823,"text":919},{"id":972,"depth":823,"text":973},{"id":1054,"depth":823,"text":1055},{"id":1087,"depth":823,"text":1088},{"id":1116,"depth":823,"text":1117},{"id":1154,"depth":823,"text":1155},"md",{"outlineRef":1224,"status":1225},"1.2 — Intro to Algorithms, Programming and Compilers (CSA 1.1)","new — authored lesson (fuller depth than the teaser slide)",true,{"title":10,"description":810},"-WgvplAPHEn-4UBBQHKep6AHbMI5skLy0On23tx0Cn8",{"id":1230,"title":439,"body":1231,"description":810,"extension":1222,"meta":1556,"navigation":1226,"path":438,"seo":1559,"stem":440,"__hash__":1560},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers.md",{"type":761,"value":1232,"toc":1544},[1233,1236,1240,1243,1247,1250,1259,1262,1268,1277,1312,1326,1330,1336,1376,1381,1385,1418,1426,1430,1433,1472,1476,1479,1487,1491,1494,1503,1509,1513,1542],[764,1234,439],{"id":1235},"intro-to-algorithms-programming-compilers-worked-example",[768,1237,1239],{"id":1238},"problem","Problem",[773,1241,1242],{},"Print your team's name, then your team's number, each on its own line.",[768,1244,1246],{"id":1245},"step-1-plan-it-first","Step 1: Plan It First",[773,1248,1249],{},"Before touching code, write the steps in plain English — this is the algorithm:",[1251,1252,1253,1256],"ol",{},[937,1254,1255],{},"Print the team name.",[937,1257,1258],{},"Print the team number.",[773,1260,1261],{},"Two steps, run in order — sequencing.",[768,1263,1265,1266],{"id":1264},"step-2-set-up-the-class-and-main","Step 2: Set Up the Class and ",[796,1267,802],{},[773,1269,1270,1271,1273,1274,1276],{},"Every Java program needs a ",[796,1272,798],{},", and every class we run needs a ",[796,1275,802],{}," method. Nothing prints yet — this is just the skeleton every program starts from:",[805,1278,1280],{"className":807,"code":1279,"language":809,"meta":810,"style":810},"public class TeamInfo\n{\n    public static void main(String[] args)\n    {\n\n    }\n}\n",[796,1281,1282,1287,1291,1295,1299,1304,1308],{"__ignoreMap":810},[814,1283,1284],{"class":816,"line":817},[814,1285,1286],{},"public class TeamInfo\n",[814,1288,1289],{"class":816,"line":823},[814,1290,826],{},[814,1292,1293],{"class":816,"line":829},[814,1294,832],{},[814,1296,1297],{"class":816,"line":835},[814,1298,838],{},[814,1300,1301],{"class":816,"line":841},[814,1302,1303],{"emptyLinePlaceholder":1226},"\n",[814,1305,1306],{"class":816,"line":847},[814,1307,850],{},[814,1309,1310],{"class":816,"line":853},[814,1311,856],{},[773,1313,1314,1315,1318,1319,1322,1323,1325],{},"The file this lives in must be named ",[796,1316,1317],{},"TeamInfo.java",", matching ",[796,1320,1321],{},"public class TeamInfo",". Notice the opening brace ",[796,1324,862],{}," has no semicolon before it — braces open and close blocks, they aren't statements.",[768,1327,1329],{"id":1328},"step-3-fill-in-the-statements","Step 3: Fill In the Statements",[773,1331,1332,1333,1335],{},"Each planned step becomes one statement, and every statement ends with ",[796,1334,888],{},":",[805,1337,1339],{"className":807,"code":1338,"language":809,"meta":810,"style":810},"public class TeamInfo\n{\n    public static void main(String[] args)\n    {\n        System.out.println(\"Shockwave\");\n        System.out.println(\"1622\");\n    }\n}\n",[796,1340,1341,1345,1349,1353,1357,1362,1367,1371],{"__ignoreMap":810},[814,1342,1343],{"class":816,"line":817},[814,1344,1286],{},[814,1346,1347],{"class":816,"line":823},[814,1348,826],{},[814,1350,1351],{"class":816,"line":829},[814,1352,832],{},[814,1354,1355],{"class":816,"line":835},[814,1356,838],{},[814,1358,1359],{"class":816,"line":841},[814,1360,1361],{},"        System.out.println(\"Shockwave\");\n",[814,1363,1364],{"class":816,"line":847},[814,1365,1366],{},"        System.out.println(\"1622\");\n",[814,1368,1369],{"class":816,"line":853},[814,1370,850],{},[814,1372,1374],{"class":816,"line":1373},8,[814,1375,856],{},[773,1377,1378,1380],{},[796,1379,1043],{}," is how a Java program prints a line of text. Two calls, run top to bottom — this is exactly the two-step plan from Step 1.",[768,1382,1384],{"id":1383},"step-4-check-the-naming","Step 4: Check the Naming",[934,1386,1387,1396,1404],{},[937,1388,1389,1392,1393,1395],{},[796,1390,1391],{},"TeamInfo"," is a class name → ",[777,1394,1013],{},", every word capitalized.",[937,1397,1398,1400,1401,1403],{},[796,1399,802],{}," is a method name → ",[777,1402,1001],{},", starts lowercase.",[937,1405,1406,980,1408,980,1410,980,1413,987,1415,1417],{},[796,1407,979],{},[796,1409,798],{},[796,1411,1412],{},"static",[796,1414,986],{},[777,1416,990],{}," → always lowercase, fixed meaning, never chosen by you.",[773,1419,1420,1422,1423,1425],{},[796,1421,1017],{}," is capitalized because it's a class; ",[796,1424,1050],{}," is lowercase because it's a method. Same rule as everywhere else in Java.",[768,1427,1429],{"id":1428},"step-5-add-a-comment","Step 5: Add a Comment",[773,1431,1432],{},"A comment explains the code to a human — the compiler skips it entirely. Here's the finished program with one added:",[805,1434,1436],{"className":807,"code":1435,"language":809,"meta":810,"style":810},"public class TeamInfo\n{\n    public static void main(String[] args)\n    {\n        System.out.println(\"Shockwave\");   \u002F\u002F team name\n        System.out.println(\"1622\");        \u002F\u002F team number\n    }\n}\n",[796,1437,1438,1442,1446,1450,1454,1459,1464,1468],{"__ignoreMap":810},[814,1439,1440],{"class":816,"line":817},[814,1441,1286],{},[814,1443,1444],{"class":816,"line":823},[814,1445,826],{},[814,1447,1448],{"class":816,"line":829},[814,1449,832],{},[814,1451,1452],{"class":816,"line":835},[814,1453,838],{},[814,1455,1456],{"class":816,"line":841},[814,1457,1458],{},"        System.out.println(\"Shockwave\");   \u002F\u002F team name\n",[814,1460,1461],{"class":816,"line":847},[814,1462,1463],{},"        System.out.println(\"1622\");        \u002F\u002F team number\n",[814,1465,1466],{"class":816,"line":853},[814,1467,850],{},[814,1469,1470],{"class":816,"line":1373},[814,1471,856],{},[768,1473,1475],{"id":1474},"what-compiling-does-here","What Compiling Does Here",[773,1477,1478],{},"Running this through the compiler translates it into something the computer can execute, and it prints:",[805,1480,1485],{"className":1481,"code":1483,"language":1484},[1482],"language-text","Shockwave\n1622\n","text",[796,1486,1483],{"__ignoreMap":810},[768,1488,1490],{"id":1489},"what-a-syntax-error-would-look-like","What a Syntax Error Would Look Like",[773,1492,1493],{},"If Step 3 had been typed without the semicolon —",[805,1495,1497],{"className":807,"code":1496,"language":809,"meta":810,"style":810},"System.out.println(\"Shockwave\")\n",[796,1498,1499],{"__ignoreMap":810},[814,1500,1501],{"class":816,"line":817},[814,1502,1496],{},[773,1504,1505,1506,1508],{},"— the compiler would stop before the program ever runs and point at that line. That's a ",[777,1507,929],{},": caught at compile time, before execution, not a run-time error.",[768,1510,1512],{"id":1511},"recap","Recap",[934,1514,1515,1518,1527,1530,1536],{},[937,1516,1517],{},"Plan in plain English first (algorithm), then translate each step into one statement.",[937,1519,1520,1521,1523,1524,1526],{},"Every statement ends in ",[796,1522,888],{},"; lines that open a block (",[796,1525,862],{},") don't.",[937,1528,1529],{},"Class names are PascalCase, method names are lowerCamelCase, keywords are always lowercase.",[937,1531,1532,1533,1535],{},"Comments (",[796,1534,1093],{},") are for humans — the compiler ignores them.",[937,1537,1538,1539,1541],{},"A missing ",[796,1540,888],{}," is a syntax error, caught before the program runs.",[1208,1543,1210],{},{"title":810,"searchDepth":823,"depth":823,"links":1545},[1546,1547,1548,1550,1551,1552,1553,1554,1555],{"id":1238,"depth":823,"text":1239},{"id":1245,"depth":823,"text":1246},{"id":1264,"depth":823,"text":1549},"Step 2: Set Up the Class and main",{"id":1328,"depth":823,"text":1329},{"id":1383,"depth":823,"text":1384},{"id":1428,"depth":823,"text":1429},{"id":1474,"depth":823,"text":1475},{"id":1489,"depth":823,"text":1490},{"id":1511,"depth":823,"text":1512},{"outlineRef":1224,"pairsWith":1557,"status":1558},"[`lessons\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers.md`](..\u002F..\u002Flessons\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers.md)","new — authored worked example (fully solved, walked step by step — not a problem to attempt)",{"title":439,"description":810},"cHl76JgfskjWMHuKL45js7no6EJXVI_xuTrbYUS5KFQ",{"id":1562,"title":600,"body":1563,"description":810,"extension":1222,"meta":1786,"navigation":1226,"path":599,"seo":1788,"stem":601,"__hash__":1789},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers.md",{"type":761,"value":1564,"toc":1782},[1565,1568,1572,1582,1587,1605,1611,1620,1640,1644,1650,1653,1695,1700,1735,1780],[764,1566,600],{"id":1567},"intro-to-algorithms-programming-compilers-exercises",[768,1569,1571],{"id":1570},"multiple-choice","Multiple Choice",[773,1573,1574,1577,1578,1581],{},[777,1575,1576],{},"Question:"," A teammate writes ",[796,1579,1580],{},"System.out.println(\"Ready\")"," and forgets the semicolon at the end. When does this get caught?",[773,1583,1584],{},[777,1585,1586],{},"Options:",[934,1588,1589,1592,1599,1602],{},[937,1590,1591],{},"A. At compile time, before the program ever runs",[937,1593,1594,1595,1598],{},"B. At run time, right after ",[796,1596,1597],{},"\"Ready\""," is printed",[937,1600,1601],{},"C. It isn't caught — Java assumes a semicolon was intended",[937,1603,1604],{},"D. Only if the program is compiled a second time",[773,1606,1607,1610],{},[777,1608,1609],{},"Answer:"," A",[773,1612,1613,1616,1617,1619],{},[777,1614,1615],{},"Why:"," A missing ",[796,1618,888],{}," is a syntax error — the compiler checks the code's structure before any of it runs, and stops there if something's wrong. Nothing prints at all, because the program never starts running.",[934,1621,1622,1632,1637],{},[937,1623,1624,1625,1628,1629,1631],{},"B is wrong because it describes a run-time error — something that happens ",[967,1626,1627],{},"while"," the program runs, like the ",[796,1630,802],{}," example never reaching that far here.",[937,1633,1634,1635,780],{},"C is wrong — Java never guesses at missing syntax; it requires every statement to end in ",[796,1636,888],{},[937,1638,1639],{},"D is wrong — compiling doesn't get \"another chance\" the second time; the same error would be caught again immediately.",[768,1641,1643],{"id":1642},"micro-parsons","Micro-Parsons",[773,1645,1646,1649],{},[777,1647,1648],{},"Problem:"," These lines, once correctly ordered, form a complete program that prints a team's name on one line.",[773,1651,1652],{},"Reorder the fragments below into a working program:",[934,1654,1655,1661,1667,1673,1678,1684,1689],{},[937,1656,1657,1658],{},"a. ",[796,1659,1660],{},"        System.out.println(\"Shockwave 1622\");",[937,1662,1663,1664],{},"b. ",[796,1665,1666],{},"public class TeamMotto",[937,1668,1669,1670],{},"c. ",[796,1671,1672],{},"    }",[937,1674,1675,1676],{},"d. ",[796,1677,862],{},[937,1679,1680,1681],{},"e. ",[796,1682,1683],{},"    public static void main(String[] args)",[937,1685,1686,1687],{},"f. ",[796,1688,866],{},[937,1690,1691,1692],{},"g. ",[796,1693,1694],{},"    {",[773,1696,1697,1699],{},[777,1698,1609],{}," b, d, e, g, a, c, f",[805,1701,1703],{"className":807,"code":1702,"language":809,"meta":810,"style":810},"public class TeamMotto\n{\n    public static void main(String[] args)\n    {\n        System.out.println(\"Shockwave 1622\");\n    }\n}\n",[796,1704,1705,1710,1714,1718,1722,1727,1731],{"__ignoreMap":810},[814,1706,1707],{"class":816,"line":817},[814,1708,1709],{},"public class TeamMotto\n",[814,1711,1712],{"class":816,"line":823},[814,1713,826],{},[814,1715,1716],{"class":816,"line":829},[814,1717,832],{},[814,1719,1720],{"class":816,"line":835},[814,1721,838],{},[814,1723,1724],{"class":816,"line":841},[814,1725,1726],{},"        System.out.println(\"Shockwave 1622\");\n",[814,1728,1729],{"class":816,"line":847},[814,1730,850],{},[814,1732,1733],{"class":816,"line":853},[814,1734,856],{},[773,1736,1737,1740,1741,1744,1745,1748,1749,1751,1752,1755,1756,1759,1760,1762,1763,1765,1766,1768,1769,1771,1772,1775,1776,1779],{},[777,1738,1739],{},"Why this order:"," The class line (",[796,1742,1743],{},"b",") has to come first, and its opening brace (",[796,1746,1747],{},"d",") right after it — every class needs a name before its body. ",[796,1750,802],{}," (",[796,1753,1754],{},"e",") is the method that runs first, so it's declared next, followed by its own opening brace (",[796,1757,1758],{},"g","). The ",[796,1761,1050],{}," statement (",[796,1764,944],{},") lives inside ",[796,1767,802],{},"'s braces. Then the braces close in the reverse order they opened: ",[796,1770,802],{},"'s body first (",[796,1773,1774],{},"c","), then the class's body (",[796,1777,1778],{},"f",").",[1208,1781,1210],{},{"title":810,"searchDepth":823,"depth":823,"links":1783},[1784,1785],{"id":1570,"depth":823,"text":1571},{"id":1642,"depth":823,"text":1643},{"outlineRef":1224,"pairsWith":1557,"status":1787},"new — authored exercises (Multiple Choice + Micro-Parsons)",{"title":600,"description":810},"Xdm9bNIrumZrW92H7J8ZdnaxZM8oPxiB1vETX-PPmRo",1790274943699]