2012-12-03 34 views
3

對於Java和一般的編程來說,這是一個相當新的東西,但我已經讀了很多。我正在製作我的第一個真正的OOP--一個可以執行某些方程的計算器。 然而,儘管試圖編程的東西,將計算分佈的方差-Heres代碼:不能從另一個減去一個double?

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從一個字符串改爲double,但後來認識到,如果我把任何整數或雙打放入a*a+b*b/2(例如, 2)但我得到同樣的錯誤。 任何幫助,將不勝感激:)

+0

你在哪裏聲明** **的意思放 – ekims

+0

括號表達式'(A * A + B * B/2 - 均值*均值)' – andre

+1

的方式,這些是括號:'[]',而這些是括號:'()' –

回答

2

環繞括號之間的所有數學表達式,並(根據實際類型的abmean),也最好通過2.0來劃分,以確保浮點劃分被執行。

+0

啊好吧,非常感謝,現在得到它:) –

+0

確保執行*浮點*除法。 – EJP

+0

@EJP好的,修復它。 –

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),它是沒有意義的從字符串中減去一個數字。通過在整個算術表達式中使用括號,在結果與輸出字符串的其餘部分連接之前,這將導致首先計算算術。

+0

+1完美...... –

+0

+1,但是一個nit:對於任何給定的運算符,Java會從左到右評估*操作數*。它根據運算符優先級評估表達式。 – EJP

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

+1我也可以建議OP實際上希望'((a * a + b * b)/2.0 - mean * mean)' –

+0

他們可能需要這個;我不想將這個問題與公式在數學上是否正確混淆。 –

+0

完美用於評論... ook ook eek eek。 –

0

您與Double運營商混合String+操作。

試試這個:

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