我对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)但我得到相同的错误。
任何帮助将不胜感激:))
答案 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就会从左到右评估你的表达式。所以一步一步地发生这样的事情:
编译器在这里停止,因为尽管你可以使用+
连接字符串和数字(在步骤3中),但减去一个字符串中的数字。通过在整个算术表达式周围使用括号,这将导致在结果与输出字符串的其余部分连接之前首先计算算术。
答案 2 :(得分:2)
围绕括号之间的所有数学表达式,并且(取决于a
,b
,mean
的实际类型),最好除以{{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 )) );