Java字符串到Int不起作用

时间:2018-01-31 05:07:53

标签: java android

我正在尝试创建一个自动的简单计算器 - 没有更多的等号。
以下是它应该如何:
1.用户输入第一个数字 2.用户选择“添加”,“减去”等操作 3.用户输入第二个数字。在这个阶段,程序现在应该自动计算答案。例如:

用户输入“2”作为第一个数字;
用户选择“添加”;
用户输入“3”(此时为第二个数字)
然后它应该在结果框中显示“5”。
如果用户继续输入“2”,这意味着第二个数字现在是“32”而不是“3”,结果将是“34”

这是我的代码:

public String int_firstnumber   = "";
public String int_secondnumber  = "";
public int int_result           = 0;
public int int_numberone        = 0;
public int int_numbertwo        = 0;

public String str_operation     = "";
public String str_inputdisplay  = "";

public String str_indicator     = "none";
public String str_focus         = "first";

// BUTTON 1
    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


           //checks the indicator
            if(str_focus=="first") {
                int_firstnumber = int_firstnumber +"1";
                lblinput.setText(int_firstnumber + str_operation + int_secondnumber);
            } else {
                if(str_indicator=="add"){
                    int_secondnumber = int_secondnumber + "1";
                    lblinput.setText(int_firstnumber + str_operation + int_secondnumber);
                    int_numberone = Integer.parseInt(int_firstnumber);
                    int_numbertwo = Integer.parseInt(int_secondnumber);
                    int_result = int_numberone + int_numbertwo;


                    lblresult.setText(int_result);
                }

            }


        }
    });
    //END OF BUTTON 1


//BUTTON ADD
    btnadd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            str_indicator = "add";
            str_operation = " + ";
            str_focus = "second";
            lblinput.setText(int_firstnumber + str_operation + int_secondnumber);
        }
    });

这有点有效但不完全。如果我输入“1”,它会在1上显示str_inputdisplay,然后点击+符号或btnadd,然后显示1+str_inputdisplay。这意味着我们在第二个数字上对吗?但是,当我再次输入1时,应用程序才会强行关闭。

任何想法为什么会这样?原谅我的代码方式,我刚刚开始学习Java btw。谢谢!

4 个答案:

答案 0 :(得分:1)

为什么要命名你的变量' int_firstnumber'当所有其他变量根据public String int_firstnumberint int_result

等变量类型命名时,它是一个字符串str_operation

你的代码看起来要复杂得多。正如有人提到的那样,当你的运算符是一个字符串时,你不能添加两个数字,string operator = "+";它不会被视为操作数,它将被处理为字符串的类型。

为什么不选择"首先"调用方法 setFirstNumber ,这样你可以验证输入并设置第一个数字..这样的事情:

public void setFirstNumber(int firstNumber){
    int_numberone = firstNumber;
}

然后当"添加"获取选择调用第二个方法 setSecondNumber 以及添加方法

public void setSecondNumber(int secondNumber){
    int_numbertwo = secondNumber;'
}

public int addNumbers(int firstNumber, int secondNumber){
    return firstNumber + secondNumber;
}

您的结果将为int_result = addNumbers(int_numberOne, int_numberTwo)

通过这种方式,您的代码更加清晰,每个函数都执行一个任务,如果您想在以后添加其他操作,则可以轻松添加函数减法,乘法等

public int subtractNumbers(int firstNumber, int secondNumber){
    return firstNumber - secondNumber;
}

public int multiplyNumbers(int firstNumber, int secondNumber){
    return firstNumber * secondNumber;
}
希望有所帮助!

答案 1 :(得分:0)

两个问题:

  1. 添加两个字符串时,不会添加。当你想进行如下操作时,将它改为int,long等:

        int_firstnumber = int_firstnumber +"1";
    
  2. 希望您正确设置变量str_focus和str_indicator,因为这在您提供的代码段中不可用。

答案 2 :(得分:0)

 if("first".equals(str_focus)) {
                     ......
                   int_firstnumber = int_firstnumber +1;
            } else {
                if("add".equals(str_indicator)){
                  ......
                  int_secondnumber = int_secondnumber + 1;

答案 3 :(得分:0)

您应该将TextWatcher添加到输入字段。您将获得callbaks中的值,您可以使用它来更新显示答案的视图。