3

所以我正在尝试制作一个计算器应用程序(只是为了掌握 android 开发的窍门),我注意到通过一些测试,“String tack1”的 parseInt 转换导致应用程序崩溃。有人能告诉我为什么吗?我似乎无法弄清楚,我已经在互联网上搜索了很长时间。(呵呵,我是个菜鸟,所以请放轻松)在下面的代码中,我修改了几行代码,让它看起来很明显应该打印什么,但它仍然崩溃。这是代码:


equals.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            oC = 1; //operator checker is on 1 (for plus)
            switch(oC){ //check for operator clicked
                case 0: break;
                case 1:
                   tack1 = "1"; //INSERTED THIS TO MAKE OUTPUT OBVIOUS
                   tack1 = tack1.trim(); tack2 = tack2.trim(); //INSERTED BEFORE TO DEAL WITH WHITESPACE
                   numOne = Integer.parseInt(tack1); //CRASHES HERE
                   answer.setText(numOne);
                   modeChecker = 0; oC = 0;break;

程序注释(一些重复的评论和其他内容):

tack1 = "1"; 是使输出明显

tack1.trim() 是处理空白

是的,无论是数字还是整数(甚至不是负整数)

是的 numOne 是一个整数,并在上面定义(不在此处列出的代码中)

抱歉,由于我添加的评论,缩进都搞砸了(在案例 1 之后)

这是我的 onClick 方法的一部分,因此此处不包含右括号。

有人可以帮帮我吗?谢谢 :D

4

1 回答 1

4

我愿意打赌它实际上在调用parseInt.

您正在调用setText(int)您的 TextView。当您将 int 传递给此方法时,该 int 是指向字符串资源的指针……您可能期望自动转换为字符串。由于您将在应用程序中生成的 int 传递给它,因此该 int 极不可能也指向 res/values/strings.xml 文件中的字符串资源。您真正想要做的是首先将 numOne 更改为字符串,您可以内联执行:

改变

answer.setText(numOne);

answer.setText(String.valueOf(numOne));

你可以走了。

于 2011-09-19T19:20:46.957 回答