"类型不匹配:无法从空转换为双"是什么意思?

2 java

我正在尝试解决Java的Art&Science,二次方程的解决方案.

import acm.program.*;

public class QuadraticEquation extends ConsoleProgram {
  public void run(){
    println("Enter coefficients for quadratic equation");
    int a = readInt("Enter first number: ");
    int b = readInt("Enter second number: ");
    int c = readInt("Enter third number: ");

    double result = quadratic(a,b,c);

    println("The first solution is: " + result);
  }

  private double quadratic(int a, int b, int c){
    double underSquare = (b*b-4*a*c);
    double x = (-b+Math.sqrt(b*b-(4*a*c)))/(2*a);
    if (underSquare < 0) {
        return null;
    } else {
      return (x);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我有一个错误: return null; 说:

类型不匹配:无法从null转换为double

我真的不明白这个错误是什么,我应该如何正确解决?

Emi*_*Sit 5

您需要了解基本类型(例如double)和盒装对象类型(例如,资本-D Double)之间差异.虽然Double是对象的引用(因此可以是null),但是double是原始的而不是null.

编译器告诉您已声明函数的返回类型,double因此null无法转换为double.

当然,您可以通过将返回类型更改为Double(可以使null返回合法,并使原始双打 自动装入Doubles)来"修复"问题,但这并不能真正为您提供服务.你想要一个更好的错误处理策略(其中有很多......一些可能性是抛出一个异常,使用一个可选的返回类型,使用一个标志值,例如not-a-number aka Double.NaN).