应用程序在我尝试比较整数时崩溃了

时间:2016-02-08 03:52:59

标签: java android

这是我的代码

public void onClick(View v)
{
    if (v == buttonOne)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("1");
    }

    else if (v == buttonTwo)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("2");
    }

    else if (v == buttonThree)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("3");
    }

    else if (v == buttonFour)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("4");
    }

    else if (v == buttonFive)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("5");
    }

    else if (v == buttonSix)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("6");
    }

    else if (v == buttonSeven)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("7");
    }

    else if (v == buttonEight)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("8");
    }

    else if (v == buttonNine)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("9");
    }

    else if (v == buttonZero)
    {
        TextView output = (TextView)findViewById(R.id.output);
        output.append("0");
    }

    else if(v == buttonEnter)
    {

        TextView output = (TextView)findViewById(R.id.output);
        temp = Integer.parseInt(output.getText().toString());
        compareNumber(temp);
        output.setText("");
    }
}

我正在尝试使用按钮比较数字。例如,如果我按下buttonOne,它会将1追加到堆栈。单击一个或多个数字后按Enter键时,它完全正常,但是当我离开EditText而没有输入任何数字时按下按钮,应用程序停止。

请帮忙!

3 个答案:

答案 0 :(得分:2)

问题出在这一行

temp = Integer.parseInt(output.getText().toString());

当您尝试将parseInt()用于空字符串时。它会崩溃。看看您的变量输出

<强>解决方案

您可以在使用通过添加此行从EditText检索到的值进行操作之前始终应用条件

if(editText.getText().length() != 0)

答案 1 :(得分:1)

在将TextView解析为int.之前,您必须检查TextView是否为空。您可以按如下方式进行检查。

else if(v == buttonEnter)
    {
        TextView output = (TextView)findViewById(R.id.output);
        String txt = output.getText().toString();
        if (!temp.matches("")) {
            temp = Integer.parseInt(output.getText().toString());
    }

另外,为什么要在每个if循环中声明Textview?您可以按照以下方式执行此操作

public void onClick(View v)
 {

    TextView output = (TextView)findViewById(R.id.output);
    if (v == buttonOne)
    {
        output.append("1");
    }
    else if (v == buttonTwo)
    {
        output.append("2");
    }

    else if (v == buttonThree)
    {
        output.append("3");
    }

    else if (v == buttonFour)
    {
        output.append("4");
    }

    else if (v == buttonFive)
    {
        output.append("5");
    }

    else if (v == buttonSix)
    {
        output.append("6");
    }

    else if (v == buttonSeven)
    {
        output.append("7");
    }

    else if (v == buttonEight)
    {
        output.append("8");
    }

    else if (v == buttonNine)
    {
        output.append("9");
    }

    else if (v == buttonZero)
    {
        output.append("0");
    }

    else if(v == buttonEnter)
    {
        temp = Integer.parseInt(output.getText().toString());
        compareNumber(temp);
        output.setText("");
    }
}

答案 2 :(得分:0)

这只是为了让你的代码看起来不错。为textView创建一个整数数组。举个例子

private int[] numericBtn = {R.id.idzero,R.id.one, R.id.two, R.id.three, R.id.four,R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine};


private int[] operationBtn = {R.id.buttonAdd,R.id.buttonMinus, R.id.buttonMultiply, R.id.buttonDivide};

为您的数字按钮创建一个onclick侦听器。喜欢这个

public void setNumericOnClickListener() {
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Button id = (Button) v;                
            output.append(id.getText());

        }
    };

    for (int id : numericBtn) {
        findViewById(id).setOnClickListener(listener);
    }

}

然后在OnCreate方法中调用此方法。 operatorButtons也是如此。快乐的编码。