{"record":{"id":"a8334a40bc35810f","repo":"TheAlgorithms/Java","slug":"number-must-be-zero-for-pi-assignment","errorCode":null,"errorMessage":"Number must be zero for PI assignment!","messagePattern":"Number must be zero for PI assignment!","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/main/java/com/thealgorithms/maths/MathBuilder.java","lineNumber":120,"sourceCode":"                number -= num;\n            }\n            return this;\n        }\n\n        // Generates a random number and sets to NUMBER\n        public Builder rand(long seed) {\n            if (number != 0) {\n                throw new RuntimeException(\"Number must be zero for random assignment!\");\n            }\n            Random random = new Random();\n            number = random.nextDouble(seed);\n            return this;\n        }\n\n        // Takes PI value and sets to NUMBER\n        public Builder pi() {\n            if (number != 0) {\n                throw new RuntimeException(\"Number must be zero for PI assignment!\");\n            }\n            number = Math.PI;\n            return this;\n        }\n\n        // Takes E value and sets to NUMBER\n        public Builder e() {\n            if (number != 0) {\n                throw new RuntimeException(\"Number must be zero for E assignment!\");\n            }\n            number = Math.E;\n            return this;\n        }\n\n        public Builder randomInRange(double min, double max) {\n            if (number != 0) {\n                throw new RuntimeException(\"Number must be zero for random assignment!\");\n            }","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/TheAlgorithms/Java/blob/fdfb9a395b310167a66bd29e311e36e0e3e9b964/src/main/java/com/thealgorithms/maths/MathBuilder.java#L102-L138","documentation":"Thrown by Builder.pi() when the builder's internal number field is not 0. The pi() method is an assignment operation that overwrites number with Math.PI; the guard ensures the caller is not accidentally discarding a previously accumulated value. Uses RuntimeException rather than IllegalArgumentException.","triggerScenarios":"Calling pi() after any operation that set number to non-zero: new MathBuilder.Builder(5).pi(), or after add(), multiply(), or any other mutating operation on a non-zero builder.","commonSituations":"Fluent chaining where the developer expects pi() to add or multiply by PI, but the API treats it as a raw assignment. For example, new Builder().add(5).pi() throws because add(5) set number to 5.","solutions":["Call pi() on a fresh Builder (number == 0)","If you want to use PI in a calculation, use multiply(Math.PI) or add(Math.PI) instead","Build the current state into a MathBuilder first, then start a new Builder for PI"],"exampleFix":"// before\nMathBuilder.Builder b = new MathBuilder.Builder(5).pi();\n\n// after\nMathBuilder.Builder b = new MathBuilder.Builder().pi();\n// or if you need PI in a calculation:\nMathBuilder.Builder b2 = new MathBuilder.Builder(5).multiply(Math.PI);","handlingStrategy":"validation","validationCode":"// Call pi() only on a fresh builder\nMathBuilder.Builder b = new MathBuilder.Builder();  // number == 0\nb.pi();","typeGuard":null,"tryCatchPattern":"try {\n    builder.pi();\n} catch (RuntimeException e) {\n    builder = new MathBuilder.Builder();\n    builder.pi();\n}","preventionTips":["pi() overwrites number with Math.PI — it does not multiply or add","Use multiply(Math.PI) if you need PI in an arithmetic expression with an existing value","Create a new Builder for each independent assignment operation"],"tags":["math","builder","runtime-exception","state-validation"],"backgroundTag":null,"analyzedSha":"fdfb9a395b310167a66bd29e311e36e0e3e9b964","analyzedAt":"2026-08-13T23:36:13.315Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}