强制计算应用程序中的错误(如果/ if else则使用)

时间:2011-02-23 21:05:57

标签: android

我创建了一个应用程序,用户将数字放入editexts,应用程序正在进行一些计算并显示一个数字..我有7行带有editexts。但第7个editext是可选的,用户填写它(我添加了一个复选框,如果用户选择它,editext是可见的,否则它是不可见的..)。我的代码有一个奇怪的问题,我想得到你的帮助..

首先这是我的代码:

 apostoli.setOnClickListener(new OnClickListener() {

                private AlertDialog show;

                public void onClick(View arg0) {

                if ((vprosvasis.getText().toString() == " ")
                        || (vprosvasis.getText().length() == 0)
                        || (vprosvasis2.getText().toString() == " ")
                        || (vprosvasis2.getText().length() == 0)
                        || (vprosvasis3.getText().toString() == " ")
                        || (vprosvasis3.getText().length() == 0)
                        || (vprosvasis4.getText().toString() == " ")
                        || (vprosvasis4.getText().length() == 0)
                        || (vprosvasis5.getText().toString() == " ")
                        || (vprosvasis5.getText().length() == 0)
                        || (vprosvasis6.getText().toString() == " ")
                        || (vprosvasis6.getText().length() == 0)


                ) {

                                show = new AlertDialog.Builder(mContext).setTitle("Error")
                                                .setMessage("Symplirwste olous tous vathmous prosvasis")
                                                .setPositiveButton("OK", null).show();

                        } 


                    else if (((vprosvasis7.getText().toString() != " ")
                            || (vprosvasis7.getText().length() != 0)))
                {


                            float genikosvathmos = (float) (( new Float(vprosvasis.getText().toString())
                            + new Float(vprosvasis7.getText().toString())
                            + new Float(vprosvasis2.getText().toString())
                            + new Float(vprosvasis3.getText().toString())
                            + new Float(vprosvasis4.getText().toString())
                            + new Float(vprosvasis5.getText().toString()) + new Float(
                            vprosvasis6.getText().toString())) / 7);

                    float vprosvasisFloat = Float.parseFloat(vprosvasis.getText().toString());
                    float vprosvasisFloat2 = Float.parseFloat(vprosvasis2.getText().toString());
                    float vprosvasisFloat7 = Float.parseFloat(vprosvasis7.getText().toString());
                    float vprosvasisFloat5 = Float.parseFloat(vprosvasis5.getText().toString());

                    moria = (float) (((new Float((genikosvathmos * 8)+ (vprosvasisFloat * 1.3)+ (vprosvasisFloat2 * 0.7)) * 100)));
                    moria2 = (float) (((new Float((genikosvathmos * 8)+ (vprosvasisFloat7 * 1.3)+ (vprosvasisFloat5 * 0.7)) * 100)));

                    // Toast.makeText(thetiki.this, "Genikos vathmos"+moria ,
                    // Toast.LENGTH_SHORT).show();

                    // 1o pedio
                    show = new AlertDialog.Builder(mContext).setTitle("moria")
                    .setMessage(            "1o pedio:  " + moria + "\n2o pedio:  "
                                            + moria + "\n3o pedio:  " + moria
                                            + "\n4o pedio:  " + moria
                                            + "\n5o pedio:  "+moria2)
                            .setPositiveButton("OK", null).show();

                }




                    else if ((vprosvasis.getText().toString()!= " ")
                        || (vprosvasis.getText().length() != 0)
                        || (vprosvasis2.getText().toString() != " ")
                        || (vprosvasis2.getText().length() != 0)
                        || (vprosvasis3.getText().toString() != " ")
                        || (vprosvasis3.getText().length() != 0)
                        || (vprosvasis4.getText().toString() != " ")
                        || (vprosvasis4.getText().length() != 0)
                        || (vprosvasis5.getText().toString() != " ")
                        || (vprosvasis5.getText().length() != 0)
                        || (vprosvasis6.getText().toString() != " ")
                        || (vprosvasis6.getText().length() != 0)
                        &&((vprosvasis7.getText().toString()== " ")
                        || (vprosvasis7.getText().length() == 0))


                )

                {

                    float genikosvathmos = (float) ((new Float(vprosvasis
                            .getText().toString())
                            + new Float(vprosvasis2.getText().toString())
                            + new Float(vprosvasis3.getText().toString())
                            + new Float(vprosvasis4.getText().toString())
                            + new Float(vprosvasis5.getText().toString()) + new Float(
                            vprosvasis6.getText().toString())) / 6);


                                 float vprosvasisFloat = Float.parseFloat(vprosvasis.getText().toString());
                                 float vprosvasisFloat2 = Float.parseFloat(vprosvasis2.getText().toString());


                                 moria=(float) (((new Float ((genikosvathmos*8)+(vprosvasisFloat * 1.3)+(vprosvasisFloat2 * 0.7))*100)));       

                                // Toast.makeText(thetiki.this, "Genikos vathmos"+moria , Toast.LENGTH_SHORT).show();

                           show = new AlertDialog.Builder(mContext).setTitle("moria")
                             .setMessage("1o pedio:  "+moria+"\n2o pedio:  "+moria+"\n3o pedio:  "+moria+"\n4o pedio:  "+moria+"\n5o pedio:  -")
                             .setPositiveButton("OK", null).show();

                        } 

                } 

        });

vprosvasis,vprosvasis2 .. etc是editText.i中的数字已使用3 if / else。首先检查6个第一个editexts是否为空,如果没有警报。第二个想要检查如果vprosvasis7不为空,然后进行计算。最后,第三个想要检查是否使用了vprosvasis7,然后进行新的计算..这不起作用..具体来说,第一个if工作,第二个工作两个,但如果我没有填写第7个editext,第3个如果堆叠并强制我的应用程序..

你的帮助真的很有帮助..

修改

当第7个editext为空时LogCat,我按下btn'adttoli'

02-23 23:51:27.234: ERROR/AndroidRuntime(5739): FATAL EXCEPTION: main
02-23 23:51:27.234: ERROR/AndroidRuntime(5739): java.lang.NumberFormatException: 
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:305)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at java.lang.Float.parseFloat(Float.java:291)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at java.lang.Float.<init>(Float.java:111)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at kostas.menu.moria.thetiki$8.onClick(thetiki.java:396)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at android.view.View.performClick(View.java:2461)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at android.view.View$PerformClick.run(View.java:8888)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at android.os.Handler.handleCallback(Handler.java:587)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at android.os.Looper.loop(Looper.java:123)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at java.lang.reflect.Method.invokeNative(Native Method)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at java.lang.reflect.Method.invoke(Method.java:521)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-23 23:51:27.234: ERROR/AndroidRuntime(5739):     at dalvik.system.NativeStart.main(Native Method)
02-23 23:51:27.249: WARN/ActivityManager(2944):   Force finishing activity kostas.menu.moria/.thetiki
02-23 23:51:27.300: INFO/(2944): dumpmesg > "/data/log/dumpstate_app_error.log"

1 个答案:

答案 0 :(得分:0)

float vprosvasisFloat7 = Float.parseFloat(vprosvasis7.getText().toString());

因此,当EditText为空时,您实际上是在调用Float.parseFloat(“”);空字符串不是有效的float,因此Float类会抛出异常。

在解析之前检查空字符串。

if (vprosvasis7.getText().toString.equals("")) {
    float vprosvasisFloat7 = Float.parseFloat(vprosvasis7.getText().toString());
}