错误:无法比较的类型:double和<null> </null>

时间:2015-01-06 08:01:12

标签: java null double

我的代码给了我这个错误:

  

错误:无法比拟的类型:double和。

我不知道为什么。

这就是我想要做的事情:

我有一个formule(谁给了我一个双)但如果这个formule没有给我答案(除以零,......)我想打印:没有答案!

beta&amp;阿尔法是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 个答案:

答案 0 :(得分:2)

doublenull进行比较当然是非法的,因为第一个是值类型,而值类型永远不会是nullnull在比较时代表引用类型。此页面可以帮助您区分这两者:What’s the difference between a primitive type and a class type in Java?

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

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

答案 1 :(得分:1)

我猜你需要这样的东西:

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块中,我们通过调用NullPointerException来处理每个异常(DivisionByZeroSystem.println();或...),以便为我们打印给定的字符串。
希望它有所帮助。

答案 2 :(得分:0)

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

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

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

从头开始学习一些解释java类型的java教程。

答案 3 :(得分:0)

我认为你在这里误解了一些事情。

  1. 你似乎不是在调用你的两种方法 - 我认为你的意思是像valueOne(1,2)
  2. 如果您的计算出错(例如除以零)它不会返回null,则会抛出ArithmeticException
  3. 因此,您不应该与null进行比较,您应该使用try catch块来处理错误
  4. 你不能将像double这样的原子类型与null进行比较;只能将对象的引用与null进行比较

答案 4 :(得分:0)

您可以使用字符串操作,因为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;;
    }
相关问题