有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java错误:不可比较的类型:double和<null>

我的代码给出了以下错误:

error: incomparable types: double and .

我不知道为什么

这就是我想做的:

我有一个公式(谁给我一个双精度),但如果这个公式没有给我答案(除以零,…)我要打印:没有答案

beta&;阿尔法是2双,你可以选择

double valueOne = valueOne(alfa,beta);  
double valueTwo = valueTwo(alfa,beta);  
public double valueOne(double alfa, double beta)
{
   return (-(Math.sqrt((-beta)/alfa)))+alfa;
}
public double valueTwo(double alfa, double beta)
{
    return (Math.sqrt((-beta)/alfa))+alfa;
}

if(valueOne == null && valueTwo == null)
{
    System.out.println("No values");
}

共 (5) 个答案

  1. # 1 楼答案

    我想你误解了一些事情

    1. 你似乎没有调用你的两个方法——我想你的意思是valueOne(1,2)
    2. 如果您的计算得到一个错误(例如被零除),它不会返回null,它会抛出一个算术异常
    3. 因此,您不应该将其与null进行比较,您应该使用try-catch块来处理错误
    4. 不能将double这样的原子类型与null进行比较;只有对对象的引用才能与null进行比较
  2. # 2 楼答案

    我想你需要这样的东西:

    public double[] myMethod(double vAlfa, double vBeta, double wAlfa, double wBeta) {
        double[] answers = new double[2];
        try {
            answers[0] =  (-(Math.sqrt((-vBeta) / vAlfa))) + vAlfa;
            answers[1] =  (Math.sqrt((-wBeta)/wAlfa)) + wAlfa;
        } catch (Exception e) {
            System.out.println("No values");
        }
        return answers;
    }
    

    此方法以双精度数组的形式返回进程的结果(因为您有两个值)。
    try块中,我们尝试计算答案并将它们放入数组中。 在catch块中,我们处理每个异常(NullPointerExceptionDivisionByZero或…)通过调用System.println();为我们打印给定字符串。
    希望能有帮助

  3. # 3 楼答案

    您可以使用字符串操作,因为java不允许基元类型具有空值。 如果字符串为空,则不会显示任何值。我希望这有帮助

         public static void main(String []args){
        if(valueOne(0,0).equals("") && valueTwo(0,0).equals(""))
            System.out.println("No values");
        else
            System.out.println("val1:"+valueOne(0,0)+"val2:"+valueTwo(0,0));
    
         }
         public static String valueOne(double alfa, double beta){
            return ""+(-(Math.sqrt((-beta)/alfa)))+alfa;;
        }
    public static String valueTwo(double alfa, double beta){
            return ""+(-(Math.sqrt((-beta)/alfa)))+alfa;;
        }
    
  4. # 4 楼答案

    首先valueOnevalueTwo都是方法,但您尝试将它们称为变量(?)

    if(valueOne == null && valueTwo == null){
    

    第二,无论如何,这些方法和(如果定义相同类型的变量)的返回类型是double,这是一个原语,不能是nullnull是一个特殊值,只能与对象引用一起使用

    以一些java教程为例,从一开始就解释java类型

  5. # 5 楼答案

    doublenull进行比较当然是非法的,因为第一个是值类型,并且值类型在与引用类型进行比较时绝不是null所代表的值类型。此页面可能会帮助您区分这两种:What’s the difference between a primitive type and a class type in Java?

    如果您不想对无效值或结果抛出异常,您的方法可以使用Double.NaNconstnt字段:

    public double valueOne(double alfa, double beta)
    {
        // At least one of the values is invalid.
        if (Double.isNaN((alfa) || Double.isNaN((beta))
        {
            return Double.NaN;
        }
    
        // Check the alpha or otherwise a div/0 exception may be thrown.
        if (alfa == 0.0)
        {
            return Double.NaN;
        }
    
        double divResult = (-beta)/alfa;
    
        // Check the div result because Math.sqrt accepts only positive values:
        // If the argument is NaN or less than zero, the result is NaN. 
        if (divResult < 0.0)
        {
            return Double.NaN;
        }
    
        return (-(Math.sqrt(divResult)))+alfa;
    }
    
    double resultValueOne = valueOne(alfa, beta);  
    if(Double.isNaN((resultOne))
    {
        System.out.println("No resultValueOne");
    }
    

    Sample at ideone