3

所以如果我有值 1234 输出应该是 4。

我已经编写了以下代码,但不知道我做错了什么。这是一个应用程序,它添加了两个数字。所以我有两个 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));
    }
}

4

2 回答 2

5

评论太长了,你为什么不检查你的字符串,然后如果它们不为空,则根据它们的长度设置它们。

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 删除空格,这有助于避免编辑文本充满空格。

于 2014-06-12T19:35:30.490 回答
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
}
于 2014-06-12T19:39:13.653 回答