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

  1. Pass a positive integer (>= 1) such as isDisarium(89).
  2. Validate at the caller: if (number <= 0) reject with a user message.
  3. 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

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


AI-assisted analysis of TheAlgorithms/Java@fdfb9a395b (2026-08-13). Data as JSON: /api/errors/234a46b2d3d27e85. Report an issue: GitHub.