java - 返回整数或 double 时如何确保 catch 返回值不同于 try 返回值

标签 java return double try-catch

大家好,这是我的第一个问题,如果之前有人回答过这个问题,我深表歉意,但我找不到问题的答案,所以我把它贴在这里。

如果你的方法有一个返回值,可以是正数,也可以是负数,并且你不确定返回值的范围,如果你得到一个异常,你应该返回什么值?

例如在下面的方法中-

public double calculateDifference(String studentName, String quizName) {
  try {
      Quiz quiz = quizDAO.retrieve(quizName);
      double averageScore = quiz.getAverageScore();
      Student student = quiz.getStudent(studentName);
      double score = student.getScore();
      return score - averageScore;
   } catch (NullPointerException e) {
      return -1;
  }
}

假设score和average score有一个很大的范围,如果我的catch中的返回值等于没有异常时返回的值呢?

例如score=2,平均score=3,所以我会得到-1作为返回值。

当我得到返回值时,我不确定是否捕获了异常。

我想我想问的是,是否有办法在被捕获时返回一个唯一的 double 值,该值不会与其他可能的返回值冲突。

最佳答案

很简单:NullPointerExceptions错误

你没有捕获他们。

调试它们以了解它们的原因,然后解决问题。故事结局。

是的,当您有一个非常庞大的应用程序时,您的顶层可以捕获 RuntimeException - 但只是记录该信息并以某种方式向您的用户提供有用的消息。

是的,您可以捕获某些 RuntimeExceptions,例如在解析本应为数字的输入字符串时出现的 NumberFormatException。但如前所述,捕获 NPE 以返回 -1 是完全错误的。它隐藏了一个错误条件,并且几乎不可能预测您的代码将如何从那里继续。

在您的特定情况下:只需确保您不使用空参数调用该方法。或者,如果你真的想允许传递空参数,你可以放一些像

这样的东西
Objects.requireNonNull(var, "var must not be null) 

在您的方法的第一行(检查每个可能为空的参数)。然后,您至少要明确指出传递 null 将使该方法抛出 npe,即使有一个清晰的错误消息也是如此。

关于java - 返回整数或 double 时如何确保 catch 返回值不同于 try 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43956524/

相关文章:

划分 double 时 C# 精度损失

java - 遇到 double 问题

java - 使用文件集和路径元素在 build.xml 中设置类路径的区别

javascript - 非法返回语句错误

java - 是否可以从 Java 访问 SQLite 数据库或(SqLite 的 Sql 浏览器)?

c++ - C++ 中指针的自动返回类型

javascript - 未捕获的语法错误 : Unexpected token return - still no answer?

c++ - 在统计学家类中实现乘数

java - 继承和递归

java 查找 PostgreSQL 服务器是否正在运行