[{"data":1,"prerenderedAt":3154},["ShallowReactive",2],{"item-lessons-light-ch07-the-class-blueprint":3,"item-examples-light-ch07-the-class-blueprint":444,"item-exercises-light-ch07-the-class-blueprint":753,"item-lesson-full-ch07-the-class-blueprint-7.4":1070,"item-example-full-ch07-the-class-blueprint-7.4":1528,"item-exercise-full-ch07-the-class-blueprint-7.4":2100},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392,396,400,404,408,412,416,420,424,428,432,436,440],{"path":5,"title":6,"stem":7},"\u002Fshockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1-why-java-for-frc","Why Java for FRC?","shockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1.1-why-java-for-frc",{"path":9,"title":10,"stem":11},"\u002Fshockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming and Compilers","shockwave-curriculum\u002Flessons\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":13,"title":14,"stem":15},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F1-variables-and-data-types","Variables & Data Types","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.1-variables-and-data-types",{"path":17,"title":18,"stem":19},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2-expressions-and-output","Expressions & Output","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.2-expressions-and-output",{"path":21,"title":22,"stem":23},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F3-assignment-and-input","Assignment & Input","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.3-assignment-and-input",{"path":25,"title":26,"stem":27},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F4-casting-and-ranges-of-values","Casting & Ranges of Values","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.4-casting-and-ranges-of-values",{"path":29,"title":30,"stem":31},"\u002Fshockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F5-compound-assignment-operators","Compound Assignment Operators","shockwave-curriculum\u002Flessons\u002Fch02-variables-and-types\u002F2.5-compound-assignment-operators",{"path":33,"title":34,"stem":35},"\u002Fshockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F1-apis-and-libraries","APIs and Libraries","shockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3.1-apis-and-libraries",{"path":37,"title":38,"stem":39},"\u002Fshockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F2-documentation-with-comments-and-preconditions","Documentation with Comments and Preconditions","shockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3.2-documentation-with-comments-and-preconditions",{"path":41,"title":42,"stem":43},"\u002Fshockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3-packages-and-imports","Packages & Imports","shockwave-curriculum\u002Flessons\u002Fch03-apis-libraries-and-documentation\u002F3.3-packages-and-imports",{"path":45,"title":46,"stem":47},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F1-methods-signatures-and-parameters","Methods, Signatures & Parameters","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters",{"path":49,"title":50,"stem":51},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F2-calling-class-methods","Calling Class Methods","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.2-calling-class-methods",{"path":53,"title":54,"stem":55},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F3-using-the-math-class","Using the Math Class","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.3-using-the-math-class",{"path":57,"title":58,"stem":59},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4-objects-instances-of-classes","Objects — Instances of Classes","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.4-objects-instances-of-classes",{"path":61,"title":62,"stem":63},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F5-creating-and-initializing-objects-constructors","Creating & Initializing Objects: Constructors","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.5-creating-and-initializing-objects-constructors",{"path":65,"title":66,"stem":67},"\u002Fshockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F6-calling-instance-methods","Calling Instance Methods","shockwave-curriculum\u002Flessons\u002Fch04-using-objects-and-calling-methods\u002F4.6-calling-instance-methods",{"path":69,"title":70,"stem":71},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F1-5.2-if-statements-and-for-loops","Control Structures: if Statements & For Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.1-5.2-if-statements-and-for-loops",{"path":73,"title":74,"stem":75},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":77,"title":78,"stem":79},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F11-informal-runtime-analysis-of-loops","Informal Runtime Analysis of Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.11-informal-runtime-analysis-of-loops",{"path":81,"title":82,"stem":83},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F12-switch-statements-and-expressions","switch Statements and Expressions","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.12-switch-statements-and-expressions",{"path":85,"title":86,"stem":87},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F3-algorithms-with-selection-and-repetition","Algorithms with Selection and Repetition","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.3-algorithms-with-selection-and-repetition",{"path":89,"title":90,"stem":91},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":93,"title":94,"stem":95},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5-nested-if-statements","Nested if Statements","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.5-nested-if-statements",{"path":97,"title":98,"stem":99},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F6-compound-boolean-expressions","Compound Boolean Expressions","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.6-compound-boolean-expressions",{"path":101,"title":102,"stem":103},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F7-comparing-boolean-expressions-de-morgans-laws","Comparing Boolean Expressions (De Morgan's Laws)","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.7-comparing-boolean-expressions-de-morgans-laws",{"path":105,"title":106,"stem":107},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F8-while-loops","While Loops","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.8-while-loops",{"path":109,"title":110,"stem":111},"\u002Fshockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F9-implementing-selection-and-iteration-algorithms","Implementing Selection and Iteration Algorithms","shockwave-curriculum\u002Flessons\u002Fch05-control-structures\u002F5.9-implementing-selection-and-iteration-algorithms",{"path":113,"title":114,"stem":115},"\u002Fshockwave-curriculum\u002Flessons\u002Fch06-strings\u002F1-strings","Strings","shockwave-curriculum\u002Flessons\u002Fch06-strings\u002F6.1-strings",{"path":117,"title":118,"stem":119},"\u002Fshockwave-curriculum\u002Flessons\u002Fch06-strings\u002F2-string-algorithms","String Algorithms","shockwave-curriculum\u002Flessons\u002Fch06-strings\u002F6.2-string-algorithms",{"path":121,"title":122,"stem":123},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F1-anatomy-of-a-java-class","The Class Blueprint","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class",{"path":125,"title":126,"stem":127},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F2-methods-how-to-write-them","Methods: How to Write Them","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them",{"path":129,"title":130,"stem":131},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F3-methods-passing-and-returning-references-of-an-object","Methods: Passing & Returning References of an Object","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.3-methods-passing-and-returning-references-of-an-object",{"path":133,"title":134,"stem":135},"\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F4-class-static-variables-and-methods","Class (static) Variables & Methods","shockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods",{"path":137,"title":138,"stem":139},"\u002Fshockwave-curriculum\u002Flessons\u002Fch08-constructors-and-this\u002F1-8.2-constructors-and-this","Constructors & \"this\"","shockwave-curriculum\u002Flessons\u002Fch08-constructors-and-this\u002F8.1-8.2-constructors-and-this",{"path":141,"title":142,"stem":143},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F1-array-creation-and-access","Array Creation and Access","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.1-array-creation-and-access",{"path":145,"title":146,"stem":147},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F2-arraylist-and-its-methods","ArrayList and its Methods","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.2-arraylist-and-its-methods",{"path":149,"title":150,"stem":151},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","HashMap (Dictionary) Data Structure","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":153,"title":154,"stem":155},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":157,"title":158,"stem":159},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F5-implementing-array-algorithms","Implementing Array Algorithms","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.5-implementing-array-algorithms",{"path":161,"title":162,"stem":163},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":165,"title":166,"stem":167},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F7-implementing-arraylist-algorithms","Implementing ArrayList Algorithms","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms",{"path":169,"title":170,"stem":171},"\u002Fshockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F8-using-text-files","Using Text Files","shockwave-curriculum\u002Flessons\u002Fch09-storing-data\u002F9.8-using-text-files",{"path":173,"title":174,"stem":175},"\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F1-2d-array-creation-and-access","2D Array Creation and Access","shockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.1-2d-array-creation-and-access",{"path":177,"title":178,"stem":179},"\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F2-2d-array-traversals-nested-loops","2D Array Traversals: Nested Loops","shockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops",{"path":181,"title":182,"stem":183},"\u002Fshockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F3-implementing-2d-array-algorithms","Implementing 2D Array Algorithms","shockwave-curriculum\u002Flessons\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms",{"path":185,"title":186,"stem":187},"\u002Fshockwave-curriculum\u002Flessons\u002Fch11-enums-named-choices\u002F11-enums-named-choices","Enums: Named Choices","shockwave-curriculum\u002Flessons\u002Fch11-enums-named-choices\u002F11-enums-named-choices",{"path":189,"title":190,"stem":191},"\u002Fshockwave-curriculum\u002Flessons\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch","Exceptions & try\u002Fcatch","shockwave-curriculum\u002Flessons\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch",{"path":193,"title":194,"stem":195},"\u002Fshockwave-curriculum\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas","Common Gotchas","shockwave-curriculum\u002Flessons\u002Fch13-common-gotchas\u002F13-common-gotchas",{"path":197,"title":198,"stem":199},"\u002Fshockwave-curriculum\u002Flessons\u002Fch14-why-design-patterns\u002F14-why-design-patterns","Why Design Patterns?","shockwave-curriculum\u002Flessons\u002Fch14-why-design-patterns\u002F14-why-design-patterns",{"path":201,"title":202,"stem":203},"\u002Fshockwave-curriculum\u002Flessons\u002Fch15-advanced-collections\u002F15-advanced-collections","Advanced Collections (Set\u002FQueue\u002FMap)","shockwave-curriculum\u002Flessons\u002Fch15-advanced-collections\u002F15-advanced-collections",{"path":205,"title":206,"stem":207},"\u002Fshockwave-curriculum\u002Flessons\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics","Writing Your Own Generics","shockwave-curriculum\u002Flessons\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics",{"path":209,"title":210,"stem":211},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F1-inheritance-superclass-subclass","Inheritance, Superclass, Subclass","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.1-inheritance-superclass-subclass",{"path":213,"title":214,"stem":215},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F2-inheritance-and-constructors","Inheritance and Constructors","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.2-inheritance-and-constructors",{"path":217,"title":218,"stem":219},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F3-inheritance-hierarchies","Inheritance Hierarchies","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.3-inheritance-hierarchies",{"path":221,"title":222,"stem":223},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F4-object-superclass","Object Superclass","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.4-object-superclass",{"path":225,"title":226,"stem":227},"\u002Fshockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F5-abstract-classes-and-methods","Abstract Classes and Methods","shockwave-curriculum\u002Flessons\u002Fch17-inheritance-and-abstractions\u002F17.5-abstract-classes-and-methods",{"path":229,"title":230,"stem":231},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F1-overriding-methods","Overriding Methods","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.1-overriding-methods",{"path":233,"title":234,"stem":235},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F2-super-keyword","super Keyword","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.2-super-keyword",{"path":237,"title":238,"stem":239},"\u002Fshockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F3-polymorphism","Polymorphism","shockwave-curriculum\u002Flessons\u002Fch18-polymorphism-many-forms\u002F18.3-polymorphism",{"path":241,"title":242,"stem":243},"\u002Fshockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts","Interfaces as Contracts","shockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts",{"path":245,"title":246,"stem":247},"\u002Fshockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F1-lambdas-and-method-references","Lambdas & Method References","shockwave-curriculum\u002Flessons\u002Fch19-interfaces-as-contracts\u002F19.1-lambdas-and-method-references",{"path":249,"title":250,"stem":251},"\u002Fshockwave-curriculum\u002Flessons\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern","The IO-Layer Pattern","shockwave-curriculum\u002Flessons\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern",{"path":253,"title":254,"stem":255},"\u002Fshockwave-curriculum\u002Flessons\u002Fch21-static-factories\u002F21-static-factories","Static Factories","shockwave-curriculum\u002Flessons\u002Fch21-static-factories\u002F21-static-factories",{"path":257,"title":258,"stem":259},"\u002Fshockwave-curriculum\u002Flessons\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern","The Builder Pattern","shockwave-curriculum\u002Flessons\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern",{"path":261,"title":262,"stem":263},"\u002Fshockwave-curriculum\u002Flessons\u002Fch23-encapsulation-and-final\u002F1-scope-and-access","Access, final, and Immutability","shockwave-curriculum\u002Flessons\u002Fch23-encapsulation-and-final\u002F23.1-scope-and-access",{"path":265,"title":266,"stem":267},"\u002Fshockwave-curriculum\u002Flessons\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions","Optional: Avoiding Null Pointer Exceptions","shockwave-curriculum\u002Flessons\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions",{"path":269,"title":270,"stem":271},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F1-what-is-command-based-programming","What Is Command-Based Programming?","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.1-what-is-command-based-programming",{"path":273,"title":274,"stem":275},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F2-commands-and-command-compositions","Commands & Command Compositions","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.2-commands-and-command-compositions",{"path":277,"title":278,"stem":279},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F3-the-command-scheduler","The Command Scheduler","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.3-the-command-scheduler",{"path":281,"title":282,"stem":283},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F4-state-machines-logic","State Machines: Logic","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.4-state-machines-logic",{"path":285,"title":286,"stem":287},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F5-managing-transitions","Managing Transitions","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.5-managing-transitions",{"path":289,"title":290,"stem":291},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F6-binding-commands-to-triggers","Binding Commands to Triggers","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.6-binding-commands-to-triggers",{"path":293,"title":294,"stem":295},"\u002Fshockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F7-structuring-a-command-based-robot-project","Structuring a Command-Based Robot Project","shockwave-curriculum\u002Flessons\u002Fch25-command-based-programming\u002F25.7-structuring-a-command-based-robot-project",{"path":297,"title":298,"stem":299},"\u002Fshockwave-curriculum\u002Flessons\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways","Architecture Takeaways","shockwave-curriculum\u002Flessons\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways",{"path":301,"title":302,"stem":303},"\u002Fshockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F1-abstraction-and-program-design","Abstraction and Program Design","shockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F27.1-abstraction-and-program-design",{"path":305,"title":306,"stem":307},"\u002Fshockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F2-impact-of-program-design","Impact of Program Design","shockwave-curriculum\u002Flessons\u002Fch27-program-design-and-abstraction\u002F27.2-impact-of-program-design",{"path":309,"title":310,"stem":311},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F1-searching-algorithms","Searching Algorithms","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.1-searching-algorithms",{"path":313,"title":314,"stem":315},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F2-sorting-algorithms","Sorting Algorithms","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.2-sorting-algorithms",{"path":317,"title":318,"stem":319},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F3-recursion","Recursion","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.3-recursion",{"path":321,"title":322,"stem":323},"\u002Fshockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F4-recursive-searching-and-sorting","Recursive Searching and Sorting","shockwave-curriculum\u002Flessons\u002Fch28-algorithms-searching-sorting-recursion\u002F28.4-recursive-searching-and-sorting",{"path":325,"title":326,"stem":327},"\u002Fshockwave-curriculum\u002Flessons\u002Fch29-git-and-github-basics\u002F1-coming-soon","Git & GitHub Basics — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch29-git-and-github-basics\u002F29.1-coming-soon",{"path":329,"title":330,"stem":331},"\u002Fshockwave-curriculum\u002Flessons\u002Fch30-git-history-and-merging\u002F1-coming-soon","Git — History & Merging — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch30-git-history-and-merging\u002F30.1-coming-soon",{"path":333,"title":334,"stem":335},"\u002Fshockwave-curriculum\u002Flessons\u002Fch31-dev-environment-and-tooling\u002F1-coming-soon","Dev Environment & Tooling — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch31-dev-environment-and-tooling\u002F31.1-coming-soon",{"path":337,"title":338,"stem":339},"\u002Fshockwave-curriculum\u002Flessons\u002Fch32-unit-testing\u002F1-coming-soon","Unit Testing — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch32-unit-testing\u002F32.1-coming-soon",{"path":341,"title":342,"stem":343},"\u002Fshockwave-curriculum\u002Flessons\u002Fch33-advantagekit-autologging\u002F1-coming-soon","AdvantageKit — AutoLogging — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch33-advantagekit-autologging\u002F33.1-coming-soon",{"path":345,"title":346,"stem":347},"\u002Fshockwave-curriculum\u002Flessons\u002Fch34-log-replay\u002F1-coming-soon","Log Replay — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch34-log-replay\u002F34.1-coming-soon",{"path":349,"title":350,"stem":351},"\u002Fshockwave-curriculum\u002Flessons\u002Fch35-advantagescope-i-visualization\u002F1-coming-soon","AdvantageScope I: Visualization — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch35-advantagescope-i-visualization\u002F35.1-coming-soon",{"path":353,"title":354,"stem":355},"\u002Fshockwave-curriculum\u002Flessons\u002Fch36-advantagescope-ii-custom-3d-assets\u002F1-coming-soon","AdvantageScope II: Custom 3D Assets — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch36-advantagescope-ii-custom-3d-assets\u002F36.1-coming-soon",{"path":357,"title":358,"stem":359},"\u002Fshockwave-curriculum\u002Flessons\u002Fch37-autonomous-i\u002F1-coming-soon","Autonomous I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch37-autonomous-i\u002F37.1-coming-soon",{"path":361,"title":362,"stem":363},"\u002Fshockwave-curriculum\u002Flessons\u002Fch38-autonomous-ii-pathplanner-and-trajectories\u002F1-coming-soon","Autonomous II: PathPlanner & Trajectories — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch38-autonomous-ii-pathplanner-and-trajectories\u002F38.1-coming-soon",{"path":365,"title":366,"stem":367},"\u002Fshockwave-curriculum\u002Flessons\u002Fch39-control-fundamentals\u002F1-coming-soon","Control Fundamentals — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch39-control-fundamentals\u002F39.1-coming-soon",{"path":369,"title":370,"stem":371},"\u002Fshockwave-curriculum\u002Flessons\u002Fch40-motion-profiles\u002F1-coming-soon","Motion Profiles — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch40-motion-profiles\u002F40.1-coming-soon",{"path":373,"title":374,"stem":375},"\u002Fshockwave-curriculum\u002Flessons\u002Fch41-hardware-fundamentals\u002F1-coming-soon","Hardware Fundamentals — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch41-hardware-fundamentals\u002F41.1-coming-soon",{"path":377,"title":378,"stem":379},"\u002Fshockwave-curriculum\u002Flessons\u002Fch42-photonvision\u002F1-coming-soon","PhotonVision — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch42-photonvision\u002F42.1-coming-soon",{"path":381,"title":382,"stem":383},"\u002Fshockwave-curriculum\u002Flessons\u002Fch43-apriltags-and-pose\u002F1-coming-soon","AprilTags & Pose — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch43-apriltags-and-pose\u002F43.1-coming-soon",{"path":385,"title":386,"stem":387},"\u002Fshockwave-curriculum\u002Flessons\u002Fch44-subsystems-i\u002F1-coming-soon","Subsystems I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch44-subsystems-i\u002F44.1-coming-soon",{"path":389,"title":390,"stem":391},"\u002Fshockwave-curriculum\u002Flessons\u002Fch45-subsystems-ii-advanced\u002F1-coming-soon","Subsystems II — Advanced — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch45-subsystems-ii-advanced\u002F45.1-coming-soon",{"path":393,"title":394,"stem":395},"\u002Fshockwave-curriculum\u002Flessons\u002Fch46-team-utilities-i\u002F1-coming-soon","Team Utilities I — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch46-team-utilities-i\u002F46.1-coming-soon",{"path":397,"title":398,"stem":399},"\u002Fshockwave-curriculum\u002Flessons\u002Fch47-field-constants\u002F1-coming-soon","Field Constants — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch47-field-constants\u002F47.1-coming-soon",{"path":401,"title":402,"stem":403},"\u002Fshockwave-curriculum\u002Flessons\u002Fch48-troubleshooting-i-runtime-debug\u002F1-coming-soon","Troubleshooting I — Runtime Debug — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch48-troubleshooting-i-runtime-debug\u002F48.1-coming-soon",{"path":405,"title":406,"stem":407},"\u002Fshockwave-curriculum\u002Flessons\u002Fch49-troubleshooting-ii-can-and-sim\u002F1-coming-soon","Troubleshooting II: CAN & Sim — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch49-troubleshooting-ii-can-and-sim\u002F49.1-coming-soon",{"path":409,"title":410,"stem":411},"\u002Fshockwave-curriculum\u002Flessons\u002Fch50-vendor-libraries-talonfx\u002F1-coming-soon","Vendor Libraries: TalonFX — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch50-vendor-libraries-talonfx\u002F50.1-coming-soon",{"path":413,"title":414,"stem":415},"\u002Fshockwave-curriculum\u002Flessons\u002Fch51-robot-alerts\u002F1-coming-soon","Robot Alerts — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch51-robot-alerts\u002F51.1-coming-soon",{"path":417,"title":418,"stem":419},"\u002Fshockwave-curriculum\u002Flessons\u002Fch52-wpilib-commands\u002F1-coming-soon","WPILib Commands — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch52-wpilib-commands\u002F52.1-coming-soon",{"path":421,"title":422,"stem":423},"\u002Fshockwave-curriculum\u002Flessons\u002Fch53-wpilib-geometry\u002F1-coming-soon","WPILib Geometry — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch53-wpilib-geometry\u002F53.1-coming-soon",{"path":425,"title":426,"stem":427},"\u002Fshockwave-curriculum\u002Flessons\u002Fch54-networktables\u002F1-coming-soon","NetworkTables — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch54-networktables\u002F54.1-coming-soon",{"path":429,"title":430,"stem":431},"\u002Fshockwave-curriculum\u002Flessons\u002Fch55-command-scheduler\u002F1-coming-soon","Command Scheduler — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch55-command-scheduler\u002F55.1-coming-soon",{"path":433,"title":434,"stem":435},"\u002Fshockwave-curriculum\u002Flessons\u002Fch56-wpilib-timers\u002F1-coming-soon","WPILib Timers — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch56-wpilib-timers\u002F56.1-coming-soon",{"path":437,"title":438,"stem":439},"\u002Fshockwave-curriculum\u002Flessons\u002Fch57-wpilib-triggers\u002F1-coming-soon","WPILib Triggers — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch57-wpilib-triggers\u002F57.1-coming-soon",{"path":441,"title":442,"stem":443},"\u002Fshockwave-curriculum\u002Flessons\u002Fch58-vendor-units-and-conversions\u002F1-coming-soon","Vendor Units & Conversions — Coming Soon","shockwave-curriculum\u002Flessons\u002Fch58-vendor-units-and-conversions\u002F58.1-coming-soon",[445,449,453,457,461,465,469,473,477,481,485,489,493,497,501,505,509,513,517,521,525,529,533,537,541,545,549,553,557,561,565,569,573,577,581,585,589,593,597,601,605,609,613,617,621,625,629,633,637,641,645,649,653,657,661,665,669,673,677,681,685,689,693,697,701,705,709,713,717,721,725,729,733,737,741,745,749],{"path":446,"title":447,"stem":448},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming and Compilers — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":450,"title":451,"stem":452},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F1-variables-and-data-types","Variables & Data Types — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.1-variables-and-data-types",{"path":454,"title":455,"stem":456},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2-expressions-and-output","Expressions & Output — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.2-expressions-and-output",{"path":458,"title":459,"stem":460},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F3-assignment-and-input","Assignment & Input — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.3-assignment-and-input",{"path":462,"title":463,"stem":464},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F4-casting-and-ranges-of-values","Casting & Ranges of Values — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.4-casting-and-ranges-of-values",{"path":466,"title":467,"stem":468},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F5-compound-assignment-operators","Compound Assignment Operators — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch02-variables-and-types\u002F2.5-compound-assignment-operators",{"path":470,"title":471,"stem":472},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F1-apis-and-libraries","APIs and Libraries — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3.1-apis-and-libraries",{"path":474,"title":475,"stem":476},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F2-documentation-with-comments-and-preconditions","Documentation with Comments and Preconditions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3.2-documentation-with-comments-and-preconditions",{"path":478,"title":479,"stem":480},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3-packages-and-imports","Packages & Imports — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch03-apis-libraries-and-documentation\u002F3.3-packages-and-imports",{"path":482,"title":483,"stem":484},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F1-methods-signatures-and-parameters","Methods, Signatures & Parameters — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters",{"path":486,"title":487,"stem":488},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F2-calling-class-methods","Calling Class Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.2-calling-class-methods",{"path":490,"title":491,"stem":492},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F3-using-the-math-class","Using the Math Class — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.3-using-the-math-class",{"path":494,"title":495,"stem":496},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4-objects-instances-of-classes","Objects — Instances of Classes — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.4-objects-instances-of-classes",{"path":498,"title":499,"stem":500},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F5-creating-and-initializing-objects-constructors","Creating & Initializing Objects: Constructors — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.5-creating-and-initializing-objects-constructors",{"path":502,"title":503,"stem":504},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F6-calling-instance-methods","Calling Instance Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch04-using-objects-and-calling-methods\u002F4.6-calling-instance-methods",{"path":506,"title":507,"stem":508},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F1-5.2-if-statements-and-for-loops","if Statements & For Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.1-5.2-if-statements-and-for-loops",{"path":510,"title":511,"stem":512},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":514,"title":515,"stem":516},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F11-informal-runtime-analysis-of-loops","Informal Runtime Analysis of Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.11-informal-runtime-analysis-of-loops",{"path":518,"title":519,"stem":520},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F12-switch-statements-and-expressions","switch Statements and Expressions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.12-switch-statements-and-expressions",{"path":522,"title":523,"stem":524},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F3-algorithms-with-selection-and-repetition","Algorithms with Selection and Repetition — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.3-algorithms-with-selection-and-repetition",{"path":526,"title":527,"stem":528},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":530,"title":531,"stem":532},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5-nested-if-statements","Nested if Statements — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.5-nested-if-statements",{"path":534,"title":535,"stem":536},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F6-compound-boolean-expressions","Compound Boolean Expressions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.6-compound-boolean-expressions",{"path":538,"title":539,"stem":540},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F7-comparing-boolean-expressions-de-morgans-laws","Comparing Boolean Expressions (De Morgan's Laws) — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.7-comparing-boolean-expressions-de-morgans-laws",{"path":542,"title":543,"stem":544},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F8-while-loops","While Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.8-while-loops",{"path":546,"title":547,"stem":548},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F9-implementing-selection-and-iteration-algorithms","Implementing Selection and Iteration Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch05-control-structures\u002F5.9-implementing-selection-and-iteration-algorithms",{"path":550,"title":551,"stem":552},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F1-strings","Strings — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F6.1-strings",{"path":554,"title":555,"stem":556},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F2-string-algorithms","String Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch06-strings\u002F6.2-string-algorithms",{"path":558,"title":559,"stem":560},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F1-anatomy-of-a-java-class","Anatomy of a Java Class — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class",{"path":562,"title":563,"stem":564},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F2-methods-how-to-write-them","Methods: How to Write Them — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them",{"path":566,"title":567,"stem":568},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F3-methods-passing-and-returning-references-of-an-object","Methods: Passing & Returning References of an Object — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.3-methods-passing-and-returning-references-of-an-object",{"path":570,"title":571,"stem":572},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F4-class-static-variables-and-methods","Class (static) Variables & Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods",{"path":574,"title":575,"stem":576},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch08-constructors-and-this\u002F1-8.2-constructors-and-this","Constructors & \"this\" — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch08-constructors-and-this\u002F8.1-8.2-constructors-and-this",{"path":578,"title":579,"stem":580},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F1-array-creation-and-access","Array Creation and Access — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.1-array-creation-and-access",{"path":582,"title":583,"stem":584},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F2-arraylist-and-its-methods","ArrayList and its Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.2-arraylist-and-its-methods",{"path":586,"title":587,"stem":588},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","HashMap (Dictionary) Data Structure — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":590,"title":591,"stem":592},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":594,"title":595,"stem":596},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F5-implementing-array-algorithms","Implementing Array Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.5-implementing-array-algorithms",{"path":598,"title":599,"stem":600},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":602,"title":603,"stem":604},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F7-implementing-arraylist-algorithms","Implementing ArrayList Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms",{"path":606,"title":607,"stem":608},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F8-using-text-files","Using Text Files — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch09-storing-data\u002F9.8-using-text-files",{"path":610,"title":611,"stem":612},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F1-2d-array-creation-and-access","2D Array Creation and Access — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F10.1-2d-array-creation-and-access",{"path":614,"title":615,"stem":616},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F2-2d-array-traversals-nested-loops","2D Array Traversals: Nested Loops — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops",{"path":618,"title":619,"stem":620},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F3-implementing-2d-array-algorithms","Implementing 2D Array Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms",{"path":622,"title":623,"stem":624},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch11-enums-named-choices\u002F11-enums-named-choices","Enums: Named Choices — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch11-enums-named-choices\u002F11-enums-named-choices",{"path":626,"title":627,"stem":628},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch","Exceptions & try\u002Fcatch — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch",{"path":630,"title":631,"stem":632},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch13-common-gotchas\u002F13-common-gotchas","Common Gotchas — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch13-common-gotchas\u002F13-common-gotchas",{"path":634,"title":635,"stem":636},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch15-advanced-collections\u002F15-advanced-collections","Advanced Collections (Set\u002FQueue\u002FMap) — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch15-advanced-collections\u002F15-advanced-collections",{"path":638,"title":639,"stem":640},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics","Writing Your Own Generics — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics",{"path":642,"title":643,"stem":644},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F1-inheritance-superclass-subclass","Inheritance, Superclass, Subclass — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.1-inheritance-superclass-subclass",{"path":646,"title":647,"stem":648},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F2-inheritance-and-constructors","Inheritance and Constructors — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.2-inheritance-and-constructors",{"path":650,"title":651,"stem":652},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F3-inheritance-hierarchies","Inheritance Hierarchies — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.3-inheritance-hierarchies",{"path":654,"title":655,"stem":656},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F4-object-superclass","Object Superclass — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.4-object-superclass",{"path":658,"title":659,"stem":660},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F5-abstract-classes-and-methods","Abstract Classes and Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch17-inheritance-and-abstractions\u002F17.5-abstract-classes-and-methods",{"path":662,"title":663,"stem":664},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F1-overriding-methods","Overriding Methods — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F18.1-overriding-methods",{"path":666,"title":667,"stem":668},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F2-super-keyword","super Keyword — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F18.2-super-keyword",{"path":670,"title":671,"stem":672},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F3-polymorphism","Polymorphism — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch18-polymorphism-many-forms\u002F18.3-polymorphism",{"path":674,"title":675,"stem":676},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts","Interfaces as Contracts — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts",{"path":678,"title":679,"stem":680},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch19-interfaces-as-contracts\u002F1-lambdas-and-method-references","Lambdas & Method References — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch19-interfaces-as-contracts\u002F19.1-lambdas-and-method-references",{"path":682,"title":683,"stem":684},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern","The IO-Layer Pattern — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern",{"path":686,"title":687,"stem":688},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch21-static-factories\u002F21-static-factories","Static Factories — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch21-static-factories\u002F21-static-factories",{"path":690,"title":691,"stem":692},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern","The Builder Pattern — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern",{"path":694,"title":695,"stem":696},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch23-encapsulation-and-final\u002F1-scope-and-access","Access, final, and Immutability — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch23-encapsulation-and-final\u002F23.1-scope-and-access",{"path":698,"title":699,"stem":700},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions","Optional: Avoiding Null Pointer Exceptions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions",{"path":702,"title":703,"stem":704},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F1-what-is-command-based-programming","What Is Command-Based Programming? — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.1-what-is-command-based-programming",{"path":706,"title":707,"stem":708},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F2-commands-and-command-compositions","Commands & Command Compositions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.2-commands-and-command-compositions",{"path":710,"title":711,"stem":712},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F3-the-command-scheduler","The Command Scheduler — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.3-the-command-scheduler",{"path":714,"title":715,"stem":716},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F4-state-machines-logic","State Machines: Logic — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.4-state-machines-logic",{"path":718,"title":719,"stem":720},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F5-managing-transitions","Managing Transitions — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.5-managing-transitions",{"path":722,"title":723,"stem":724},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F6-binding-commands-to-triggers","Binding Commands to Triggers — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.6-binding-commands-to-triggers",{"path":726,"title":727,"stem":728},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F7-structuring-a-command-based-robot-project","Structuring a Command-Based Robot Project — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch25-command-based-programming\u002F25.7-structuring-a-command-based-robot-project",{"path":730,"title":731,"stem":732},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways","Architecture Takeaways — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways",{"path":734,"title":735,"stem":736},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch27-program-design-and-abstraction\u002F1-abstraction-and-program-design","Abstraction and Program Design — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch27-program-design-and-abstraction\u002F27.1-abstraction-and-program-design",{"path":738,"title":739,"stem":740},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F1-searching-algorithms","Searching Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F28.1-searching-algorithms",{"path":742,"title":743,"stem":744},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F2-sorting-algorithms","Sorting Algorithms — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F28.2-sorting-algorithms",{"path":746,"title":747,"stem":748},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F3-recursion","Recursion — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F28.3-recursion",{"path":750,"title":751,"stem":752},"\u002Fshockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F4-recursive-searching-and-sorting","Recursive Searching and Sorting — Worked Example","shockwave-curriculum\u002Fexamples\u002Fch28-algorithms-searching-sorting-recursion\u002F28.4-recursive-searching-and-sorting",[754,758,762,766,770,774,778,782,786,790,794,798,802,806,810,814,818,822,826,830,834,838,842,846,850,854,858,862,866,870,874,878,882,886,890,894,898,902,906,910,914,918,922,926,930,934,938,942,946,950,954,958,962,966,970,974,978,982,986,990,994,998,1002,1006,1010,1014,1018,1022,1026,1030,1034,1038,1042,1046,1050,1054,1058,1062,1066],{"path":755,"title":756,"stem":757},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch01-why-java-for-frc\u002F2-intro-to-algorithms-programming-and-compilers","Intro to Algorithms, Programming and Compilers — Exercises","shockwave-curriculum\u002Fexercises\u002Fch01-why-java-for-frc\u002F1.2-intro-to-algorithms-programming-and-compilers",{"path":759,"title":760,"stem":761},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F1-variables-and-data-types","Variables & Data Types — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.1-variables-and-data-types",{"path":763,"title":764,"stem":765},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2-expressions-and-output","Expressions & Output — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.2-expressions-and-output",{"path":767,"title":768,"stem":769},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F3-assignment-and-input","Assignment & Input — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.3-assignment-and-input",{"path":771,"title":772,"stem":773},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F4-casting-and-ranges-of-values","Casting & Ranges of Values — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.4-casting-and-ranges-of-values",{"path":775,"title":776,"stem":777},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F5-compound-assignment-operators","Compound Assignment Operators — Exercises","shockwave-curriculum\u002Fexercises\u002Fch02-variables-and-types\u002F2.5-compound-assignment-operators",{"path":779,"title":780,"stem":781},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F1-apis-and-libraries","APIs and Libraries — Exercises","shockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3.1-apis-and-libraries",{"path":783,"title":784,"stem":785},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F2-documentation-with-comments-and-preconditions","Documentation with Comments and Preconditions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3.2-documentation-with-comments-and-preconditions",{"path":787,"title":788,"stem":789},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3-packages-and-imports","Packages & Imports — Exercises","shockwave-curriculum\u002Fexercises\u002Fch03-apis-libraries-and-documentation\u002F3.3-packages-and-imports",{"path":791,"title":792,"stem":793},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F1-methods-signatures-and-parameters","Methods, Signatures & Parameters — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.1-methods-signatures-and-parameters",{"path":795,"title":796,"stem":797},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F2-calling-class-methods","Calling Class Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.2-calling-class-methods",{"path":799,"title":800,"stem":801},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F3-using-the-math-class","Using the Math Class — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.3-using-the-math-class",{"path":803,"title":804,"stem":805},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4-objects-instances-of-classes","Objects — Instances of Classes — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.4-objects-instances-of-classes",{"path":807,"title":808,"stem":809},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F5-creating-and-initializing-objects-constructors","Creating & Initializing Objects: Constructors — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.5-creating-and-initializing-objects-constructors",{"path":811,"title":812,"stem":813},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F6-calling-instance-methods","Calling Instance Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch04-using-objects-and-calling-methods\u002F4.6-calling-instance-methods",{"path":815,"title":816,"stem":817},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F1-5.2-if-statements-and-for-loops","if Statements & For Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.1-5.2-if-statements-and-for-loops",{"path":819,"title":820,"stem":821},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F10-nested-iteration","Nested Iteration — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.10-nested-iteration",{"path":823,"title":824,"stem":825},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F11-informal-runtime-analysis-of-loops","Informal Runtime Analysis of Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.11-informal-runtime-analysis-of-loops",{"path":827,"title":828,"stem":829},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F12-switch-statements-and-expressions","switch Statements and Expressions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.12-switch-statements-and-expressions",{"path":831,"title":832,"stem":833},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F3-algorithms-with-selection-and-repetition","Algorithms with Selection and Repetition — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.3-algorithms-with-selection-and-repetition",{"path":835,"title":836,"stem":837},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F4-boolean-expressions","Boolean Expressions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.4-boolean-expressions",{"path":839,"title":840,"stem":841},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5-nested-if-statements","Nested if Statements — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.5-nested-if-statements",{"path":843,"title":844,"stem":845},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F6-compound-boolean-expressions","Compound Boolean Expressions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.6-compound-boolean-expressions",{"path":847,"title":848,"stem":849},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F7-comparing-boolean-expressions-de-morgans-laws","Comparing Boolean Expressions (De Morgan's Laws) — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.7-comparing-boolean-expressions-de-morgans-laws",{"path":851,"title":852,"stem":853},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F8-while-loops","While Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.8-while-loops",{"path":855,"title":856,"stem":857},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F9-implementing-selection-and-iteration-algorithms","Implementing Selection and Iteration Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch05-control-structures\u002F5.9-implementing-selection-and-iteration-algorithms",{"path":859,"title":860,"stem":861},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F1-strings","Strings — Exercises","shockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F6.1-strings",{"path":863,"title":864,"stem":865},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F2-string-algorithms","String Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch06-strings\u002F6.2-string-algorithms",{"path":867,"title":868,"stem":869},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F1-anatomy-of-a-java-class","Anatomy of a Java Class — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.1-anatomy-of-a-java-class",{"path":871,"title":872,"stem":873},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F2-methods-how-to-write-them","Methods: How to Write Them — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.2-methods-how-to-write-them",{"path":875,"title":876,"stem":877},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F3-methods-passing-and-returning-references-of-an-object","Methods: Passing & Returning References of an Object — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.3-methods-passing-and-returning-references-of-an-object",{"path":879,"title":880,"stem":881},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F4-class-static-variables-and-methods","Class (static) Variables & Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods",{"path":883,"title":884,"stem":885},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch08-constructors-and-this\u002F1-8.2-constructors-and-this","Constructors & \"this\" — Exercises","shockwave-curriculum\u002Fexercises\u002Fch08-constructors-and-this\u002F8.1-8.2-constructors-and-this",{"path":887,"title":888,"stem":889},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F1-array-creation-and-access","Array Creation and Access — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.1-array-creation-and-access",{"path":891,"title":892,"stem":893},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F2-arraylist-and-its-methods","ArrayList and its Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.2-arraylist-and-its-methods",{"path":895,"title":896,"stem":897},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F3-optional-hashmap-dictionary-data-structure","HashMap (Dictionary) Data Structure — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.3-optional-hashmap-dictionary-data-structure",{"path":899,"title":900,"stem":901},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F4-array-traversals","Array Traversals — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.4-array-traversals",{"path":903,"title":904,"stem":905},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F5-implementing-array-algorithms","Implementing Array Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.5-implementing-array-algorithms",{"path":907,"title":908,"stem":909},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F6-arraylist-traversals","ArrayList Traversals — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.6-arraylist-traversals",{"path":911,"title":912,"stem":913},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F7-implementing-arraylist-algorithms","Implementing ArrayList Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.7-implementing-arraylist-algorithms",{"path":915,"title":916,"stem":917},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F8-using-text-files","Using Text Files — Exercises","shockwave-curriculum\u002Fexercises\u002Fch09-storing-data\u002F9.8-using-text-files",{"path":919,"title":920,"stem":921},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F1-2d-array-creation-and-access","2D Array Creation and Access — Exercises","shockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F10.1-2d-array-creation-and-access",{"path":923,"title":924,"stem":925},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F2-2d-array-traversals-nested-loops","2D Array Traversals: Nested Loops — Exercises","shockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F10.2-2d-array-traversals-nested-loops",{"path":927,"title":928,"stem":929},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F3-implementing-2d-array-algorithms","Implementing 2D Array Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch10-2d-arrays\u002F10.3-implementing-2d-array-algorithms",{"path":931,"title":932,"stem":933},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch11-enums-named-choices\u002F11-enums-named-choices","Enums: Named Choices — Exercises","shockwave-curriculum\u002Fexercises\u002Fch11-enums-named-choices\u002F11-enums-named-choices",{"path":935,"title":936,"stem":937},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch","Exceptions & try\u002Fcatch — Exercises","shockwave-curriculum\u002Fexercises\u002Fch12-exceptions-and-try-catch\u002F12-exceptions-and-try-catch",{"path":939,"title":940,"stem":941},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch13-common-gotchas\u002F13-common-gotchas","Common Gotchas — Exercises","shockwave-curriculum\u002Fexercises\u002Fch13-common-gotchas\u002F13-common-gotchas",{"path":943,"title":944,"stem":945},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch14-why-design-patterns\u002F14-why-design-patterns","Why Design Patterns? — Exercises","shockwave-curriculum\u002Fexercises\u002Fch14-why-design-patterns\u002F14-why-design-patterns",{"path":947,"title":948,"stem":949},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch15-advanced-collections\u002F15-advanced-collections","Advanced Collections (Set\u002FQueue\u002FMap) — Exercises","shockwave-curriculum\u002Fexercises\u002Fch15-advanced-collections\u002F15-advanced-collections",{"path":951,"title":952,"stem":953},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics","Writing Your Own Generics — Exercises","shockwave-curriculum\u002Fexercises\u002Fch16-writing-your-own-generics\u002F16-writing-your-own-generics",{"path":955,"title":956,"stem":957},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F1-inheritance-superclass-subclass","Inheritance, Superclass, Subclass — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.1-inheritance-superclass-subclass",{"path":959,"title":960,"stem":961},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F2-inheritance-and-constructors","Inheritance and Constructors — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.2-inheritance-and-constructors",{"path":963,"title":964,"stem":965},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F3-inheritance-hierarchies","Inheritance Hierarchies — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.3-inheritance-hierarchies",{"path":967,"title":968,"stem":969},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F4-object-superclass","Object Superclass — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.4-object-superclass",{"path":971,"title":972,"stem":973},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F5-abstract-classes-and-methods","Abstract Classes and Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch17-inheritance-and-abstractions\u002F17.5-abstract-classes-and-methods",{"path":975,"title":976,"stem":977},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F1-overriding-methods","Overriding Methods — Exercises","shockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F18.1-overriding-methods",{"path":979,"title":980,"stem":981},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F2-super-keyword","super Keyword — Exercises","shockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F18.2-super-keyword",{"path":983,"title":984,"stem":985},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F3-polymorphism","Polymorphism — Exercises","shockwave-curriculum\u002Fexercises\u002Fch18-polymorphism-many-forms\u002F18.3-polymorphism",{"path":987,"title":988,"stem":989},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts","Interfaces as Contracts — Exercises","shockwave-curriculum\u002Fexercises\u002Fch19-interfaces-as-contracts\u002F19-interfaces-as-contracts",{"path":991,"title":992,"stem":993},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch19-interfaces-as-contracts\u002F1-lambdas-and-method-references","Lambdas & Method References — Exercises","shockwave-curriculum\u002Fexercises\u002Fch19-interfaces-as-contracts\u002F19.1-lambdas-and-method-references",{"path":995,"title":996,"stem":997},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern","The IO-Layer Pattern — Exercises","shockwave-curriculum\u002Fexercises\u002Fch20-the-io-layer-pattern\u002F20-the-io-layer-pattern",{"path":999,"title":1000,"stem":1001},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch21-static-factories\u002F21-static-factories","Static Factories — Exercises","shockwave-curriculum\u002Fexercises\u002Fch21-static-factories\u002F21-static-factories",{"path":1003,"title":1004,"stem":1005},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern","The Builder Pattern — Exercises","shockwave-curriculum\u002Fexercises\u002Fch22-the-builder-pattern\u002F22-the-builder-pattern",{"path":1007,"title":1008,"stem":1009},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch23-encapsulation-and-final\u002F1-scope-and-access","Access, final, and Immutability — Exercises","shockwave-curriculum\u002Fexercises\u002Fch23-encapsulation-and-final\u002F23.1-scope-and-access",{"path":1011,"title":1012,"stem":1013},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions","Optional: Avoiding Null Pointer Exceptions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch24-optional-avoiding-null-pointer-exceptions\u002F24-optional-avoiding-null-pointer-exceptions",{"path":1015,"title":1016,"stem":1017},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F1-what-is-command-based-programming","What Is Command-Based Programming? — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.1-what-is-command-based-programming",{"path":1019,"title":1020,"stem":1021},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F2-commands-and-command-compositions","Commands & Command Compositions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.2-commands-and-command-compositions",{"path":1023,"title":1024,"stem":1025},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F3-the-command-scheduler","The Command Scheduler — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.3-the-command-scheduler",{"path":1027,"title":1028,"stem":1029},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F4-state-machines-logic","State Machines: Logic — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.4-state-machines-logic",{"path":1031,"title":1032,"stem":1033},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F5-managing-transitions","Managing Transitions — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.5-managing-transitions",{"path":1035,"title":1036,"stem":1037},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F6-binding-commands-to-triggers","Binding Commands to Triggers — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.6-binding-commands-to-triggers",{"path":1039,"title":1040,"stem":1041},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F7-structuring-a-command-based-robot-project","Structuring a Command-Based Robot Project — Exercises","shockwave-curriculum\u002Fexercises\u002Fch25-command-based-programming\u002F25.7-structuring-a-command-based-robot-project",{"path":1043,"title":1044,"stem":1045},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways","Architecture Takeaways — Exercises","shockwave-curriculum\u002Fexercises\u002Fch26-architecture-takeaways\u002F26-architecture-takeaways",{"path":1047,"title":1048,"stem":1049},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch27-program-design-and-abstraction\u002F1-abstraction-and-program-design","Abstraction and Program Design — Exercises","shockwave-curriculum\u002Fexercises\u002Fch27-program-design-and-abstraction\u002F27.1-abstraction-and-program-design",{"path":1051,"title":1052,"stem":1053},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch27-program-design-and-abstraction\u002F2-impact-of-program-design","Impact of Program Design — Exercises","shockwave-curriculum\u002Fexercises\u002Fch27-program-design-and-abstraction\u002F27.2-impact-of-program-design",{"path":1055,"title":1056,"stem":1057},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F1-searching-algorithms","Searching Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F28.1-searching-algorithms",{"path":1059,"title":1060,"stem":1061},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F2-sorting-algorithms","Sorting Algorithms — Exercises","shockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F28.2-sorting-algorithms",{"path":1063,"title":1064,"stem":1065},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F3-recursion","Recursion — Exercises","shockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F28.3-recursion",{"path":1067,"title":1068,"stem":1069},"\u002Fshockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F4-recursive-searching-and-sorting","Recursive Searching and Sorting — Exercises","shockwave-curriculum\u002Fexercises\u002Fch28-algorithms-searching-sorting-recursion\u002F28.4-recursive-searching-and-sorting",{"id":1071,"title":134,"body":1072,"description":1107,"extension":1522,"meta":1523,"navigation":1153,"path":133,"seo":1526,"stem":135,"__hash__":1527},"lessons\u002Fshockwave-curriculum\u002Flessons\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods.md",{"type":1073,"value":1074,"toc":1513},"minimark",[1075,1079,1084,1101,1185,1208,1212,1220,1264,1267,1300,1304,1309,1374,1377,1384,1389,1398,1404,1415,1443,1447,1463,1467,1498,1509],[1076,1077,134],"h1",{"id":1078},"class-static-variables-methods",[1080,1081,1083],"h2",{"id":1082},"class-methods-belong-to-the-class-not-an-object","Class Methods Belong to the Class, Not an Object",[1085,1086,1087,1088,1092,1093,1096,1097,1100],"p",{},"A ",[1089,1090,1091],"code",{},"static"," method or variable belongs to the class itself — there's exactly one shared copy, no matter how many objects (or zero objects) exist. ",[1089,1094,1095],{},"Math.random()"," is the example you already know: you never make a ",[1089,1098,1099],{},"new Math()"," first.",[1102,1103,1108],"pre",{"className":1104,"code":1105,"language":1106,"meta":1107,"style":1107},"language-java shiki shiki-themes github-light github-dark","public class Subsystem\n{\n    public static int instanceCount = 0; \u002F\u002F one shared copy for ALL Subsystem objects\n    \u002F\u002F (kept public here for brevity, so the examples below can read\u002Fwrite it directly —\n    \u002F\u002F in real code a static field is usually private, with a static getter, same as an\n    \u002F\u002F instance field, Ch.7.2)\n\n    public Subsystem()\n    {\n        instanceCount++; \u002F\u002F every constructor call increments the ONE shared counter\n    }\n}\n","java","",[1089,1109,1110,1118,1124,1130,1136,1142,1148,1155,1161,1167,1173,1179],{"__ignoreMap":1107},[1111,1112,1115],"span",{"class":1113,"line":1114},"line",1,[1111,1116,1117],{},"public class Subsystem\n",[1111,1119,1121],{"class":1113,"line":1120},2,[1111,1122,1123],{},"{\n",[1111,1125,1127],{"class":1113,"line":1126},3,[1111,1128,1129],{},"    public static int instanceCount = 0; \u002F\u002F one shared copy for ALL Subsystem objects\n",[1111,1131,1133],{"class":1113,"line":1132},4,[1111,1134,1135],{},"    \u002F\u002F (kept public here for brevity, so the examples below can read\u002Fwrite it directly —\n",[1111,1137,1139],{"class":1113,"line":1138},5,[1111,1140,1141],{},"    \u002F\u002F in real code a static field is usually private, with a static getter, same as an\n",[1111,1143,1145],{"class":1113,"line":1144},6,[1111,1146,1147],{},"    \u002F\u002F instance field, Ch.7.2)\n",[1111,1149,1151],{"class":1113,"line":1150},7,[1111,1152,1154],{"emptyLinePlaceholder":1153},true,"\n",[1111,1156,1158],{"class":1113,"line":1157},8,[1111,1159,1160],{},"    public Subsystem()\n",[1111,1162,1164],{"class":1113,"line":1163},9,[1111,1165,1166],{},"    {\n",[1111,1168,1170],{"class":1113,"line":1169},10,[1111,1171,1172],{},"        instanceCount++; \u002F\u002F every constructor call increments the ONE shared counter\n",[1111,1174,1176],{"class":1113,"line":1175},11,[1111,1177,1178],{},"    }\n",[1111,1180,1182],{"class":1113,"line":1181},12,[1111,1183,1184],{},"}\n",[1085,1186,1187,1188,1190,1191,1195,1196,1199,1200,1203,1204,1207],{},"Read or write a ",[1089,1189,1091],{}," member through the ",[1192,1193,1194],"strong",{},"class name",", not through an object — ",[1089,1197,1198],{},"Subsystem.instanceCount",", not ",[1089,1201,1202],{},"someSubsystem.instanceCount",". Accessing it through an object variable actually compiles (Java allows it), but it's misleading: it reads as if each object had its own ",[1089,1205,1206],{},"instanceCount",", when there's really only ever the one, shared copy.",[1080,1209,1211],{"id":1210},"static-code-cant-touch-instance-data-directly","Static Code Can't Touch Instance Data Directly",[1085,1213,1214,1215,1219],{},"A static method can access other static members freely, but it ",[1216,1217,1218],"em",{},"cannot"," reach an instance variable or call an instance method — because static code runs without any particular object in hand, and instance data only exists per-object.",[1102,1221,1223],{"className":1104,"code":1222,"language":1106,"meta":1107,"style":1107},"public class Subsystem\n{\n    private double currentSpeed; \u002F\u002F instance variable — belongs to ONE object\n\n    public static void printStatic()\n    {\n        System.out.println(currentSpeed); \u002F\u002F compile error! no object to read this from\n    }\n}\n",[1089,1224,1225,1229,1233,1238,1242,1247,1251,1256,1260],{"__ignoreMap":1107},[1111,1226,1227],{"class":1113,"line":1114},[1111,1228,1117],{},[1111,1230,1231],{"class":1113,"line":1120},[1111,1232,1123],{},[1111,1234,1235],{"class":1113,"line":1126},[1111,1236,1237],{},"    private double currentSpeed; \u002F\u002F instance variable — belongs to ONE object\n",[1111,1239,1240],{"class":1113,"line":1132},[1111,1241,1154],{"emptyLinePlaceholder":1153},[1111,1243,1244],{"class":1113,"line":1138},[1111,1245,1246],{},"    public static void printStatic()\n",[1111,1248,1249],{"class":1113,"line":1144},[1111,1250,1166],{},[1111,1252,1253],{"class":1113,"line":1150},[1111,1254,1255],{},"        System.out.println(currentSpeed); \u002F\u002F compile error! no object to read this from\n",[1111,1257,1258],{"class":1113,"line":1157},[1111,1259,1178],{},[1111,1261,1262],{"class":1113,"line":1163},[1111,1263,1184],{},[1085,1265,1266],{},"The fix, if a static method genuinely needs instance data, is to pass in an actual object as a parameter:",[1102,1268,1270],{"className":1104,"code":1269,"language":1106,"meta":1107,"style":1107},"\u002F\u002F inside Subsystem — private access to another Subsystem's field is allowed\n\u002F\u002F here because it's still the same class, just a different object (Ch.7.1)\npublic static void printSpeed(Subsystem s)\n{\n    System.out.println(s.currentSpeed); \u002F\u002F fine — reading a specific object's data\n}\n",[1089,1271,1272,1277,1282,1287,1291,1296],{"__ignoreMap":1107},[1111,1273,1274],{"class":1113,"line":1114},[1111,1275,1276],{},"\u002F\u002F inside Subsystem — private access to another Subsystem's field is allowed\n",[1111,1278,1279],{"class":1113,"line":1120},[1111,1280,1281],{},"\u002F\u002F here because it's still the same class, just a different object (Ch.7.1)\n",[1111,1283,1284],{"class":1113,"line":1126},[1111,1285,1286],{},"public static void printSpeed(Subsystem s)\n",[1111,1288,1289],{"class":1113,"line":1132},[1111,1290,1123],{},[1111,1292,1293],{"class":1113,"line":1138},[1111,1294,1295],{},"    System.out.println(s.currentSpeed); \u002F\u002F fine — reading a specific object's data\n",[1111,1297,1298],{"class":1113,"line":1144},[1111,1299,1184],{},[1080,1301,1303],{"id":1302},"class-variables-one-shared-copy","Class Variables: One Shared Copy",[1085,1305,1087,1306,1308],{},[1089,1307,1091],{}," variable is shared by every object of the class — changing it from one object's constructor or method affects what every other object sees, since there's only ever one copy.",[1102,1310,1312],{"className":1104,"code":1311,"language":1106,"meta":1107,"style":1107},"public class Subsystem\n{\n    \u002F\u002F public for brevity here too — see the note above\n    public static double maxObservedCurrent = 0;\n\n    public Subsystem(double current)\n    {\n        if (current > maxObservedCurrent)\n        {\n            maxObservedCurrent = current; \u002F\u002F updates the ONE shared value\n        }\n    }\n}\n",[1089,1313,1314,1318,1322,1327,1332,1336,1341,1345,1350,1355,1360,1365,1369],{"__ignoreMap":1107},[1111,1315,1316],{"class":1113,"line":1114},[1111,1317,1117],{},[1111,1319,1320],{"class":1113,"line":1120},[1111,1321,1123],{},[1111,1323,1324],{"class":1113,"line":1126},[1111,1325,1326],{},"    \u002F\u002F public for brevity here too — see the note above\n",[1111,1328,1329],{"class":1113,"line":1132},[1111,1330,1331],{},"    public static double maxObservedCurrent = 0;\n",[1111,1333,1334],{"class":1113,"line":1138},[1111,1335,1154],{"emptyLinePlaceholder":1153},[1111,1337,1338],{"class":1113,"line":1144},[1111,1339,1340],{},"    public Subsystem(double current)\n",[1111,1342,1343],{"class":1113,"line":1150},[1111,1344,1166],{},[1111,1346,1347],{"class":1113,"line":1157},[1111,1348,1349],{},"        if (current > maxObservedCurrent)\n",[1111,1351,1352],{"class":1113,"line":1163},[1111,1353,1354],{},"        {\n",[1111,1356,1357],{"class":1113,"line":1169},[1111,1358,1359],{},"            maxObservedCurrent = current; \u002F\u002F updates the ONE shared value\n",[1111,1361,1362],{"class":1113,"line":1175},[1111,1363,1364],{},"        }\n",[1111,1366,1367],{"class":1113,"line":1181},[1111,1368,1178],{},[1111,1370,1372],{"class":1113,"line":1371},13,[1111,1373,1184],{},[1085,1375,1376],{},"This is a genuinely common real use: tracking a running maximum, minimum, or count across every object ever created from a class.",[1080,1378,1380,1383],{"id":1379},"final-for-constants",[1089,1381,1382],{},"final"," for Constants",[1085,1385,1386,1388],{},[1089,1387,1382],{}," makes a variable's value unchangeable after it's set — used for true constants, conventionally named in all caps:",[1102,1390,1392],{"className":1104,"code":1391,"language":1106,"meta":1107,"style":1107},"public static final double MAX_SPEED = 1.0;\n",[1089,1393,1394],{"__ignoreMap":1107},[1111,1395,1396],{"class":1113,"line":1114},[1111,1397,1391],{},[1085,1399,1400,1401,1403],{},"Trying to reassign a ",[1089,1402,1382],{}," variable later is a compile error.",[1085,1405,1406,1407,1410,1411,1414],{},"A common pattern: gather a class's constants into their own class, so other code reads them as ",[1089,1408,1409],{},"Constants.MAX_SPEED"," instead of scattering ",[1089,1412,1413],{},"public static final"," fields across whatever class happens to use them first:",[1102,1416,1418],{"className":1104,"code":1417,"language":1106,"meta":1107,"style":1107},"public class Constants\n{\n    public static final double MAX_SPEED = 1.0;\n    public static final int MAX_CURRENT_AMPS = 40;\n}\n",[1089,1419,1420,1425,1429,1434,1439],{"__ignoreMap":1107},[1111,1421,1422],{"class":1113,"line":1114},[1111,1423,1424],{},"public class Constants\n",[1111,1426,1427],{"class":1113,"line":1120},[1111,1428,1123],{},[1111,1430,1431],{"class":1113,"line":1126},[1111,1432,1433],{},"    public static final double MAX_SPEED = 1.0;\n",[1111,1435,1436],{"class":1113,"line":1132},[1111,1437,1438],{},"    public static final int MAX_CURRENT_AMPS = 40;\n",[1111,1440,1441],{"class":1113,"line":1138},[1111,1442,1184],{},[1080,1444,1446],{"id":1445},"common-pitfalls","Common Pitfalls",[1448,1449,1450,1457],"ul",{},[1451,1452,1453,1456],"li",{},[1192,1454,1455],{},"Trying to read an instance variable from a static method."," It doesn't compile — static code has no specific object to read from, unless one is explicitly passed in as a parameter.",[1451,1458,1459,1462],{},[1192,1460,1461],{},"Expecting a static variable to have a separate copy per object."," It doesn't — there's exactly one, shared by everything, which is precisely what makes it useful for things like a running count or max.",[1080,1464,1466],{"id":1465},"key-takeaways","Key Takeaways",[1448,1468,1469,1474,1477,1480,1489],{},[1451,1470,1471,1473],{},[1089,1472,1091],{}," members belong to the class itself — one shared copy, independent of how many objects exist.",[1451,1475,1476],{},"Static code cannot access instance variables or instance methods directly — it needs an actual object passed in to do that.",[1451,1478,1479],{},"A static variable's value is shared across every object of the class — useful for running totals, counts, or maximums.",[1451,1481,1482,1483,1485,1486,1488],{},"Access a ",[1089,1484,1091],{}," member through the class name (",[1089,1487,1198],{},"), not through an object — an object reference compiles but is misleading.",[1451,1490,1491,1493,1494,1497],{},[1089,1492,1382],{}," marks a variable as an unchangeable constant, conventionally named in ALL_CAPS; a dedicated ",[1089,1495,1496],{},"Constants"," class is a common place to collect them.",[1085,1499,1500,1501,1504,1505,1508],{},"Derived from ",[1089,1502,1503],{},"csawesome-2026",": ",[1089,1506,1507],{},"unit-3-class-creation\u002F3.07-class-static-variables-and-methods.md"," (CSA 3.7)",[1510,1511,1512],"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":1107,"searchDepth":1120,"depth":1120,"links":1514},[1515,1516,1517,1518,1520,1521],{"id":1082,"depth":1120,"text":1083},{"id":1210,"depth":1120,"text":1211},{"id":1302,"depth":1120,"text":1303},{"id":1379,"depth":1120,"text":1519},"final for Constants",{"id":1445,"depth":1120,"text":1446},{"id":1465,"depth":1120,"text":1466},"md",{"outlineRef":1524,"status":1525},"7.4 — Class (static) Variables and Methods (CSA 3.7)","new — authored lesson (fuller depth than the teaser slide)",{"title":134,"description":1107},"FBg9JNIuNrVu-Sfllb2UNUs2jrEGCM4ILwh1mUSIijU",{"id":1529,"title":571,"body":1530,"description":1107,"extension":1522,"meta":2095,"navigation":1153,"path":570,"seo":2098,"stem":572,"__hash__":2099},"examples\u002Fshockwave-curriculum\u002Fexamples\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods.md",{"type":1073,"value":1531,"toc":2082},[1532,1535,1539,1549,1553,1558,1591,1595,1601,1655,1659,1740,1747,1754,1777,1794,1817,1823,1826,1835,1839,1951,1955,1984,1992,2028,2032,2080],[1076,1533,571],{"id":1534},"class-static-variables-methods-worked-example",[1080,1536,1538],{"id":1537},"problem","Problem",[1085,1540,1541,1542,1545,1546,1548],{},"Write a ",[1089,1543,1544],{},"Match"," class that keeps a running count of how many matches have been played across the whole season, and tracks the single highest score seen in any match — both shared across every ",[1089,1547,1544],{}," object, not per-object.",[1080,1550,1552],{"id":1551},"step-1-a-static-variable-for-the-running-count","Step 1: A Static Variable for the Running Count",[1085,1554,1555,1557],{},[1089,1556,1091],{}," means one shared copy belonging to the class itself, not to any one object:",[1102,1559,1561],{"className":1104,"code":1560,"language":1106,"meta":1107,"style":1107},"public class Match\n{\n    public static int matchesPlayed = 0; \u002F\u002F one shared copy for ALL Match objects\n    \u002F\u002F (kept public here for brevity, so this example can read it directly from outside —\n    \u002F\u002F in real code a static field is usually private, with a static getter)\n}\n",[1089,1562,1563,1568,1572,1577,1582,1587],{"__ignoreMap":1107},[1111,1564,1565],{"class":1113,"line":1114},[1111,1566,1567],{},"public class Match\n",[1111,1569,1570],{"class":1113,"line":1120},[1111,1571,1123],{},[1111,1573,1574],{"class":1113,"line":1126},[1111,1575,1576],{},"    public static int matchesPlayed = 0; \u002F\u002F one shared copy for ALL Match objects\n",[1111,1578,1579],{"class":1113,"line":1132},[1111,1580,1581],{},"    \u002F\u002F (kept public here for brevity, so this example can read it directly from outside —\n",[1111,1583,1584],{"class":1113,"line":1138},[1111,1585,1586],{},"    \u002F\u002F in real code a static field is usually private, with a static getter)\n",[1111,1588,1589],{"class":1113,"line":1144},[1111,1590,1184],{},[1080,1592,1594],{"id":1593},"step-2-increment-it-in-the-constructor","Step 2: Increment It in the Constructor",[1085,1596,1597,1598,1600],{},"Every time a ",[1089,1599,1544],{}," object is constructed, one more match has been played:",[1102,1602,1604],{"className":1104,"code":1603,"language":1106,"meta":1107,"style":1107},"public class Match\n{\n    public static int matchesPlayed = 0;\n    private double score;\n\n    public Match(double finalScore)\n    {\n        score = finalScore;\n        matchesPlayed++; \u002F\u002F updates the ONE shared counter\n    }\n}\n",[1089,1605,1606,1610,1614,1619,1624,1628,1633,1637,1642,1647,1651],{"__ignoreMap":1107},[1111,1607,1608],{"class":1113,"line":1114},[1111,1609,1567],{},[1111,1611,1612],{"class":1113,"line":1120},[1111,1613,1123],{},[1111,1615,1616],{"class":1113,"line":1126},[1111,1617,1618],{},"    public static int matchesPlayed = 0;\n",[1111,1620,1621],{"class":1113,"line":1132},[1111,1622,1623],{},"    private double score;\n",[1111,1625,1626],{"class":1113,"line":1138},[1111,1627,1154],{"emptyLinePlaceholder":1153},[1111,1629,1630],{"class":1113,"line":1144},[1111,1631,1632],{},"    public Match(double finalScore)\n",[1111,1634,1635],{"class":1113,"line":1150},[1111,1636,1166],{},[1111,1638,1639],{"class":1113,"line":1157},[1111,1640,1641],{},"        score = finalScore;\n",[1111,1643,1644],{"class":1113,"line":1163},[1111,1645,1646],{},"        matchesPlayed++; \u002F\u002F updates the ONE shared counter\n",[1111,1648,1649],{"class":1113,"line":1169},[1111,1650,1178],{},[1111,1652,1653],{"class":1113,"line":1175},[1111,1654,1184],{},[1080,1656,1658],{"id":1657},"step-3-a-static-variable-tracking-the-running-maximum","Step 3: A Static Variable Tracking the Running Maximum",[1102,1660,1662],{"className":1104,"code":1661,"language":1106,"meta":1107,"style":1107},"public class Match\n{\n    public static int matchesPlayed = 0;\n    public static double highestScore = 0.0;\n    private double score;\n\n    public Match(double finalScore)\n    {\n        score = finalScore;\n        matchesPlayed++;\n\n        if (finalScore > highestScore)\n        {\n            highestScore = finalScore; \u002F\u002F updates the ONE shared value\n        }\n    }\n}\n",[1089,1663,1664,1668,1672,1676,1681,1685,1689,1693,1697,1701,1706,1710,1715,1719,1725,1730,1735],{"__ignoreMap":1107},[1111,1665,1666],{"class":1113,"line":1114},[1111,1667,1567],{},[1111,1669,1670],{"class":1113,"line":1120},[1111,1671,1123],{},[1111,1673,1674],{"class":1113,"line":1126},[1111,1675,1618],{},[1111,1677,1678],{"class":1113,"line":1132},[1111,1679,1680],{},"    public static double highestScore = 0.0;\n",[1111,1682,1683],{"class":1113,"line":1138},[1111,1684,1623],{},[1111,1686,1687],{"class":1113,"line":1144},[1111,1688,1154],{"emptyLinePlaceholder":1153},[1111,1690,1691],{"class":1113,"line":1150},[1111,1692,1632],{},[1111,1694,1695],{"class":1113,"line":1157},[1111,1696,1166],{},[1111,1698,1699],{"class":1113,"line":1163},[1111,1700,1641],{},[1111,1702,1703],{"class":1113,"line":1169},[1111,1704,1705],{},"        matchesPlayed++;\n",[1111,1707,1708],{"class":1113,"line":1175},[1111,1709,1154],{"emptyLinePlaceholder":1153},[1111,1711,1712],{"class":1113,"line":1181},[1111,1713,1714],{},"        if (finalScore > highestScore)\n",[1111,1716,1717],{"class":1113,"line":1371},[1111,1718,1354],{},[1111,1720,1722],{"class":1113,"line":1721},14,[1111,1723,1724],{},"            highestScore = finalScore; \u002F\u002F updates the ONE shared value\n",[1111,1726,1728],{"class":1113,"line":1727},15,[1111,1729,1364],{},[1111,1731,1733],{"class":1113,"line":1732},16,[1111,1734,1178],{},[1111,1736,1738],{"class":1113,"line":1737},17,[1111,1739,1184],{},[1080,1741,1743,1744],{"id":1742},"step-4-why-a-static-method-cant-just-read-score","Step 4: Why a Static Method Can't Just Read ",[1089,1745,1746],{},"score",[1085,1748,1749,1750,1753],{},"Suppose we want a static method that prints a match's score. This does ",[1192,1751,1752],{},"not"," compile:",[1102,1755,1757],{"className":1104,"code":1756,"language":1106,"meta":1107,"style":1107},"public static void showScore()\n{\n    System.out.println(score); \u002F\u002F compile error! no object to read this from\n}\n",[1089,1758,1759,1764,1768,1773],{"__ignoreMap":1107},[1111,1760,1761],{"class":1113,"line":1114},[1111,1762,1763],{},"public static void showScore()\n",[1111,1765,1766],{"class":1113,"line":1120},[1111,1767,1123],{},[1111,1769,1770],{"class":1113,"line":1126},[1111,1771,1772],{},"    System.out.println(score); \u002F\u002F compile error! no object to read this from\n",[1111,1774,1775],{"class":1113,"line":1132},[1111,1776,1184],{},[1085,1778,1779,1781,1782,1784,1785,1787,1788,1790,1791,1793],{},[1089,1780,1746],{}," is an instance variable — it only exists once a specific ",[1089,1783,1544],{}," object exists. A ",[1089,1786,1091],{}," method runs without any particular object in hand, so it has no ",[1089,1789,1746],{}," to read. The fix is to pass an actual ",[1089,1792,1544],{}," in as a parameter:",[1102,1795,1797],{"className":1104,"code":1796,"language":1106,"meta":1107,"style":1107},"public static void printScore(Match m)\n{\n    System.out.println(m.score); \u002F\u002F fine — reading one specific object's data\n}\n",[1089,1798,1799,1804,1808,1813],{"__ignoreMap":1107},[1111,1800,1801],{"class":1113,"line":1114},[1111,1802,1803],{},"public static void printScore(Match m)\n",[1111,1805,1806],{"class":1113,"line":1120},[1111,1807,1123],{},[1111,1809,1810],{"class":1113,"line":1126},[1111,1811,1812],{},"    System.out.println(m.score); \u002F\u002F fine — reading one specific object's data\n",[1111,1814,1815],{"class":1113,"line":1132},[1111,1816,1184],{},[1080,1818,1820,1821],{"id":1819},"step-5-a-constant-with-final","Step 5: A Constant With ",[1089,1822,1382],{},[1085,1824,1825],{},"The length of a match itself doesn't change match to match, so it's a true constant, not a running value:",[1102,1827,1829],{"className":1104,"code":1828,"language":1106,"meta":1107,"style":1107},"public static final double MATCH_TIME_SECONDS = 150.0; \u002F\u002F 15s auto + 135s teleop\n",[1089,1830,1831],{"__ignoreMap":1107},[1111,1832,1833],{"class":1113,"line":1114},[1111,1834,1828],{},[1080,1836,1838],{"id":1837},"step-6-put-it-together","Step 6: Put It Together",[1102,1840,1842],{"className":1104,"code":1841,"language":1106,"meta":1107,"style":1107},"public class Match\n{\n    public static int matchesPlayed = 0;\n    public static double highestScore = 0.0;\n    public static final double MATCH_TIME_SECONDS = 150.0;\n\n    private double score;\n\n    public Match(double finalScore)\n    {\n        score = finalScore;\n        matchesPlayed++;\n\n        if (finalScore > highestScore)\n        {\n            highestScore = finalScore;\n        }\n    }\n\n    public static void printScore(Match m)\n    {\n        System.out.println(m.score);\n    }\n}\n",[1089,1843,1844,1848,1852,1856,1860,1865,1869,1873,1877,1881,1885,1889,1893,1897,1901,1905,1910,1914,1919,1924,1930,1935,1941,1946],{"__ignoreMap":1107},[1111,1845,1846],{"class":1113,"line":1114},[1111,1847,1567],{},[1111,1849,1850],{"class":1113,"line":1120},[1111,1851,1123],{},[1111,1853,1854],{"class":1113,"line":1126},[1111,1855,1618],{},[1111,1857,1858],{"class":1113,"line":1132},[1111,1859,1680],{},[1111,1861,1862],{"class":1113,"line":1138},[1111,1863,1864],{},"    public static final double MATCH_TIME_SECONDS = 150.0;\n",[1111,1866,1867],{"class":1113,"line":1144},[1111,1868,1154],{"emptyLinePlaceholder":1153},[1111,1870,1871],{"class":1113,"line":1150},[1111,1872,1623],{},[1111,1874,1875],{"class":1113,"line":1157},[1111,1876,1154],{"emptyLinePlaceholder":1153},[1111,1878,1879],{"class":1113,"line":1163},[1111,1880,1632],{},[1111,1882,1883],{"class":1113,"line":1169},[1111,1884,1166],{},[1111,1886,1887],{"class":1113,"line":1175},[1111,1888,1641],{},[1111,1890,1891],{"class":1113,"line":1181},[1111,1892,1705],{},[1111,1894,1895],{"class":1113,"line":1371},[1111,1896,1154],{"emptyLinePlaceholder":1153},[1111,1898,1899],{"class":1113,"line":1721},[1111,1900,1714],{},[1111,1902,1903],{"class":1113,"line":1727},[1111,1904,1354],{},[1111,1906,1907],{"class":1113,"line":1732},[1111,1908,1909],{},"            highestScore = finalScore;\n",[1111,1911,1912],{"class":1113,"line":1737},[1111,1913,1364],{},[1111,1915,1917],{"class":1113,"line":1916},18,[1111,1918,1178],{},[1111,1920,1922],{"class":1113,"line":1921},19,[1111,1923,1154],{"emptyLinePlaceholder":1153},[1111,1925,1927],{"class":1113,"line":1926},20,[1111,1928,1929],{},"    public static void printScore(Match m)\n",[1111,1931,1933],{"class":1113,"line":1932},21,[1111,1934,1166],{},[1111,1936,1938],{"class":1113,"line":1937},22,[1111,1939,1940],{},"        System.out.println(m.score);\n",[1111,1942,1944],{"class":1113,"line":1943},23,[1111,1945,1178],{},[1111,1947,1949],{"class":1113,"line":1948},24,[1111,1950,1184],{},[1080,1952,1954],{"id":1953},"step-7-try-it","Step 7: Try It",[1102,1956,1958],{"className":1104,"code":1957,"language":1106,"meta":1107,"style":1107},"Match first = new Match(45.0);\nMatch second = new Match(78.0);\n\nSystem.out.println(Match.matchesPlayed); \u002F\u002F 2\nSystem.out.println(Match.highestScore);  \u002F\u002F 78.0\n",[1089,1959,1960,1965,1970,1974,1979],{"__ignoreMap":1107},[1111,1961,1962],{"class":1113,"line":1114},[1111,1963,1964],{},"Match first = new Match(45.0);\n",[1111,1966,1967],{"class":1113,"line":1120},[1111,1968,1969],{},"Match second = new Match(78.0);\n",[1111,1971,1972],{"class":1113,"line":1126},[1111,1973,1154],{"emptyLinePlaceholder":1153},[1111,1975,1976],{"class":1113,"line":1132},[1111,1977,1978],{},"System.out.println(Match.matchesPlayed); \u002F\u002F 2\n",[1111,1980,1981],{"class":1113,"line":1138},[1111,1982,1983],{},"System.out.println(Match.highestScore);  \u002F\u002F 78.0\n",[1102,1985,1990],{"className":1986,"code":1988,"language":1989},[1987],"language-text","2\n78.0\n","text",[1089,1991,1988],{"__ignoreMap":1107},[1085,1993,1994,1995,1998,1999,2002,2003,1998,2006,2009,2010,2012,2013,1998,2015,2017,2018,2021,2022,2024,2025,2027],{},"Both ",[1089,1996,1997],{},"first"," and ",[1089,2000,2001],{},"second"," see the same ",[1089,2004,2005],{},"matchesPlayed",[1089,2007,2008],{},"highestScore"," — there's only ever one copy, shared across every ",[1089,2011,1544],{}," ever built. Notice ",[1089,2014,2005],{},[1089,2016,2008],{}," are read through the class name, ",[1089,2019,2020],{},"Match.matchesPlayed",", not through ",[1089,2023,1997],{}," or ",[1089,2026,2001],{}," — they don't belong to either object.",[1080,2029,2031],{"id":2030},"recap","Recap",[1448,2033,2034,2047,2060,2071],{},[1451,2035,2036,2038,2039,1998,2041,2043,2044,2046],{},[1089,2037,1091],{}," members belong to the class itself — ",[1089,2040,2005],{},[1089,2042,2008],{}," are one shared copy, no matter how many ",[1089,2045,1544],{}," objects exist.",[1451,2048,2049,2050,2053,2054,2056,2057,2059],{},"Static code can't access instance variables or instance methods directly — ",[1089,2051,2052],{},"printScore"," needed an actual ",[1089,2055,1544],{}," object passed in to reach ",[1089,2058,1746],{},".",[1451,2061,2062,2063,1998,2065,2067,2068,2070],{},"A static variable's value is shared across every object — that's what let ",[1089,2064,2005],{},[1089,2066,2008],{}," track totals across every ",[1089,2069,1544],{}," ever constructed.",[1451,2072,2073,2075,2076,2079],{},[1089,2074,1382],{}," marks a variable as an unchangeable constant, conventionally named in ALL_CAPS — ",[1089,2077,2078],{},"MATCH_TIME_SECONDS"," here.",[1510,2081,1512],{},{"title":1107,"searchDepth":1120,"depth":1120,"links":2083},[2084,2085,2086,2087,2088,2090,2092,2093,2094],{"id":1537,"depth":1120,"text":1538},{"id":1551,"depth":1120,"text":1552},{"id":1593,"depth":1120,"text":1594},{"id":1657,"depth":1120,"text":1658},{"id":1742,"depth":1120,"text":2089},"Step 4: Why a Static Method Can't Just Read score",{"id":1819,"depth":1120,"text":2091},"Step 5: A Constant With final",{"id":1837,"depth":1120,"text":1838},{"id":1953,"depth":1120,"text":1954},{"id":2030,"depth":1120,"text":2031},{"outlineRef":1524,"pairsWith":2096,"status":2097},"[`lessons\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods.md`](..\u002F..\u002Flessons\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods.md)","new — authored worked example (fully solved, walked step by step — not a problem to attempt)",{"title":571,"description":1107},"u8OJoFlLlj6JJb8ITxcXoHBsQPDq4kQGygkKObPPsGk",{"id":2101,"title":880,"body":2102,"description":1107,"extension":1522,"meta":3150,"navigation":1153,"path":879,"seo":3152,"stem":881,"__hash__":3153},"exercises\u002Fshockwave-curriculum\u002Fexercises\u002Fch07-the-class-blueprint\u002F7.4-class-static-variables-and-methods.md",{"type":1073,"value":2103,"toc":3145},[2104,2107,2111,2125,2140,2147,2152,2198,2204,2221,2256,2260,2283,2286,2370,2375,2381,2448,2544,2548,2554,2570,2585,2611,2631,2636,2781,2786,2791,2797,2802,2808,2813,2817,2823,2827,2833,2838,2842,2848,2852,2858,2863,2867,2873,2877,2883,2888,2892,2898,2902,2908,2913,3111,3143],[1076,2105,880],{"id":2106},"class-static-variables-methods-exercises",[1080,2108,2110],{"id":2109},"multiple-choice","Multiple Choice",[1085,2112,2113,2116,2117,2120,2121,2124],{},[1192,2114,2115],{},"Question:"," A ",[1089,2118,2119],{},"Robot"," class has ",[1089,2122,2123],{},"public static int totalRobots = 0;",", incremented inside its constructor. This code runs:",[1102,2126,2128],{"className":1104,"code":2127,"language":1106,"meta":1107,"style":1107},"Robot r1 = new Robot();\nRobot r2 = new Robot();\n",[1089,2129,2130,2135],{"__ignoreMap":1107},[1111,2131,2132],{"class":1113,"line":1114},[1111,2133,2134],{},"Robot r1 = new Robot();\n",[1111,2136,2137],{"class":1113,"line":1120},[1111,2138,2139],{},"Robot r2 = new Robot();\n",[1085,2141,2142,2143,2146],{},"What does ",[1089,2144,2145],{},"r1.totalRobots"," equal afterward?",[1085,2148,2149],{},[1192,2150,2151],{},"Options:",[1448,2153,2154,2165,2179,2189],{},[1451,2155,2156,2157,2160,2161,2164],{},"A. ",[1089,2158,2159],{},"2"," — there's only one shared copy of ",[1089,2162,2163],{},"totalRobots",", and every constructor call increments that same value, regardless of which object later reads it",[1451,2166,2167,2168,2171,2172,2175,2176,2178],{},"B. ",[1089,2169,2170],{},"1"," — ",[1089,2173,2174],{},"r1"," only counts the constructor call that built ",[1089,2177,2174],{}," itself",[1451,2180,2181,2182,2185,2186,2188],{},"C. ",[1089,2183,2184],{},"0"," — a ",[1089,2187,1091],{}," variable doesn't update until a getter reads it",[1451,2190,2191,2192,2024,2194,2197],{},"D. It depends on which of ",[1089,2193,2174],{},[1089,2195,2196],{},"r2"," was constructed more recently",[1085,2199,2200,2203],{},[1192,2201,2202],{},"Answer:"," A",[1085,2205,2206,2209,2210,2212,2213,2215,2216,2218,2219,2059],{},[1192,2207,2208],{},"Why:"," ",[1089,2211,1091],{}," means one shared copy belongs to the class itself, not a separate copy per object. Both constructor calls incremented that same ",[1089,2214,2163],{},", so after both objects exist, any ",[1089,2217,2119],{}," — or the class itself — sees ",[1089,2220,2159],{},[1448,2222,2223,2242,2248],{},[1451,2224,2225,2226,2228,2229,2231,2232,2234,2235,2237,2238,2241],{},"B is wrong — it treats ",[1089,2227,2163],{}," as if each object kept its own separate count, which is exactly what ",[1089,2230,1091],{}," means it does ",[1216,2233,1752],{}," do. (",[1089,2236,2145],{}," is really just another way of reading ",[1089,2239,2240],{},"Robot.totalRobots"," — the class name is the clearer, conventional way to write it, but the object-access syntax reads the exact same one shared value.)",[1451,2243,2244,2245,2247],{},"C is wrong — a ",[1089,2246,1091],{}," variable updates the instant it's assigned or incremented, just like any other variable; there's no separate \"activation\" step tied to reading it later.",[1451,2249,2250,2251,1998,2253,2255],{},"D is wrong — since there's only one shared value, the order ",[1089,2252,2174],{},[1089,2254,2196],{}," were built in makes no difference to what either one reads.",[1080,2257,2259],{"id":2258},"micro-parsons","Micro-Parsons",[1085,2261,2262,2265,2266,2269,2270,2272,2273,2275,2276,2279,2280,2282],{},[1192,2263,2264],{},"Problem:"," These lines, once correctly ordered, form a complete program whose ",[1089,2267,2268],{},"Sensor"," class has a ",[1089,2271,1091],{}," method that prints one specific sensor's reading, passed in as a parameter — since a ",[1089,2274,1091],{}," method has no object of its own to read ",[1089,2277,2278],{},"reading"," from — then builds one ",[1089,2281,2268],{}," and prints its reading.",[1085,2284,2285],{},"Reorder the fragments below into a working program:",[1448,2287,2288,2294,2300,2306,2312,2318,2324,2330,2336,2341,2347],{},[1451,2289,2290,2291],{},"a. ",[1089,2292,2293],{},"        System.out.println(s.reading);",[1451,2295,2296,2297],{},"b. ",[1089,2298,2299],{},"public class Sensor",[1451,2301,2302,2303],{},"c. ",[1089,2304,2305],{},"    }",[1451,2307,2308,2309],{},"d. ",[1089,2310,2311],{},"    private double reading;",[1451,2313,2314,2315],{},"e. ",[1089,2316,2317],{},"    public static void printReading(Sensor s)",[1451,2319,2320,2321],{},"f. ",[1089,2322,2323],{},"{",[1451,2325,2326,2327],{},"g. ",[1089,2328,2329],{},"    {",[1451,2331,2332,2333],{},"h. ",[1089,2334,2335],{},"    public static void main(String[] args)",[1451,2337,2338,2339],{},"i. ",[1089,2340,2329],{},[1451,2342,2343,2344],{},"j. ",[1089,2345,2346],{},"        printReading(new Sensor());",[1451,2348,2349,2350,2357],{},"k. ",[1216,2351,2352,2353,2356],{},"(two lines, merged into one fragment — nothing valid can ever come between the closing brace of ",[1089,2354,2355],{},"main"," and the closing brace of the class)",[1102,2358,2360],{"className":1104,"code":2359,"language":1106,"meta":1107,"style":1107},"    }\n}\n",[1089,2361,2362,2366],{"__ignoreMap":1107},[1111,2363,2364],{"class":1113,"line":1114},[1111,2365,1178],{},[1111,2367,2368],{"class":1113,"line":1120},[1111,2369,1184],{},[1085,2371,2372,2374],{},[1192,2373,2202],{}," b, f, d, e, g, a, c, h, i, j, k",[1085,2376,2377,2380],{},[1192,2378,2379],{},"Interchangeable:"," (g, i)",[1102,2382,2384],{"className":1104,"code":2383,"language":1106,"meta":1107,"style":1107},"public class Sensor\n{\n    private double reading;\n\n    public static void printReading(Sensor s)\n    {\n        System.out.println(s.reading);\n    }\n\n    public static void main(String[] args)\n    {\n        printReading(new Sensor());\n    }\n}\n",[1089,2385,2386,2391,2395,2400,2404,2409,2413,2418,2422,2426,2431,2435,2440,2444],{"__ignoreMap":1107},[1111,2387,2388],{"class":1113,"line":1114},[1111,2389,2390],{},"public class Sensor\n",[1111,2392,2393],{"class":1113,"line":1120},[1111,2394,1123],{},[1111,2396,2397],{"class":1113,"line":1126},[1111,2398,2399],{},"    private double reading;\n",[1111,2401,2402],{"class":1113,"line":1132},[1111,2403,1154],{"emptyLinePlaceholder":1153},[1111,2405,2406],{"class":1113,"line":1138},[1111,2407,2408],{},"    public static void printReading(Sensor s)\n",[1111,2410,2411],{"class":1113,"line":1144},[1111,2412,1166],{},[1111,2414,2415],{"class":1113,"line":1150},[1111,2416,2417],{},"        System.out.println(s.reading);\n",[1111,2419,2420],{"class":1113,"line":1157},[1111,2421,1178],{},[1111,2423,2424],{"class":1113,"line":1163},[1111,2425,1154],{"emptyLinePlaceholder":1153},[1111,2427,2428],{"class":1113,"line":1169},[1111,2429,2430],{},"    public static void main(String[] args)\n",[1111,2432,2433],{"class":1113,"line":1175},[1111,2434,1166],{},[1111,2436,2437],{"class":1113,"line":1181},[1111,2438,2439],{},"        printReading(new Sensor());\n",[1111,2441,2442],{"class":1113,"line":1371},[1111,2443,1178],{},[1111,2445,2446],{"class":1113,"line":1721},[1111,2447,1184],{},[1085,2449,2450,2453,2454,2457,2458,2461,2462,2465,2466,2469,2470,2473,2474,2477,2478,2481,2482,2484,2485,2487,2488,2491,2492,2494,2495,2498,2499,2502,2503,2506,2507,2509,2510,2513,2514,2516,2517,2519,2520,2522,2523,2526,2527,2529,2530,1998,2532,2534,2535,2537,2538,2540,2541,2543],{},[1192,2451,2452],{},"Why this order:"," The class declaration (",[1089,2455,2456],{},"b",") and its opening brace (",[1089,2459,2460],{},"f",") come first, followed by the instance variable (",[1089,2463,2464],{},"d","). The static method's signature (",[1089,2467,2468],{},"e",") and its own opening brace (",[1089,2471,2472],{},"g",") come next. Inside, the print statement (",[1089,2475,2476],{},"a",") reads ",[1089,2479,2480],{},"s.reading"," — the specific ",[1089,2483,2268],{}," object passed in as a parameter — because a ",[1089,2486,1091],{}," method has no object of its own to read an instance variable from directly. The method's body then closes (",[1089,2489,2490],{},"c","), and ",[1089,2493,2355],{}," (",[1089,2496,2497],{},"h",") is declared next with its own opening brace (",[1089,2500,2501],{},"i","); inside it, the single statement (",[1089,2504,2505],{},"j",") builds a new ",[1089,2508,2268],{}," and passes it straight to ",[1089,2511,2512],{},"printReading",", calling the static method exactly the way any other code outside ",[1089,2515,2268],{}," would have to — through the class name or another object, never through a ",[1089,2518,2268],{}," made just to hold the method, since ",[1089,2521,2512],{}," doesn't need one. Fragment ",[1089,2524,2525],{},"k"," merges the program's last two closing braces into a single piece: ",[1089,2528,2355],{},"'s body closes and the class's body closes immediately after, with nothing else that could ever land between two closing braces at the end of a file. Note that ",[1089,2531,2472],{},[1089,2533,2501],{}," (both a bare four-space ",[1089,2536,2323],{},") are textually identical — interchangeable copies at the same nesting depth, one opens ",[1089,2539,2512],{}," and one opens ",[1089,2542,2355],{},", so it doesn't matter which physical copy lands in which slot.",[1080,2545,2547],{"id":2546},"coding","Coding",[1085,2549,2550,2553],{},[1192,2551,2552],{},"Mode:"," full-program",[1085,2555,2556,2558,2559,2562,2563,2565,2566,2569],{},[1192,2557,2264],{}," Every ",[1089,2560,2561],{},"Subsystem"," is built with the current (in amps) it just drew. Write the class ",[1089,2564,2561],{}," so that\n",[1192,2567,2568],{},"the class itself"," keeps track of two shared facts across every object ever created:",[1448,2571,2572,2578],{},[1451,2573,2574,2575,2577],{},"how many ",[1089,2576,2561],{}," objects have been created, and",[1451,2579,2580,2581,2584],{},"the highest current any of them was built with (",[1089,2582,2583],{},"0.0"," if none was created).",[1085,2586,2587,2588,2591,2592,1998,2594,2596,2597,2600,2601,1998,2604,2607,2608,2610],{},"Use two ",[1089,2589,2590],{},"private static"," variables that start at ",[1089,2593,2184],{},[1089,2595,2583],{},", update them in the constructor, and\nexpose them through the ",[1089,2598,2599],{},"public static"," getters ",[1089,2602,2603],{},"getInstanceCount()",[1089,2605,2606],{},"getMaxObservedCurrent()",". The fixed\n",[1089,2609,2355],{}," creates one subsystem per input value and then reads both numbers through the class name, never\nthrough an object.",[1085,2612,2613,2614,2617,2618,1998,2621,2624,2625,1998,2628,2059],{},"For example, the currents ",[1089,2615,2616],{},"12.5 30.0 8.0"," print ",[1089,2619,2620],{},"subsystems: 3",[1089,2622,2623],{},"max current: 30.0",". With no\nsubsystems at all, it prints ",[1089,2626,2627],{},"subsystems: 0",[1089,2629,2630],{},"max current: 0.0",[1085,2632,2633],{},[1192,2634,2635],{},"Starter:",[1102,2637,2639],{"className":1104,"code":2638,"language":1106,"meta":1107,"style":1107},"import java.util.*;\n\npublic class Main\n{\n    \u002F\u002F Don't change main\n    public static void main(String[] args)\n    {\n        Scanner in = new Scanner(System.in);\n        int count = in.nextInt();\n        for (int i = 0; i \u003C count; i++)\n        {\n            double current = in.nextDouble();\n            Subsystem subsystem = new Subsystem(current);\n        }\n        System.out.println(\"subsystems: \" + Subsystem.getInstanceCount());\n        System.out.println(\"max current: \" + Subsystem.getMaxObservedCurrent());\n    }\n}\n\nclass Subsystem\n{\n    \u002F\u002F TODO: two private static variables (a count and a max), set up as described\n\n    public Subsystem(double current)\n    {\n        \u002F\u002F TODO: update the shared count and max\n    }\n\n    \u002F\u002F TODO: public static getInstanceCount() and getMaxObservedCurrent()\n}\n",[1089,2640,2641,2646,2650,2655,2659,2664,2668,2672,2677,2682,2687,2691,2696,2701,2705,2710,2715,2719,2723,2727,2732,2736,2741,2745,2749,2754,2760,2765,2770,2776],{"__ignoreMap":1107},[1111,2642,2643],{"class":1113,"line":1114},[1111,2644,2645],{},"import java.util.*;\n",[1111,2647,2648],{"class":1113,"line":1120},[1111,2649,1154],{"emptyLinePlaceholder":1153},[1111,2651,2652],{"class":1113,"line":1126},[1111,2653,2654],{},"public class Main\n",[1111,2656,2657],{"class":1113,"line":1132},[1111,2658,1123],{},[1111,2660,2661],{"class":1113,"line":1138},[1111,2662,2663],{},"    \u002F\u002F Don't change main\n",[1111,2665,2666],{"class":1113,"line":1144},[1111,2667,2430],{},[1111,2669,2670],{"class":1113,"line":1150},[1111,2671,1166],{},[1111,2673,2674],{"class":1113,"line":1157},[1111,2675,2676],{},"        Scanner in = new Scanner(System.in);\n",[1111,2678,2679],{"class":1113,"line":1163},[1111,2680,2681],{},"        int count = in.nextInt();\n",[1111,2683,2684],{"class":1113,"line":1169},[1111,2685,2686],{},"        for (int i = 0; i \u003C count; i++)\n",[1111,2688,2689],{"class":1113,"line":1175},[1111,2690,1354],{},[1111,2692,2693],{"class":1113,"line":1181},[1111,2694,2695],{},"            double current = in.nextDouble();\n",[1111,2697,2698],{"class":1113,"line":1371},[1111,2699,2700],{},"            Subsystem subsystem = new Subsystem(current);\n",[1111,2702,2703],{"class":1113,"line":1721},[1111,2704,1364],{},[1111,2706,2707],{"class":1113,"line":1727},[1111,2708,2709],{},"        System.out.println(\"subsystems: \" + Subsystem.getInstanceCount());\n",[1111,2711,2712],{"class":1113,"line":1732},[1111,2713,2714],{},"        System.out.println(\"max current: \" + Subsystem.getMaxObservedCurrent());\n",[1111,2716,2717],{"class":1113,"line":1737},[1111,2718,1178],{},[1111,2720,2721],{"class":1113,"line":1916},[1111,2722,1184],{},[1111,2724,2725],{"class":1113,"line":1921},[1111,2726,1154],{"emptyLinePlaceholder":1153},[1111,2728,2729],{"class":1113,"line":1926},[1111,2730,2731],{},"class Subsystem\n",[1111,2733,2734],{"class":1113,"line":1932},[1111,2735,1123],{},[1111,2737,2738],{"class":1113,"line":1937},[1111,2739,2740],{},"    \u002F\u002F TODO: two private static variables (a count and a max), set up as described\n",[1111,2742,2743],{"class":1113,"line":1943},[1111,2744,1154],{"emptyLinePlaceholder":1153},[1111,2746,2747],{"class":1113,"line":1948},[1111,2748,1340],{},[1111,2750,2752],{"class":1113,"line":2751},25,[1111,2753,1166],{},[1111,2755,2757],{"class":1113,"line":2756},26,[1111,2758,2759],{},"        \u002F\u002F TODO: update the shared count and max\n",[1111,2761,2763],{"class":1113,"line":2762},27,[1111,2764,1178],{},[1111,2766,2768],{"class":1113,"line":2767},28,[1111,2769,1154],{"emptyLinePlaceholder":1153},[1111,2771,2773],{"class":1113,"line":2772},29,[1111,2774,2775],{},"    \u002F\u002F TODO: public static getInstanceCount() and getMaxObservedCurrent()\n",[1111,2777,2779],{"class":1113,"line":2778},30,[1111,2780,1184],{},[1085,2782,2783],{},[1192,2784,2785],{},"Scenario 1 (visible):",[1085,2787,2788],{},[1192,2789,2790],{},"Input:",[1102,2792,2795],{"className":2793,"code":2794,"language":1989,"meta":1107},[1987],"3\n12.5 30.0 8.0\n",[1089,2796,2794],{"__ignoreMap":1107},[1085,2798,2799],{},[1192,2800,2801],{},"Expected output:",[1102,2803,2806],{"className":2804,"code":2805,"language":1989,"meta":1107},[1987],"subsystems: 3\nmax current: 30.0\n",[1089,2807,2805],{"__ignoreMap":1107},[1085,2809,2810],{},[1192,2811,2812],{},"Scenario 2 (visible):",[1085,2814,2815],{},[1192,2816,2790],{},[1102,2818,2821],{"className":2819,"code":2820,"language":1989,"meta":1107},[1987],"1\n5.5\n",[1089,2822,2820],{"__ignoreMap":1107},[1085,2824,2825],{},[1192,2826,2801],{},[1102,2828,2831],{"className":2829,"code":2830,"language":1989,"meta":1107},[1987],"subsystems: 1\nmax current: 5.5\n",[1089,2832,2830],{"__ignoreMap":1107},[1085,2834,2835],{},[1192,2836,2837],{},"Scenario 3 (visible):",[1085,2839,2840],{},[1192,2841,2790],{},[1102,2843,2846],{"className":2844,"code":2845,"language":1989,"meta":1107},[1987],"0\n",[1089,2847,2845],{"__ignoreMap":1107},[1085,2849,2850],{},[1192,2851,2801],{},[1102,2853,2856],{"className":2854,"code":2855,"language":1989,"meta":1107},[1987],"subsystems: 0\nmax current: 0.0\n",[1089,2857,2855],{"__ignoreMap":1107},[1085,2859,2860],{},[1192,2861,2862],{},"Scenario 4 (hidden):",[1085,2864,2865],{},[1192,2866,2790],{},[1102,2868,2871],{"className":2869,"code":2870,"language":1989,"meta":1107},[1987],"4\n40.0 25.0 10.0 3.5\n",[1089,2872,2870],{"__ignoreMap":1107},[1085,2874,2875],{},[1192,2876,2801],{},[1102,2878,2881],{"className":2879,"code":2880,"language":1989,"meta":1107},[1987],"subsystems: 4\nmax current: 40.0\n",[1089,2882,2880],{"__ignoreMap":1107},[1085,2884,2885],{},[1192,2886,2887],{},"Scenario 5 (hidden):",[1085,2889,2890],{},[1192,2891,2790],{},[1102,2893,2896],{"className":2894,"code":2895,"language":1989,"meta":1107},[1987],"5\n2.0 9.5 9.5 1.0 7.25\n",[1089,2897,2895],{"__ignoreMap":1107},[1085,2899,2900],{},[1192,2901,2801],{},[1102,2903,2906],{"className":2904,"code":2905,"language":1989,"meta":1107},[1987],"subsystems: 5\nmax current: 9.5\n",[1089,2907,2905],{"__ignoreMap":1107},[1085,2909,2910],{},[1192,2911,2912],{},"Solution:",[1102,2914,2916],{"className":1104,"code":2915,"language":1106,"meta":1107,"style":1107},"import java.util.*;\n\npublic class Main\n{\n    \u002F\u002F Don't change main\n    public static void main(String[] args)\n    {\n        Scanner in = new Scanner(System.in);\n        int count = in.nextInt();\n        for (int i = 0; i \u003C count; i++)\n        {\n            double current = in.nextDouble();\n            Subsystem subsystem = new Subsystem(current);\n        }\n        System.out.println(\"subsystems: \" + Subsystem.getInstanceCount());\n        System.out.println(\"max current: \" + Subsystem.getMaxObservedCurrent());\n    }\n}\n\nclass Subsystem\n{\n    private static int instanceCount = 0;\n    private static double maxObservedCurrent = 0.0;\n\n    public Subsystem(double current)\n    {\n        instanceCount++;\n        if (current > maxObservedCurrent)\n        {\n            maxObservedCurrent = current;\n        }\n    }\n\n    public static int getInstanceCount()\n    {\n        return instanceCount;\n    }\n\n    public static double getMaxObservedCurrent()\n    {\n        return maxObservedCurrent;\n    }\n}\n",[1089,2917,2918,2922,2926,2930,2934,2938,2942,2946,2950,2954,2958,2962,2966,2970,2974,2978,2982,2986,2990,2994,2998,3002,3007,3012,3016,3020,3024,3029,3033,3037,3042,3047,3052,3057,3063,3068,3074,3079,3084,3090,3095,3101,3106],{"__ignoreMap":1107},[1111,2919,2920],{"class":1113,"line":1114},[1111,2921,2645],{},[1111,2923,2924],{"class":1113,"line":1120},[1111,2925,1154],{"emptyLinePlaceholder":1153},[1111,2927,2928],{"class":1113,"line":1126},[1111,2929,2654],{},[1111,2931,2932],{"class":1113,"line":1132},[1111,2933,1123],{},[1111,2935,2936],{"class":1113,"line":1138},[1111,2937,2663],{},[1111,2939,2940],{"class":1113,"line":1144},[1111,2941,2430],{},[1111,2943,2944],{"class":1113,"line":1150},[1111,2945,1166],{},[1111,2947,2948],{"class":1113,"line":1157},[1111,2949,2676],{},[1111,2951,2952],{"class":1113,"line":1163},[1111,2953,2681],{},[1111,2955,2956],{"class":1113,"line":1169},[1111,2957,2686],{},[1111,2959,2960],{"class":1113,"line":1175},[1111,2961,1354],{},[1111,2963,2964],{"class":1113,"line":1181},[1111,2965,2695],{},[1111,2967,2968],{"class":1113,"line":1371},[1111,2969,2700],{},[1111,2971,2972],{"class":1113,"line":1721},[1111,2973,1364],{},[1111,2975,2976],{"class":1113,"line":1727},[1111,2977,2709],{},[1111,2979,2980],{"class":1113,"line":1732},[1111,2981,2714],{},[1111,2983,2984],{"class":1113,"line":1737},[1111,2985,1178],{},[1111,2987,2988],{"class":1113,"line":1916},[1111,2989,1184],{},[1111,2991,2992],{"class":1113,"line":1921},[1111,2993,1154],{"emptyLinePlaceholder":1153},[1111,2995,2996],{"class":1113,"line":1926},[1111,2997,2731],{},[1111,2999,3000],{"class":1113,"line":1932},[1111,3001,1123],{},[1111,3003,3004],{"class":1113,"line":1937},[1111,3005,3006],{},"    private static int instanceCount = 0;\n",[1111,3008,3009],{"class":1113,"line":1943},[1111,3010,3011],{},"    private static double maxObservedCurrent = 0.0;\n",[1111,3013,3014],{"class":1113,"line":1948},[1111,3015,1154],{"emptyLinePlaceholder":1153},[1111,3017,3018],{"class":1113,"line":2751},[1111,3019,1340],{},[1111,3021,3022],{"class":1113,"line":2756},[1111,3023,1166],{},[1111,3025,3026],{"class":1113,"line":2762},[1111,3027,3028],{},"        instanceCount++;\n",[1111,3030,3031],{"class":1113,"line":2767},[1111,3032,1349],{},[1111,3034,3035],{"class":1113,"line":2772},[1111,3036,1354],{},[1111,3038,3039],{"class":1113,"line":2778},[1111,3040,3041],{},"            maxObservedCurrent = current;\n",[1111,3043,3045],{"class":1113,"line":3044},31,[1111,3046,1364],{},[1111,3048,3050],{"class":1113,"line":3049},32,[1111,3051,1178],{},[1111,3053,3055],{"class":1113,"line":3054},33,[1111,3056,1154],{"emptyLinePlaceholder":1153},[1111,3058,3060],{"class":1113,"line":3059},34,[1111,3061,3062],{},"    public static int getInstanceCount()\n",[1111,3064,3066],{"class":1113,"line":3065},35,[1111,3067,1166],{},[1111,3069,3071],{"class":1113,"line":3070},36,[1111,3072,3073],{},"        return instanceCount;\n",[1111,3075,3077],{"class":1113,"line":3076},37,[1111,3078,1178],{},[1111,3080,3082],{"class":1113,"line":3081},38,[1111,3083,1154],{"emptyLinePlaceholder":1153},[1111,3085,3087],{"class":1113,"line":3086},39,[1111,3088,3089],{},"    public static double getMaxObservedCurrent()\n",[1111,3091,3093],{"class":1113,"line":3092},40,[1111,3094,1166],{},[1111,3096,3098],{"class":1113,"line":3097},41,[1111,3099,3100],{},"        return maxObservedCurrent;\n",[1111,3102,3104],{"class":1113,"line":3103},42,[1111,3105,1178],{},[1111,3107,3109],{"class":1113,"line":3108},43,[1111,3110,1184],{},[1085,3112,3113,2116,3115,3117,3118,3120,3121,3124,3125,3128,3129,3132,3133,3135,3136,3138,3139,3142],{},[1192,3114,2208],{},[1089,3116,1091],{}," variable has exactly one copy for the whole class, which is why the constructor of every new\nobject can add to the same count and compare against the same maximum. If the two variables were ordinary\ninstance variables, each object would have its own: the count would always print ",[1089,3119,2170],{}," and the maximum would\nbe whatever the last object was built with. The ",[1089,3122,3123],{},">"," comparison keeps the highest value even when it comes\nfirst (",[1089,3126,3127],{},"40.0 25.0 10.0 3.5"," still ends at ",[1089,3130,3131],{},"40.0",") and a repeated value changes nothing. The getters are\n",[1089,3134,1091],{}," so ",[1089,3137,2355],{}," can call them as ",[1089,3140,3141],{},"Subsystem.getInstanceCount()"," with zero objects in hand, which is why\nthe no-subsystem case works.",[1510,3144,1512],{},{"title":1107,"searchDepth":1120,"depth":1120,"links":3146},[3147,3148,3149],{"id":2109,"depth":1120,"text":2110},{"id":2258,"depth":1120,"text":2259},{"id":2546,"depth":1120,"text":2547},{"outlineRef":1524,"pairsWith":2096,"status":3151},"new — authored exercises (Multiple Choice + Micro-Parsons + Coding)",{"title":880,"description":1107},"S_KYrxFxqrxxelSfPkLCCViyYufRP1vo-k9jAGkBhNM",1792718165859]