是否有可能从Java中的If语句引发异常?

时间:2020-10-10 08:57:46

标签: java if-statement exception

我正在处理一项作业,并被告知使用异常处理回答问题。 这是问题:

validateShelveNo(String)方法接收到被搁置的号码,并检查shelveNo是否以ABC开头。 如果不是,则该方法将引发异常错误“货架编号必须以ABC开头”。 此外,该方法还会检查条形码是否以101到120之间的任何数字结尾,否则该方法 引发“货架编号必须在101和120之间”。 当货架编号满足所有要求时,该方法必须返回true。

和我的答案:

public boolean validateShelveNo(String shelveNo) {
    boolean test2 = true;
   
        if (shelveNo.startsWith("ABC") == true)) {
            test2 = true;
        }
    else
      {
         throw new Exception("The shelf number must start with ABC ");
        test2 = false;
      }
  
        String lastThreeDigits = "";
        if (shelveNo.length() > 3)
 {
            lastThreeDigits = shelveNo.substring(shelveNo.length() - 3);
            for (int i = 0; i < lastThreeDigits.length; i++) {
                if ((Character.isDigit(lastThreeDigits.charAt(i)) == true)) {
                    int digits = Integer.parseInt(lastThreeDigits);
                    if (digits >= 101 && digits <= 120) {
                        test2 = true;
                    }
                    else {
                        throw new IllegalArgumentException("The shelf number must be within 101 and 120");
                        test2 = false;
                    }
                    test2 = true;
                }
                else {
                    System.out.println(" The last 3 Characters are not numeric");
                    test2 = false;
                }
            }
        }
        else {
            throw new IllegalArgumentException("shelf number has less than 3 characters!");
            test2 = false;
        }
    }
   
    return test2;
}

1 个答案:

答案 0 :(得分:0)

这是我的实现。希望只使用您知道的Java部分。

/**
 * Validates the shelf number. The number must begin with "ABC" and must terminate with
 * a three digit integer number between 101 and 120. Method throws unchecked exception
 * if the supplied shelf number is not valid.
 * 
 * @param shelfNo - the shelf number to validate.
 * 
 * @return  true if shelfNo is valid.
 */
public boolean validateShelfNo(String shelfNo) {
    if (shelfNo == null) {
        throw new NullPointerException("Null shelf number.");
    }
    int length = shelfNo.length();
    if (length == 0) {
        throw new IllegalArgumentException("Empty shelf number.");
    }
    if (length < 6) {
        throw new IllegalArgumentException("Invalid shelf number: " + shelfNo);
    }
    shelfNo = shelfNo.toUpperCase();
    if (!shelfNo.startsWith("ABC")) {
        throw new IllegalArgumentException("Invalid shelf number: " + shelfNo);
    }
    String lastThreeDigits = shelfNo.substring(length - 3);
    int number = Integer.parseInt(lastThreeDigits); // throws NumberFormatException if 'suffix' not a number
    if (number < 101  ||  number > 120) {
        throw new IllegalArgumentException("Number not between 101 and 120.");
    }
    return true;
}

首先,我添加 javadoc 注释,说明该方法的作用。因为它是一个公共方法,所以任何人都可以调用它,因此您需要向他们解释它的作用。

可以使用任何类型的参数值调用该方法,因此在检查它以ABC开头并以101到120之间的数字结尾之前,需要确保它不为null,并且至少包含六个字符。 / p>

由于只要shelfNo无效,该方法都会引发异常,因此该方法仅需要返回true。当一个方法抛出异常时,它不需要返回任何东西。