TheAlgorithms/Java · error · IllegalArgumentException
Input must be a positive integer.
Error message
Input must be a positive integer.
What it means
Thrown by DisariumNumber.isDisarium when number <= 0. A Disarium number is one where the sum of each digit raised to the power of its position equals the number (e.g. 89 = 8^1 + 9^2). The position-based computation requires at least one digit, and zero/negative numbers are outside the defined domain, so the library rejects non-positive input before computing digit count.
Source
Thrown at src/main/java/com/thealgorithms/maths/DisariumNumber.java:24
* Example: 135 = 1^1 + 3^2 + 5^3 = 1 + 9 + 125 = 135
*
* @see <a href="https://en.wikipedia.org/wiki/Disarium_number">Disarium Number</a>
*/
public final class DisariumNumber {
private DisariumNumber() {
}
/**
* Checks if a number is a Disarium number.
*
* @param number the number to check (must be positive)
* @return true if number is Disarium, false otherwise
* @throws IllegalArgumentException if number is not positive
*/
public static boolean isDisarium(int number) {
if (number <= 0) {
throw new IllegalArgumentException("Input must be a positive integer.");
}
int digits = String.valueOf(number).length();
int temp = number;
int sum = 0;
while (temp > 0) {
int lastDigit = temp % 10;
sum += (int) Math.pow(lastDigit, digits);
digits--;
temp /= 10;
}
return sum == number;
}
}
View on GitHub (pinned to fdfb9a395b)
Solutions
- Pass a positive integer (>= 1) such as isDisarium(89).
- Validate at the caller: if (number <= 0) reject with a user message.
- Parse-and-check before calling, especially for data from files or forms.
Example fix
// before boolean d = DisariumNumber.isDisarium(0); // after boolean d = DisariumNumber.isDisarium(89);
Defensive patterns
Strategy: validation
Validate before calling
if (number <= 0) {
throw new IllegalArgumentException("Disarium input must be > 0");
}
DisariumNumber.isDisarium(number); Type guard
static boolean isPositive(int n) { return n > 0; } Prevention
- Reject 0 and negatives at the input boundary.
- Start scan ranges at 1.
- Validate parsed integers before classification calls.
When it happens
Trigger: Calling isDisarium(0), isDisarium(-175), or passing an unvalidated parsed integer. The guard fires before String.valueOf(number).length() is used to seed the position counter.
Common situations: User input that is empty or a minus sign and parses to 0 or negative; a loop boundary starting at 0; default int field value of 0 passed inadvertently.
Related errors
- Must be a natural number
- Input must me positive.
- n must be positive.
- number is negative
- n must be positive and odd.
AI-assisted analysis of TheAlgorithms/Java@fdfb9a395b (2026-08-13).
Data as JSON: /api/errors/234a46b2d3d27e85.
Report an issue: GitHub.