{"record":{"id":"fba22716f46db23c","repo":"TheAlgorithms/Java","slug":"number-must-be-zero-for-random-assignment","errorCode":null,"errorMessage":"Number must be zero for random assignment!","messagePattern":"Number must be zero for random assignment!","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/main/java/com/thealgorithms/maths/MathBuilder.java","lineNumber":110,"sourceCode":"        }\n\n        // Takes a number and a condition, only does the operation if condition is true.\n        public Builder minusIf(double num, BiFunction<Double, Double, Boolean> condition) {\n            if (!condition.apply(number, num)) {\n                return this;\n            }\n            if (inParenthesis) {\n                sideNumber -= num;\n            } else {\n                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) {","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/TheAlgorithms/Java/blob/fdfb9a395b310167a66bd29e311e36e0e3e9b964/src/main/java/com/thealgorithms/maths/MathBuilder.java#L92-L128","documentation":"Thrown by Builder.rand(long seed) when the builder's internal number field is not 0. The MathBuilder design distinguishes accumulating operations (add, multiply) from assignment operations (rand, pi, e, set). Assignment operations require a clean slate (number == 0) to avoid ambiguity about which value wins. This is a RuntimeException, not an IllegalArgumentException.","triggerScenarios":"Calling rand(seed) after any operation that set number to non-zero: new MathBuilder.Builder(5).rand(42), or new MathBuilder.Builder().pi().rand(42), or after add/multiply that changed number from 0.","commonSituations":"Chaining builder calls fluently without understanding the assignment-vs-accumulation distinction. Starting from the Builder(double num) constructor with a non-zero value and then calling rand.","solutions":["Call rand() on a fresh Builder constructed with no-arg new Builder() (number defaults to 0)","If you need randomness after other operations, build the current state first, then start a new Builder","Replace the assignment with an accumulating operation if you want to combine values"],"exampleFix":"// before\nMathBuilder.Builder b = new MathBuilder.Builder(10).rand(42);\n\n// after\nMathBuilder.Builder b = new MathBuilder.Builder().rand(42);","handlingStrategy":"validation","validationCode":"// Ensure a fresh builder before calling assignment methods\nMathBuilder.Builder b = new MathBuilder.Builder();  // number defaults to 0\nb.rand(42);","typeGuard":null,"tryCatchPattern":"try {\n    builder.rand(seed);\n} catch (RuntimeException e) {\n    // number was non-zero — reset and retry or create a new builder\n    builder = new MathBuilder.Builder();\n    builder.rand(seed);\n}","preventionTips":["Assignment methods (rand, pi, e, randomInRange, set, setIf) require number == 0","Start each assignment chain with a fresh Builder() constructed via no-arg constructor","Do not reuse a Builder across multiple independent computations"],"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"}