3

总的来说,我对 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 和平均值是双倍的,并且还说明了平均值是如何计算的。我也尝试a*a+b*b/2从字符串更改为双精度数,但后来意识到如果我将任何整数或双精度数放入 where a*a+b*b/2(例如 2),但我会得到相同的错误。任何帮助将非常感激 :)

4

4 回答 4

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)); 
于 2012-12-03T19:12:41.097 回答
3

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

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

更长的答案是Java从左到右评估您的表达式。所以一步一步,它会发生这样的事情:

  1. 均值 + "是" + a*a+b*b/2 - 均值*均值
  2. 字符串+ "是 " + a*a+b*b/2 - 平均*平均
  3. 字符串+ a*a+b*b/2 - 平均值*平均值
  4. 字符串- 均值*均值

编译器在此处停止,因为尽管您可以使用(在步骤 3 中)连接字符串和数字,但从字符串中减去+数字是没有意义的。通过在整个算术表达式周围使用括号,这将导致首先计算算术,然后将结果与输出字符串的其余部分连接起来。

于 2012-12-03T19:12:31.400 回答
2

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

于 2012-12-03T19:12:01.410 回答
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 )) ); 
于 2012-12-03T19:13:49.867 回答