代码之家  ›  专栏  ›  技术社区  ›  user9240647

计算器应用程序在堆栈上推送值时崩溃

  •  0
  • user9240647  · 技术社区  · 8 年前

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

    JAVAlang.NullPointerException:尝试调用虚拟方法“void com”。实例管理计算器计算器。在空对象引用上计算() 在com。实例管理计算器主要活动。onClick(MainActivity.java:66) (这是带有case R.id.button17的行…)

    我的主要活动类别:

    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 回复  |  直到 8 年前
        1
  •  0
  •   Emre Dalkiran    8 年前

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

    Calculator c = new Calculator(this);
    
        2
  •  0
  •   SynonymForTree    8 年前

    您是否可以尝试在计算方法中输入一些日志输出,然后再打开单击开关。检查该id是否确实存在,并检查“字符串输入”是否正在获取值。

    日志v(“标记”、“消息”);

        3
  •  0
  •   ArMD    8 年前

    你能补充一下吗

    Calculator c = new calculator (this);
    

    在onClick方法内部。

    您在calculator类上有一个需要activity对象的构造函数。