2015-01-20 35 views
0
public void onClick(View v){ 
    switch(v.getId()){ 
     case R.id.bereken: 

      EditText basis = (EditText)findViewById(R.id.Basis); 
       String tussenBasis = basis.getText().toString(); 
       Double.valueOf(tussenBasis); 
      // 

      EditText hoogte = (EditText)findViewById(R.id.Hoogte); 
       String tussenHoogte = hoogte.getText().toString(); 
       Double.valueOf(tussenHoogte); 

      double half = 1/2; 
      //half = 0,5 

      double einde = half * basis * hoogte; 
      //eind antwoord formule 

      ((TextView)findViewById(R.id.antwoord)).setText("Het antwoord is: " + einde); 
      break; 
    } 

    } 
} 

我正在嘗試爲三角形的面積做一個簡單的計算器,但我似乎被卡在了這裏。運算符*不能應用於雙精度值

+0

閱讀*全*錯誤信息,並注意*所有/兩*類型。爲什麼他們不能「和諧地一起玩」呢? – user2864740 2015-01-20 22:58:38

+3

請勿將「已解決」添加到標題中。指示此方法的堆棧溢出方式是單擊解決問題的答案旁邊的「打勾」圖標。 – 2015-01-20 23:04:07

回答

5

half * basis是非法的basis類型EditText(所以是hoogte)你想要乘以half?也許你需要將Double.valueOf(tussenBasis)Double.valueOf(tussenHoogte)的結果分配給double變量,並在乘法中使用它?

EditText basis = (EditText)findViewById(R.id.Basis); 
String tussenBasis = basis.getText().toString(); 
double basisDouble = Double.valueOf(tussenBasis); 
// 

EditText hoogte = (EditText)findViewById(R.id.Hoogte); 
String tussenHoogte = hoogte.getText().toString(); 
double hoogteDouble = Double.valueOf(tussenHoogte); 

double half = 1d/2d; 
//half = 0,5 

double einde = half * basisDouble * hoogteDouble; 

還要注意從double half = 1/2;double half = 1d/2d;

的變化(編輯響應從OP評論)您需要使用的d「類型的後綴」指定的文字(文字12 )是double literals(請參閱「The Java Tutorials>原始數據類型」的Floating Point Literals部分以獲得更簡單的英文解釋)。

沒有這些,他們被解釋爲整數文字。具有兩個整數變量的算術運算符會導致整數除法(由於binary numeric promotion將它們都視爲整數)。這給出了結果(作爲整數)0。只有這樣,在assignment conversion期間,結果纔會加倍(使用widening primitive converstion)以加倍。

+0

我知道它會導致零,因此您添加了「d」,但它們代表什麼? – MalumAtire832 2015-01-20 23:05:29

+1

@ MalumAtire832看到我的編輯解釋你爲什麼需要他們。通常,將指定的數字指定爲'float',類型後綴爲'f','d'指定爲'double',用'L'指定爲'long'。你不需要一個'int'的後綴。 – 2015-01-20 23:25:06

0

你有* hoogtie和基礎是EditText和不能乘以。

0

當你做Double.valueOf時,你需要將結果賦值給某個東西。所以這樣。

EditText basis = (EditText)findViewById(R.id.Basis); 
String tussenBasis = basis.getText().toString(); 
double basisValue = Double.valueOf(tussenBasis); 

以及與hoogte相似。然後,你可以寫

double einde = half * basisValue * hoogteValue; 
0

你提取從EditText值,但是您沒有使用double值你在這行被解析,例如:

Double.valueOf(tussenBasis); 

您正在嘗試使用EditText本身作爲一個因素,但它不是double,所以它不能與*運算符一起使用來乘以這些值。

Double.valueOf的結果分配給新的double變量,並在計算中使用這些變量。

順便提一下,1/2是Java中的整數除法,將評估爲0。嘗試1.0/2.0或只使用0.5

1
EditText basis = (EditText)findViewById(R.id.Basis); 

是不是您可以在算術中使用的值。同樣的,:

EditText hoogte = (EditText)findViewById(R.id.Hoogte); 

你正試圖在這裏double einde = half * basis * hoogte;

哪些不能做使用它們。

我敢肯定你需要的是將這些值保存到變量

Double.valueOf(tussenHoogte); 
Double.valueOf(tussenBasis); 

,然後使用這些變量在算術

相關問題