2015-04-14 34 views
1

正在为学生出勤率创建一个Android应用程序。 当我运行我的应用程序时,得到的结果为NaN。我将两个主要活动的浮动值传递给活动A1。但在我的应用程序中,“e2”字段显示值“NaN”。直到现在我找不到我的错误。它必须分开浮点值。Android中的NaN错误

我的代码有什么错误?

MainActivity.java

package shafir.arraytest; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
public class MainActivity extends Activity { 

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

    public void sort(View v) { 
     EditText e1, e2, e3, e4, e5; 
     char ch = 0; 
     e1 = (EditText) findViewById(R.id.text1); 
     e2 = (EditText) findViewById(R.id.text2); 
     e3 = (EditText) findViewById(R.id.text3); 
     e4 = (EditText) findViewById(R.id.text4); 
     e5 = (EditText) findViewById(R.id.text5); 
     Button b1; 
     b1 = (Button) findViewById(R.id.sort); 
     int i1, i2, i3,c1 = 0, c2 = 0; 
     float tot,att; 
     i1 = Integer.parseInt(e1.getText().toString()); 
     i2 = Integer.parseInt(e2.getText().toString()); 
     i3 = Integer.parseInt(e3.getText().toString()); 
     tot=Float.parseFloat(e4.getText().toString()); 
     att=Float.parseFloat(e5.getText().toString()); 
     if ((i1 == i2) && (i1 == i3)) { 
      c1 = i1; 
      c2 = i1; 
     } 
     if ((i1 == i2) || (i1 > i2) && (i1 == i3) || (i1 > i3)) { 
      c1 = i1; 
      ch = '1'; 
     } 
     if ((i2 == i1) || (i2 > i1) && (i2 == i3) || (i2 > i3)) { 
      c1 = i2; 
      ch = '2'; 
     } 
     if ((i3 == i1) || (i3 > i1) && (i3 == i2) || (i3 > i2)) { 
      c1 = i3; 
      ch = '3'; 
     } 
     switch (ch) { 
     case '1': 
      if (i2 > i3) { 
       c2 = i2; 
      } else { 
       c2 = i3; 
      } 
      break; 
     case '2': 
      if (i1 > i3) { 
       c2 = i1; 
      } else { 
       c2 = i3; 
      } 
      break; 
     case '3': 
      if (i1 > i2) { 
       c2 = i1; 
      } else { 
       c2 = i2; 
      } 
      break; 
     } 
     Intent in1 = new Intent(this, A1.class); 
     in1.putExtra("c1", c1); 
     in1.putExtra("c2", c2); 
     in1.putExtra("tot", c1); 
     in1.putExtra("att", c2); 
     startActivity(in1); 
    } 
} 


` 


---------- 


---------- 



` 
**This is my Activity A1:** 

package shafir.arraytest; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.EditText; 

public class A1 extends Activity { 

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

    public void edit() { 
     EditText e1, e2, e3; 
     float ex, patt, internal,tempp,tot1,att1; 
     int g1, g2,tempsum, matt = 0; 
     e1 = (EditText) findViewById(R.id.great1); 
     e2 = (EditText) findViewById(R.id.great2); 
     e3 = (EditText) findViewById(R.id.inter); 
     Intent in2 = getIntent(); 
     g1 = in2.getIntExtra("c1", 0); 
     g2 = in2.getIntExtra("c2", 0); 
     tot1 = in2.getFloatExtra("tot", 0); 
     att1 = in2.getFloatExtra("att", 0); 
     tempsum=g1+g2; 
     ex = (float) (tempsum*0.075); 
     tempp=att1/tot1; 
     patt = (float)(att1/tot1) * 100; 
     if ((patt > 90) && (patt <= 100)) { 
      matt = 5; 
     } else if ((patt > 80) && (patt <= 90)) { 
      matt = 4; 
     } else if ((patt > 70) && (patt <= 80)) { 
      matt = 3; 
     } else if ((patt > 60) && (patt <= 70)) { 
      matt = 2; 
     } else if ((patt >= 50) && (patt <= 60)) { 
      matt = 1; 
     } else { 
      matt = 0; 
     } 
     internal = ex + matt; 
     e1.setText(Float.toString(ex)); 
     e2.setText(Float.toString(tempp)); 
     e3.setText(Float.toString(internal)); 
    } 
} 
+2

有没有什么办法可以清理代码?例如。使用描述性变量名称(而不是c1,i1等),并可能缩短它的长度?这将有助于识别问题。 – mhlz

+0

并检查'tot1'和'att1'的值是多少。如果'e2'字段有问题。这可能是原点。 – Nitram

+0

我会假设tot1 = in2.getFloatExtra(“tot”,0);和att1 = in2.getFloatExtra(“att”,0);返回0 – JFPicard

回答

2

我的猜测是,tot1为0,然后你会得到NaN的,因为如果不是这样,你不能用0 划分,请添加一些打印语句看看tempp转向NaN的哪一点。

+0

考虑接受答案,如果它有帮助。 – FINDarkside

0

我发现我的错误:我在传递主活动的值时犯了一个错误。 我使用相同的变量名称c1c2作为浮点数。现在它已被清除,我的应用程序正常工作。