0

我在下面的代码中的目标是检查超过小数点后两位的输入,然后抛出异常。不过,我似乎无法正确理解。我正在尝试使用 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!
4

1 回答 1

0

由于 Java 不允许在构造函数中的 super 或构造函数调用之前放置任何语句。因此你不能这样做:

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

您可以在您正在调用的构造函数中添加检查。

于 2015-01-24T01:31:56.250 回答