Java 如果方法参数无效,则引发异常

Java 如果方法参数无效,则引发异常,java,Java,我对java有点陌生,所以我想请原谅这个相当简单的问题。此方法仅计算正整数上的位数。因此它需要向调用者抛出一个错误。当输入为负数时,我抛出一个错误并在不返回任何内容的情况下退出该方法,我该怎么做 public static int countDigits(int n) { if (n<0) { System.out.println("Error! Input should be positive");

我对java有点陌生,所以我想请原谅这个相当简单的问题。此方法仅计算整数上的位数。因此它需要向调用者抛出一个错误。当输入为负数时,我抛出一个错误并在不返回任何内容的情况下退出该方法,我该怎么做

public static int countDigits(int n)
    {
        if (n<0)
        {
            System.out.println("Error! Input should be positive");
            return -1;
        }
        int result = 0; 
        while ((n/10) != 0)
        {
            result++;
            n/=10;
        }
        return result + 1;
    }
公共静态int countDigits(int n)
{

如果(n您需要抛出异常

if (n < 0) {

    throw new Exception("n must be a positive integer");
}
不同类型的错误可以在try-catch中单独处理


我将以更简洁的方式查看此操作。

您没有在此处抛出错误;您正在显示一条错误消息并返回一个哨兵值
-1

如果要抛出错误,必须使用
throw
关键字,后跟相应的
异常

public static int countDigits(int n) {
    if (n < 0) {
        throw new IllegalArgumentException("Input should be positive");
    }
    int result = 0;
    while ((n / 10) != 0) {
        result++;
        n /= 10;
    }
    return result + 1;
}
公共静态int countDigits(int n){
if(n<0){
抛出新的IllegalArgumentException(“输入应为正”);
}
int结果=0;
而((n/10)!=0){
结果++;
n/=10;
}
返回结果+1;
}

on抛出异常将为您提供关于存在哪些不同类型异常的宝贵见解。上面,
IllegalArgumentException
被视为运行时异常,因此调用此方法的对象不会被迫捕获其异常。

这取决于调用方是否没有处理最终失败当然,我会抛出一个异常。但是返回一个像-1这样的值,然后在调用后检查结果要简单得多。异常很慢。

抛出新的IllegalArgumentException(“输入应该是正的”)
。你可以用谷歌搜索它的功能。请不要使用泛型的
异常
类。Java附带了许多有用的标准异常类,例如
IllegalArgumentException
。我建议在这种情况下使用它。不过,使用异常更干净更有意义。我认为这更重要。这不是一个简单的问题回答是因为提问者询问如何抛出异常。大多数情况下都是这样。但由于其他答案已经讨论了异常,我认为显示一个替代选项会很有用。如果调用方知道这一点,并且不希望以异常结束,那么他们可以在传递该值之前检查该值。异常应该很少,所以速度是无关紧要的……”“异常很慢”几乎从来都不是避免它们的好理由。这是一个糟糕的答案。毫无例外,你会用不必要的if-else污染你的代码。正如Jon Skeet所说,你不应该调用输入无效的函数。
public static int countDigits(int n) {
    if (n < 0) {
        throw new IllegalArgumentException("Input should be positive");
    }
    int result = 0;
    while ((n / 10) != 0) {
        result++;
        n /= 10;
    }
    return result + 1;
}