计算器应用程序在Stack上推送值时被压缩

时间:2018-04-14 17:55:31

标签: java android calculator

我想制作一个堆栈计算器应用程序。 当我输入一个值并按Enter键(然后应该在堆栈上推送一个值)时,我的应用程序出现了以下异常:

java.lang.NullPointerException:尝试调用虚方法' void com.example.admin.calculator.Caluculator.calculate()'在null对象引用上         在com.example.admin.calculator.MainActivity.onClick(MainActivity.java:66) (那是带有案例R.id.button17的行......)

我的MainActivity类:

public class MainActivity extends AppCompatActivity implements OnClickListener {


public  EditText TextField;
Calculator c = new Calculator();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button b1= (Button) findViewById(R.id.button1); 
    b1.setOnClickListener(this);
    ... some Buttons

    TextField = (EditText) findViewById(R.id.editText1);
   }

public void onClick(View v) {

    switch (v.getId()) {
        case R.id.button1:  TextField.append("7");  break;
        ... some buttons            
        case R.id.button17: c.calculate(); TextField.setText("");break // Enter Button
        case R.id.button18: TextField.setText("");   break; // Clear Button

    }
}

  public static String getTextfromTextField() {
    return TextField.getText().toString();
 }

}

我的计算器课程:

public class Calculator { // RechenLogik
MainActivity activity; // MainActivity Instance
EditText TextField;
Stack<Double> stack = new Stack<Double>();

public Calculator(MainActivity activity ) {
    this.activity = activity;
}


public void calculate() {
    String input = activity.getTextfromTextField();
    double value;

      try {
        value = Double.parseDouble(input);
        stack.push(zahl);
    } catch (NumberFormatException e) {
        if (input.equals("+") ||
            input.equals("-")) {
               ...   some other signs                 
        } 
     }            

      if(input.equals("+")) {
        double value1=stack.pop();
        double value2=stack.pop();
        stack.push(value1+value2);
        value2=value1+value2;
        stack.push(value2);
        String tmp = Double.toString(value2);
        activity.setTextFeldText(value2);
    }
  }
}

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

您可以尝试在计算方法中和开启之前单击一些日志输出。检查该ID是否确实存在并检查&#39;字符串输入&#39;正在获得一个价值。

Log.v(&#34; Tag&#34;,&#34; Message&#34;);

答案 1 :(得分:0)

尝试像这样调用计算器构造函数Calculator ()

Calculator c = new Calculator(this);

答案 2 :(得分:0)

你可以添加

吗?
Calculator c = new calculator (this);

在onClick方法中。

计算器类上有一个构造函数,它需要一个活动对象。