【问题标题】:Returning a value in Java在 Java 中返回一个值
【发布时间】:2011-08-02 20:04:08
【问题描述】:

当方法内部有一个 if 语句根据结果返回不同的数据类型时,如何编写一个返回原始数据类型值的方法?

int minimum = 5;
int students = 4;
int studentGrades = 100;

public double getAverage(){
    if(students >= minimum){
        return studentGrades / students;
    }
    else {
        System.out.println(null, "Sorry, you don't have enough students.");
        return false;
    }
}

【问题讨论】:

    标签: java methods types return if-statement


    【解决方案1】:

    一个java方法只能有一个返回类型。所以你应该尝试一些其他的方法来处理这种情况。正如上面其他人指出的那样,您可以抛出异常。或者您可以使用可为空的数据类型,并在此特殊条件为真时返回 null。但是这样很丑,不推荐。

    【讨论】:

      【解决方案2】:

      我不是 Java 专家,但我认为这里的良好做法是在学生人数少于要求的情况下抛出异常。如果您必须返回 2 个完全不同的值,我建议您将它们封装在您自己的类中。

      【讨论】:

        【解决方案3】:

        您可以作为示例返回一个包含分数和成功标志的复合对象。 或者在上述版本中,您可以返回Double.NaN 以指示失败。或者正如其他人建议的那样,在失败的情况下抛出异常。

        【讨论】:

          【解决方案4】:

          你不能真正从同一个方法返回两种不同的原始类型。使用引用类型,您可以返回 Object,这无论如何都不是一个好主意。

          您的return false 看起来像一个错误条件,因此您可能会考虑在这里抛出异常:

          public double getAverage(){
              if(students >= minimum){
                  return studentGrades / students;
              }
              else {
                 throw new IllegalStateException("not enough students");
              }
          }
          

          【讨论】:

            【解决方案5】:

            公共对象 getAverage()

            但是你应该检查返回类

            【讨论】:

              【解决方案6】:

              在您给出的示例中,您应该抛出一个异常 - 基本上,对象的状态对于方法调用无效。您可能希望为此使用IllegalStateException,或选择不同类型的异常。 (该异常扩展了RuntimeException,因此它不是已检查 异常。这可能适合也可能不适合您的实际用例。)

              (顺便说一句,您的示例代码中的除法也不会执行您想要的操作 - 如果您希望它执行浮点除法而不是整数除法,您应该将其中一个操作数转换为 double。)

              【讨论】:

              • 抱歉,我该怎么做?我还在学习这门语言。
              • 如果我没记错的话,这将是一个 InvalidStateException
              • @enchance:Stack Overflow 并不是学习一门语言的好地方——当你对某个特定方面不确定时,这是一个提出具体问题的好地方.我强烈建议你买一本好的 Java 书,并从中学习大部分内容。例外的主题太大而无法在 SO 答案中真正做到公正。
              • 好的。我的意思是,我是。但现在我知道异常和 InvalidStateException 了,谢谢。我可以从这里拿走。返回 a-1 是我的想法,我只需要知道是否有更结构化的方法。
              猜你喜欢
              • 1970-01-01
              • 2012-11-03
              • 1970-01-01
              • 1970-01-01
              • 2021-02-06
              • 2012-04-23
              • 1970-01-01
              • 2012-03-27
              • 1970-01-01
              相关资源
              最近更新 更多