2013-02-26 21 views
0

我一直在研究一个小型应用程序,它可以为我计算复数(分割,减法,乘法等)。我没有明显的编译错误,但是当我运行该程序时,出现一堆运行时错误,我无法理解或知道如何解决。我错过了明显的东西?这是我的代码:Java - Android SDK - 不幸<项目名称>崩溃错误

package complex.OliverV; 

    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.TextView; 
    import android.widget.RadioButton; 
    import android.widget.EditText; 

    public class ComplexNumbersActivity extends Activity { 

Button Check; 
RadioButton plus, minus, multiply, div; 
EditText X1,X2,Y1,Y2; 
TextView Ans; 
int sign; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Check = (Button) findViewById(R.id.Check); 
    plus = (RadioButton) findViewById(R.id.plus); 
    minus = (RadioButton) findViewById(R.id.minus); 
    multiply = (RadioButton) findViewById(R.id.multiply); 
    div = (RadioButton) findViewById(R.id.div); 
    Ans = (TextView) findViewById(R.id.Ans); 
    plus.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      sign=1; 
     } 


    }); 
    minus.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      sign=2; 
     } 


    }); 
    multiply.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      sign=3; 
     } 


    }); 
    div.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      sign=4; 
     } 


    }); 
    Check.setOnClickListener(new View.OnClickListener(){ 

     String xs=X1.getText().toString(); 
     String xss=X2.getText().toString(); 
     String ys=Y1.getText().toString(); 
     String yss=Y2.getText().toString(); 



     double x3,y3; 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(xs!="" && xss!="" && ys!="" && yss!="") 
      { 
      double x1=Double.parseDouble(xs); 
      double x2=Double.parseDouble(xss); 
      double y1=Double.parseDouble(ys); 
      double y2=Double.parseDouble(yss); 
      switch(sign) 
      { 
      case(1): 
      { 
       x3=x1+x2; 
       y3=y1+y2; 
      } 
      case(2): 
      { 
       x3=x1-x2; 
       y3=y1-y2; 
      } 
      case(3): 
      { 
       x3=(x1*x2-y1*y2); 
       y3=(x2*y1 + x1*y2); 
      } 
      case(4): 
      { 
       if(x2!=0 && y2!=0) 
       { 
       x3 = (x1 * x2 + y1 * y2)/(x2 * x2 + y2 * y2); 
       y3 = (x2 * y1 - x1 * y2)/(x2 * x2 + y2 * y2); 
       } 
       else 
       { 
        Ans.setText("Enter valid numbers!"); 
       } 
      } 
     } 
      Ans.setText("x="+x3+"y="+y3); 
     } 
      else 
      { 
       Ans.setText("Enter valid numbers!"); 
      } 

     } 
    }); 
} 

} 

我也在我得到了错误的屏幕截图。 Errors 我把图片,因为复制文本看起来像一团糟。对于长期的问题感到抱歉,并且感谢任何可以花时间帮助我的人,我非常感谢每一点帮助。 :)

+0

该行已在您的屏幕截图选择(下由...引起)包含NullPointerException发生的行号。不幸的是,它被删除 – petey 2013-02-26 20:48:15

+1

重要的部分是“引起”,然后是一个异常类型,其次是堆栈跟踪。从顶部开始,然后向下,直到找到程序中的第一行。这是你有错误的地方。在这种情况下,你在onCreate的某个地方有一个NullPointerException异常。不幸的是,我无法阅读更多,因为您粘贴图像而不是复制粘贴文本。 – 2013-02-26 20:48:46

+0

编译器错误和运行时错误完全没有关联,因为如果不修复前者,就无法获得后者。 – Simon 2013-02-26 20:49:50

回答

2

onCreate()特德·霍普在他的答复中提到,然后

改变这个初始化X1,X2,Y1,Y2

if((xs != null && !xs.equal("")) && 
    (xss != null && !xss.equal("")) && 
    (ys !== null && !ys.equal("")) && 
    (yss != null &&!yss.equal(""))) 
+0

感谢一百万,像一个魅力工作。我可以拥抱你:) – Oliver 2013-02-26 21:05:42

+0

thankx。并且总是用'.equal()'而不是'==或!=':)检查两个字符串: – Shoshi 2013-02-26 21:08:56

+0

只剩下一个小问题 - 存在一些计算错误,可能来自解析还是什么,因为它不似乎正在加/减等..:\ – Oliver 2013-02-26 21:20:50

1

这个问题似乎在这里:当这里面onCreate执行

Check.setOnClickListener(new View.OnClickListener(){ 

    String xs=X1.getText().toString(); 
    String xss=X2.getText().toString(); 
    String ys=Y1.getText().toString(); 
    String yss=Y2.getText().toString(); 

    . . . 
} 

,田野X1等,没有被初始化。即使它有,字段只会有默认文本,这可能不是你想要的。您应该将作业移到侦听器的onClick方法中。这样,当onClick方法运行时,您将使用当前的字段内容。

未来,请发布logcat输出的文本而不是屏幕快照。否则,至少需要调整列的大小并根据需要进行滚动,以便我们可以看到logcat消息的全部文本。并且请确定您的代码中哪些行生成异常。

if(xs!="" && xss!="" && ys!="" && yss!="") 

到:

+0

现在就试试吧,谢谢:) – Oliver 2013-02-26 20:55:23

+0

@Oliver - 也请务必将字符串相等比较(现在用'!=')更改为'!equals()'测试,正如[Shoshi建议](http:// stackoverflow的.com /一个/535871分之15099018)。 – 2013-02-26 20:57:35

+0

也谢谢你,绝对有帮助! :) – Oliver 2013-02-26 21:06:04

相关问题