不能从另一个减去一个双倍?

时间:2012-12-03 19:08:05

标签: java string double

我对Java和编程一般都很陌生,但我已经阅读了相当多的内容。我正在制作我的第一个真正的OOP-一个可以执行某些方程式的计算器。 然而,在尝试编程可以计算分布方差的东西时 - 看代码:

void variance() {
  System.out.println("The variance of a distribution with x values of " + a + b + "and mean" 
                + mean + "is " + a*a+b*b/2 - mean*mean); 
}

我收到错误

  

二元运算符的错误操作数类型' - '                      第一个类型=字符串                      第二种类型=双“。

我之前曾说过a,b和mean是双打的,并且还说明了如何计算平均值。我也尝试将a*a+b*b/2从字符串更改为double,但后来意识到如果我将任何整数或双精度放入a*a+b*b/2(例如2)但我得到相同的错误。 任何帮助将不胜感激:))

4 个答案:

答案 0 :(得分:5)

那是因为+在Java中被重载以进行字符串连接。你需要在数学表达式周围加上括号。

System.out.println("The variance of a distribution with x values of " + a + b + "and mean" 
 + mean + "is " + (a*a+b*b/2 - mean*mean)); 

答案 1 :(得分:3)

简短的回答是你需要这样做:

            + mean + "is " + (a*a+b*b/2 - mean*mean)); 

答案越长,Java就会从左到右评估你的表达式。所以一步一步地发生这样的事情:

  1. mean +“is”+ a * a + b * b / 2 - mean * mean
  2. string +“is”+ a * a + b * b / 2 - mean * mean
  3. string + a * a + b * b / 2 - mean * mean
  4. string - mean * mean
  5. 编译器在这里停止,因为尽管你可以使用+ 连接字符串和数字(​​在步骤3中),但减去一个字符串中的数字。通过在整个算术表达式周围使用括号,这将导致在结果与输出字符串的其余部分连接之前首先计算算术。

答案 2 :(得分:2)

围绕括号之间的所有数学表达式,并且(取决于abmean的实际类型),最好除以{{1} },以确保执行浮点除法。

答案 3 :(得分:0)

您正在将String +运算符与Double运算符混合。

试试这个:

System.out.println( "The variance of a distribution with x values of " 
    + ( a + b ) + " and mean " 
    + mean + " is " 
    + ( ( a * a + b * b / 2 ) - ( mean * mean )) );