我第一次尝试使用Android应用时收到错误"Cannot invoke String() on the primitive type float"
:
这是代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void calculate(View v){
EditText number1text = (EditText)findViewById(R.id.a);
EditText number2text = (EditText)findViewById(R.id.b);
EditText number3text = (EditText)findViewById(R.id.c);
Integer num1 = Integer.parseInt(number1text.getText().toString()) ,
num2 = Integer.parseInt(number2text.getText().toString()),
num3 = Integer.parseInt(number3text.getText().toString());
if ((num2 ^ 2) - (4*num1*num3) < 0){
break;
}
float ans = (float) ((-(num2)- Math.sqrt(num2^2 - (4*num1*num3)))/2*num1);
float ans2 = (float) ((-(num2)+ Math.sqrt(num2^2 - (4*num1*num3)))/2*num1);
TextView answer = (TextView)findViewById(R.id.ans1);
answer.setText("The Answer is: " + ans.toString());
TextView answer2 = (TextView)findViewById(R.id.ans2);
answer.setText("The Answer is: " + ans2.toString());
}
private TextView getText(String string) {
return null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
当我尝试拨打ans.toString()
和ans2.toString()
时出现错误。
答案 0 :(得分:4)
您无法在任何基本类型上调用toString
(或任何方法),例如float
。但是,String
转换会将String
运算符转换为+
。
answer.setText("The Answer is: " + ans);
如果您需要更多地控制显示格式,可以使用DecimalFormat
。
此外,这个表达式不符合你的想法。
(num2 ^ 2)
^
运算符在Java中是按位异或,而不是取幂。使用:
num2 * num2
答案 1 :(得分:0)
尝试Float.toString(ans)
和Float.toString(ans2)
。您无法对基元执行.toString
(或任何实例方法)。
答案 2 :(得分:0)
你不需要做任何事情。请保留以下代码:
answer.setText("The Answer is: " + ans2);
与下一个类似。
您不能在原始数据类型上使用toString()
或任何方法。
记住:方法是在类中定义的。因此,要使用方法,变量必须首先是一个对象。
<强>编辑:强>
您也可以
answer.setText("The Answer is: " + String.valueOf(ans2));
答案 3 :(得分:0)
您无法在基元上调用toString()
。您可以使用String.valueOf(float)
String str = String.valueOf(ans);
String str2 = String.valueOf(ans2);
此外,Java不会使用^
执行取幂(&#39; s bitwise xor)
if ((Math.pow(num2, 2)) - (4*num1*num3) < 0){