我做了一个安卓计算器,最近我给它添加了+/-按钮。我面临的问题是,首先,当我使用它并按下等号按钮时,应用程序崩溃了。此外,只要我单击 +/- 按钮,数字就会变成浮点值,当我键入任何数字时,数字值会在小数点后继续。示例:我有 200,按 +/- 数字变为 200.0,当我键入任何数字时,它变为 200.01。我该如何克服这个问题?有人可以让我知道我的代码需要进行哪些更改吗?这里是。 谢谢。 :)
public class MainActivity extends Activity {
Typeface font1, font2;
TextView tv1;
private EditText Scr; //textbox screen
private float NumberBf; //Save screen before pressing button operation;
private String Operation;
private ButtonClickListener btnClick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
font1=Typeface.createFromAsset(getAssets(), "digits.ttf");
Scr=(EditText)findViewById(R.id.editText);
Scr.setTypeface(font1);
font2=Typeface.createFromAsset(getAssets(), "alexbrush.TTF");
tv1=(TextView)findViewById(R.id.textView1);
tv1.setTypeface(font2);
Scr = (EditText) findViewById(R.id.editText);
Scr.setEnabled(false);
btnClick = new ButtonClickListener();
int idList[] = {R.id.button0,R.id.button7, R.id.button1, R.id.button8,R.id.button9,R.id.button4,
R.id.button5,R.id.button6,R.id.button,R.id.button2,R.id.button3,R.id.buttonDot,
R.id.buttonMul,R.id.buttonDiv,R.id.buttonAdd,R.id.buttonSub,R.id.buttonC,
R.id.buttonEq, R.id.buttonSqrt, R.id.buttonsquare, R.id.buttonNp
};
for(int id:idList){
View v = (View) findViewById(id);
v.setOnClickListener(btnClick);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void mMath(String str){
NumberBf = Float.parseFloat(Scr.getText().toString()); //save the screen
Operation = str; //save operation
Scr.setText("0"); //Clear screen
}
public void getKeyboard(String str){
String ScrCurrent = Scr.getText().toString();
if(ScrCurrent.equals("0"))
ScrCurrent = "";
ScrCurrent += str;
Scr.setText(ScrCurrent);
}
public void mResult(){
float NumAf = Float.parseFloat(Scr.getText().toString());
float result = 0;
if(Operation.equals("+")){
result = NumAf + NumberBf;
}
if(Operation.equals("-")){
result = NumberBf - NumAf;
}
if(Operation.equals("*")){
result = NumAf * NumberBf;
}
if(Operation.equals("/")){
result = NumberBf / NumAf;
}
Scr.setText(String.format("%10d", result));
}
public void fnSqrt(){
double Number = Double.parseDouble(Scr.getText().toString());
Number = Math.sqrt(Number);
Scr.setText(String.valueOf(Number));
}
public void fnSquare(){
float Number1 = Float.parseFloat(Scr.getText().toString());
Number1 = pow(Number1, 2);
Scr.setText(String.valueOf(Number1));
}
public void fnNp(){
float Number = Float.parseFloat(Scr.getText().toString());
Number = Number*(-1);
Scr.setText(String.valueOf(Number));
}
private float pow(float number1, int i) {
return number1*number1;
}
private class ButtonClickListener implements OnClickListener{
public void onClick(View v){
switch (v.getId()){
case R.id.buttonC: //Clear screen
Scr.setText("0");
NumberBf = 0;
Operation = "";
break;
case R.id.buttonAdd: //function Add
mMath("+");
break;
case R.id.buttonSub:
mMath("-");
break;
case R.id.buttonMul:
mMath("*");
break;
case R.id.buttonDiv:
mMath("/");
break;
case R.id.buttonEq:
mResult();
break;
case R.id.buttonSqrt:
fnSqrt();
break;
case R.id.buttonNp:
fnNp();
break;
case R.id.buttonsquare:
fnSquare();
break;
default:
String numb = ((Button) v).getText().toString();
getKeyboard(numb);
break;
}
}
}
}
最佳答案
关于您的第一个问题:您是否遇到空指针异常?
public void mResult(){
float NumAf = Float.parseFloat(Scr.getText().toString());
不会阻止您尝试将 null String 转换为 float 的语句,这显然会让您的应用程序崩溃。所以包括一个机制来捕获之前的空值。
case R.id.buttonEq:
if (Scr.getText() != null)
mResult();
break;
我认为这是防止您的 mResult()
获得空值的最简单方法。
对于你的第二个问题:它变成了一个 float ,因为你做了
float Number = Float.parseFloat(Scr.getText().toString());`
当您将 200 转换为 float 时,它将变为 200.00,它将作为字符串返回。
编辑:我意识到你也有一个 dotButton(你的代码真的很乱)。建议的替代方案当然不适用于十进制数字,因为它总是转换您的 number
值。要防止这种行为,您可以实现一个简单的 if/else 语句。
public void fnNp() {
if (Scr.getText().toString().contains(".")) {
float Number = Float.parseFloat(Scr.getText().toString());
Number = Number*(-1);
Scr.setText(String.valueOf(Number));
} else {
int number = Integer.parseInt(Scr.getText().toString());
Number = Number*(-1);
Scr.setText(String.valueOf(Number));
}
}
关于java - 加上或减去我的安卓计算器中的小故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167268/