我是Android开发的新手,我试图创建一个简单的毕达哥拉斯计算器,如果一行空白,我需要帮助阅读,但仍然计算而不是失败。
这是我的代码
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText sideAObj;
private EditText sideBObj;
private EditText sideCObj;
private EditText outputObj;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sideAObj = (EditText) findViewById(R.id.SideAInput);
sideBObj = (EditText) findViewById(R.id.SideBInput);
sideCObj = (EditText) findViewById(R.id.SideCInput);
outputObj = (EditText) findViewById(R.id.OutputText);
}
public void calculateClick(View v){
try {
double sideA = Double.parseDouble(sideAObj.getText().toString());
double sideB = Double.parseDouble(sideBObj.getText().toString());
double sideC = Double.parseDouble(sideCObj.getText().toString());
if (sideAObj.getText().toString().equalsIgnoreCase("0")) {
double pt = Math.sqrt((sideC * sideC) - (sideB * sideB));
outputObj.setText(String.format("%.2f", pt));
}
}
catch (NumberFormatException ex){
Toast errMess = Toast.makeText(getApplicationContext(),"Enter Numbers Only",Toast.LENGTH_SHORT);
errMess.show();
outputObj.setText(String.format("%2.f",0.00));
return;
}
}
public void clearClick(View v){
sideAObj.setText("");
sideBObj.setText("");
sideCObj.setText("");
outputObj.setText("");
sideAObj.requestFocus();
}
} 我的程序将计算它们是否为1对1,但如果我将其留空,程序将完全失败,最好的方法是防止它。
答案 0 :(得分:0)
它显然会失败,因为它不知道如何将空值解析为double。在实例化过程中只需使用类似的东西:
double sideB = (sideBObj.getText().toString() == "") ? 0 : (Double.parseDouble(sideBObj.getText().toString()));
double sideC = (sideCObj.getText().toString() == "") ? 0 : (Double.parseDouble(sideCObj.getText().toString()));
基本上,如果编辑文本字段为0,则将分配值0,您将解析输入的值为double。
如果有空白的编辑文本字段,则假设您要考虑0。
=============================================== ========================= 更新
if(sideAObj.getText().toString() != ""){
double sideA = Double.parseDouble(sideAObj.getText().toString());
}
答案 1 :(得分:0)
此问题的简单解决方案是检查每个edittext是否为空白,然后执行任务。
获取每个Edittext的值为int变量然后使用循环并在edittext.length()方法的帮助下验证它是否等于0,如果是,则将值赋值给0到新的全局变量,否则将确切的值分配给全局变量。
然后使用新变量执行计算。
示例代码以便更好地理解: -
String a = et.getText().toString();
int l = a.length();
if (l == 0){
// set the value of global variable = 0;
} else {
// set the value of global variable = a {Actual Digit}
}