我想制作一个堆栈计算器应用程序。 当我输入一个值并按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);
}
}
}
任何帮助都将不胜感激。
答案 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方法中。
计算器类上有一个构造函数,它需要一个活动对象。