{"record":{"id":"25c467c80d18a43a","repo":"TheAlgorithms/Java","slug":"number-must-be-zero-to-set","errorCode":null,"errorMessage":"Number must be zero to set!","messagePattern":"Number must be zero to set!","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/main/java/com/thealgorithms/maths/MathBuilder.java","lineNumber":426,"sourceCode":"            return this;\n        }\n\n        // Recalls the NUMBER on condition\n        public Builder recallIf(Function<Double, Boolean> condition, boolean cleanMemory) {\n            if (!condition.apply(number)) {\n                return this;\n            }\n            number = memory;\n            if (cleanMemory) {\n                memory = 0;\n            }\n            return this;\n        }\n\n        // Replaces NUMBER with given number\n        public Builder set(double num) {\n            if (number != 0) {\n                throw new RuntimeException(\"Number must be zero to set!\");\n            }\n            number = num;\n            return this;\n        }\n\n        // Replaces NUMBER with given number on condition\n        public Builder setIf(double num, BiFunction<Double, Double, Boolean> condition) {\n            if (number != 0) {\n                throw new RuntimeException(\"Number must be zero to set!\");\n            }\n            if (condition.apply(number, num)) {\n                number = num;\n            }\n            return this;\n        }\n\n        // Prints current NUMBER\n        public Builder print() {","sourceCodeStart":408,"sourceCodeEnd":444,"githubUrl":"https://github.com/TheAlgorithms/Java/blob/fdfb9a395b310167a66bd29e311e36e0e3e9b964/src/main/java/com/thealgorithms/maths/MathBuilder.java#L408-L444","documentation":"Thrown by Builder.set(double num) when the builder's internal number field is not 0. The set() method is an unconditional assignment that replaces number with the given value; the guard prevents accidental overwriting of accumulated state. Uses RuntimeException.","triggerScenarios":"Calling set(num) after any operation that set number to non-zero: new MathBuilder.Builder(5).set(10), or after add/multiply/pi/rand on a non-zero builder.","commonSituations":"Developer expects set() to work like a setter (always overwrite), but the guard requires number to be 0 first. This is counterintuitive since set implies overwrite semantics. Typically hit when reusing a Builder across multiple computations.","solutions":["Call set() only on a fresh Builder where number is 0","Create a new Builder() instance for each independent computation rather than reusing one","If you must reset, build the current state first, then construct a new Builder for the next value"],"exampleFix":"// before\nMathBuilder.Builder b = new MathBuilder.Builder(5);\nb.set(10);  // throws\n\n// after\nMathBuilder.Builder b = new MathBuilder.Builder();\nb.set(10);","handlingStrategy":"validation","validationCode":"// Call set() only on a fresh builder where number == 0\nMathBuilder.Builder b = new MathBuilder.Builder();\nb.set(42.0);","typeGuard":null,"tryCatchPattern":"try {\n    builder.set(value);\n} catch (RuntimeException e) {\n    builder = new MathBuilder.Builder();\n    builder.set(value);\n}","preventionTips":["set() requires number == 0 despite its name implying unconditional overwrite","Never reuse a Builder after build() — create a new one for the next computation","For conditional assignment use setIf, but it has the same number == 0 precondition"],"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"}