运算符*不能应用于double

时间:2015-01-20 22:52:00

标签: java android operator-keyword multiplying

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

     }
}

我正在尝试为三角形区域制作一个简单的计算器,但我似乎被困在这里。

5 个答案:

答案 0 :(得分: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(请参阅" Java教程>的Floating Point Literals部分;原始数据类型"更简单的英文解释)。

如果没有它,它们将被解释为整数文字。具有两个整数变量的算术运算符导致执行整数除法(由于binary numeric promotion将它们都视为整数)。这给出了0的结果(作为整数)。只有这样才会在widening primitive converstion期间将结果扩展(使用assignment conversion)加倍。

答案 1 :(得分: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);

然后在算术中使用这些变量

答案 2 :(得分:0)

你有* hoogtie和基础是EditText并且不能成倍增加。

答案 3 :(得分: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;

答案 4 :(得分:0)

您正在从EditText中提取值,但您没有使用此行中正在解析的double值,例如:

Double.valueOf(tussenBasis);

您尝试使用EditText本身作为因素,但它不是double,因此无法与*运算符一起使用乘以这些值。

Double.valueOf的结果分配给新的double变量,并在计算中使用这些变量。

顺便提一下,1 / 2在Java中是整数除法,并且将评估为0。试试1.0/2.0或只使用0.5