因此,如果我的值为1234,则输出应为4。
我已经写了以下代码,但不知道我做错了什么。 这是一个App,可以添加两个数字。所以我有两个EditTextfields。但如果EditTextfield留空,则应用程序崩溃。 所以我想把值0赋给一个EditTextfield,它被留空了,因为它(应该)的字符长度为0。
这应该得到正确的结果:
例如,如果EditTextfield" firstnumET"保持值为5和" secondnumET"留空:
5 + 0 = 5
问题可能是
private int firstnum;
private int secondnum;
private int total;
EditText firstnumET;
EditText secondnumET;
TextView ansTV;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cal2_numbers);
firstnumET = (EditText) findViewById(R.id.edittxt1);
secondnumET = (EditText) findViewById(R.id.edittxt2);
ansTV = (TextView) findViewById(R.id.ans);
button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new ClickButton());
}
private class ClickButton implements Button.OnClickListener {
@Override
public void onClick(View v) {
firstnum = Integer.parseInt(firstnumET.getText().toString());
secondnum = Integer.parseInt(secondnumET.getText().toString());
int cache1 = Integer.toString(firstnum).length();
int cache2 = Integer.toString(secondnum).length();
if (cache1 == 0) {
ansTV.setText(Integer.toString(secondnum));
}
if (cache2 == 0) {
ansTV.setText(Integer.toString(firstnum));
}
total = firstnum + secondnum;
ansTV.setText(Integer.toString(total));
}
}
答案 0 :(得分:4)
评论太长了,为什么不检查字符串,然后根据字符串的长度设置它们,如果它们不是空的。
String firstString = firstnumET.getText().toString();
firstNum = (firstString.trim().equals(""))? 0: firstString.length();
String secondString = secondnumET.getText().toString();
secondNum = (secondString.trim().equals(""))? 0: secondString.length();
ansTV.setText(Integer.toString(firstNum + secondNum));
你显然可以使它更复杂,检查以确保字符串只包含数值,以确保你没有得到非数字字符串的长度。
String.trim删除空格,这有助于避免填充空格的编辑文本。
答案 1 :(得分:1)
你的问题在这里:
secondnum = Integer.parseInt(secondnumET.getText().toString());
如果留空,则secondnumET.getText()。toString()将返回null。
这是实现您尝试的更好方式。
public void onClick(View v) {
String firstnum = firstnumET.getText().toString();
String secondnum = secondnumET.getText().toString();
int cache1 = firstnum.equals("") ? 0 : Integer.parseInt(firstnum);
int cache2 = secondnum.equals("") ? 0 : Integer.parseInt(secondnum);
total = firstnum + secondnum;
ansTV.setText(Integer.toString(total).length()); // set the answer to the length of total
ansTV.setText(Integer.toString(total)); // set the answer to total
}