Ошибка проверки проекта в Java

Моя цель в приведенном ниже коде состоит в том, чтобы проверить ввод, который длиннее двух знаков после десятичной точки, а затем выдать исключение. Я не могу понять, хотя это правильно. Я пытаюсь использовать indexOf, чтобы добраться до десятичной точки, а затем я хочу проверить длину части после нее. Если оно больше 2, я хочу, чтобы оно выдало исключение. У кого-нибудь есть советы по этой ситуации?

 public ChangeJar(final String amount) {
    int i = amount.indexOf('.');
    String temp = amount.substring(i + 2);

    if(temp.length() > 2 ){
    throw new IllegalArgumentException("Too many decimal places!");
    }

    if (amount == null || Double.parseDouble(amount) < 0) {
        throw new IllegalArgumentException("amount cannot be null!");
    }
    double amt;
    try {
        amt = Double.parseDouble(amount);
    } catch (NumberFormatException ex) {
        throw new IllegalArgumentException("Invalid entry. Format is 0.00.");
    }
    amountHelper(amt);
}

Я также хотел знать, как я мог бы добавить проверку ошибок в этот конструктор, так как я не хочу нулевые входные данные. Я получаю сообщение об ошибке при попытке добавить проверку ошибок, которая говорит, что вызов конструктора должен быть первым оператором в методе. Мой код для конструктора:

public ChangeJar(final ChangeJar other){
    if(other == null){
        throw new IllegalArgumentException("Values cannot be null!");
    }
    this(other.quarters, other.dimes, other.nickels, other.pennies);
}



All suggestions are appreciated!

1 ответ

Поскольку Java не позволяет помещать какие-либо операторы перед вызовами супер или конструктора в конструкторе. Следовательно, вы не можете сделать это:

public ChangeJar(final ChangeJar other){
    if(other == null){
        throw new IllegalArgumentException("Values cannot be null!");
    }
    this(other.quarters, other.dimes, other.nickels, other.pennies);
}

Вы можете добавить проверку в конструктор, который вы вызываете.

Другие вопросы по тегам