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); 
}

エラーが発生します

二項演算子の不正なオペランドタイプ'-'最初のタイプ=文字列2番目のタイプ=double"。

以前、a、b、および平均は2倍であると述べ、平均の計算方法についても述べました。a*a+b*b/2また、文字列から倍精度浮動小数点数に変更しようとしましたが、整数または倍精度浮動小数点数をどこに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-mean * mean
  2. string + "is" + a * a + b * b / 2-mean * mean
  3. 文字列+a* a + b * b / 2-mean * mean
  4. 文字列-mean*mean

(ステップ3で)を使用して文字列と数値を連結することはできますが、文字列から数値を減算+することは意味がないため、コンパイラはここで停止します。算術式全体を括弧で囲むと、結果が出力文字列の残りの部分と連結される前に、算術が最初に評価されます。

于 2012-12-03T19:12:31.400 に答える
2

すべての数式を括弧で囲み、(、、、の実際のタイプに応じてab浮動小数点除算が確実に実行されるように、でmean除算することをお勧めします。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 に答える