2015-04-12 64 views
-1

所以我想制作一个圆形计算器。一个人需要添加半径,直径,S或P,程序应该给出所有的答案,但是当我添加一件事情时,程序会使用我添加到程序中的所有公式。我希望程序使用那些特定的公式,例如,当我输入radius(r)时,程序会使用这些公式(我们为它插入r)而不是其他的公式。 我希望你们明白我的意思,抱歉我的英文不好,希望有人能帮忙。麻烦制作圆形计算器

public void onButtonClick(View v) { 
    EditText a1 = (EditText) findViewById(R.id.TFnum1); 
    EditText a2 = (EditText) findViewById(R.id.TFnum2); 
    EditText a3 = (EditText) findViewById(R.id.TFnum6); 
    EditText a4 = (EditText) findViewById(R.id.TFnum7); 


    TextView tv = (TextView) findViewById(R.id.TFnum7); //P 
    TextView tv1 = (TextView) findViewById(R.id.TFnum6); //S 
    TextView tv2 = (TextView) findViewById(R.id.TFnum2); //d 
    TextView tv3 = (TextView) findViewById(R.id.TFnum1); //r 
    boolean flag = false; 
    double num1, num2, num6, num7, ans; 
    num1 = ParseDouble(a1.getText().toString()); 
    num2 = ParseDouble(a2.getText().toString()); 
    num6 = ParseDouble(a3.getText().toString()); 
    num7 = ParseDouble(a4.getText().toString()); 
    ans = 0; 





    //when inserting r 
    //d 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = 2 * num1; 
    tv2.setText(ans + ""); 

    //S 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = 3.14 * (num1 * num1); 
    tv1.setText(ans + ""); 

    //P 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = num1 * 3.14 * 2; 
    tv.setText(ans + ""); 



    //when inserting d 
    //r 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = num2/2; 
    tv3.setText(ans + ""); 

    //S 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = (num2/2) * (num2/2) * 3.14; 
    tv1.setText(ans + ""); 

    //P 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = (num2/2) * 3.14 * 2; 
    tv.setText(ans + ""); 



    //when inserting S 
    //r 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = Math.sqrt(num6/3.14); 
    tv3.setText(ans + ""); 

    //d 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = Math.sqrt(num6/3.14) * 2; 
    tv2.setText(ans + ""); 

    //P 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = (Math.sqrt(num6/3.14)) * 2 * 3.14; 
    tv.setText(ans + ""); 



    //when inserting P 
    //r 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = num7/6.28; 
    tv3.setText(ans + ""); 

    //d 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = (num7/6.28) * 2; 
    tv2.setText(ans + ""); 

    //S 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
    else ans = (num7/6.28) * (num7 /6.28) * 3.14; 
    tv1.setText(ans + ""); 
} 

private double ParseDouble(String number) { 
    if (number!= null && number.length() > 0) { 
     try { 
      return Double.parseDouble(number); 
     } catch(Exception e) { 
      return -1;// Will return -1 in case of exception, you can change it with another value 
     } 
    } 

    return 1; 
} 
+1

你的if(v.getId()== R.id.Badd)if(num2 == 0)flag = true;'总是一样的!并且'v.getId()'返回什么值'' – Prashant

+0

是的,看起来你复制/粘贴了'if'检查,并忘记将它们专门化为实际案例 - 顺便说一句可以用一个''getId()''开关'也许有点清洁。 – ChiefTwoPencils

回答

0

问题是你有“onClick()”函数中的所有方法。所以它贯穿每一个。

这是我建议你做的。


您可以分别创建4种方法,分别针对每个参数(R,S,D,P)。然后在onClick()函数中,您将检查输入的内容,因此如果输入了“R”,您将调用相应的方法并发送相应的视图。

我希望下面的代码解释了它好一点:


声明全局以下(即方法外):

boolean flag = false; 
TextView tv; 
TextView tv1; 
TextView tv2; 
TextView tv3; 

public void onButtonClick(View v) { 
    EditText a1 = (EditText) findViewById(R.id.TFnum1); 
    EditText a2 = (EditText) findViewById(R.id.TFnum2); 
    EditText a3 = (EditText) findViewById(R.id.TFnum6); 
    EditText a4 = (EditText) findViewById(R.id.TFnum6); 


    tv = (TextView) findViewById(R.id.TFnum7); //P 
    tv1 = (TextView) findViewById(R.id.TFnum6); //S 
    tv2 = (TextView) findViewById(R.id.TFnum2); //d 
    tv3 = (TextView) findViewById(R.id.TFnum1); //r 

    double num1, num2, num6, num7, ans; 
    num1 = ParseDouble(a1.getText().toString()); 
    num2 = ParseDouble(a2.getText().toString()); 
    num6 = ParseDouble(a3.getText().toString()); 
    num7 = ParseDouble(a4.getText().toString()); 
    ans = 0; 
    //this is where you will check whether values were entered 
    //and also depending on which EditText is accepting the R value 
    //for argument sake 
    if(!a1.equals("")){ 
     onInsertR(v, num2, num1, ans); 
    } 

if(!a2.equals ("")){onInsertR(v, num2,num1,ans);} 

if(!a3.equals ("")){onInsertR(v, num2,num1,ans);} 

if(!a4.equals ("")){onInsertR(v, num2,num1,ans);} 



} 

public void onInsertR(View v, double num2, double num1, double ans){ 
    //when inserting r 
    //d 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = 2 * num1; 
    tv2.setText(ans + ""); 

    //S 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = 3.14 * (num1 * num1); 
    tv1.setText(ans + ""); 

    //P 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = num1 * 3.14 * 2; 
    tv.setText(ans + ""); 
} 

public void onInsertD(View v, double num2,double ans){ 
    //when inserting d 
    //r 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = num2/2; 
    tv3.setText(ans + ""); 

    //S 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = (num2/2) * (num2/2) * 3.14; 
    tv1.setText(ans + ""); 

    //P 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = (num2/2) * 3.14 * 2; 
    tv.setText(ans + ""); 
} 

public void onInsertS(View v, double num2, double num6,double ans){ 
    //when inserting S 
    //r 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = Math.sqrt(num6/3.14); 
    tv3.setText(ans + ""); 

    //d 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = Math.sqrt(num6/3.14) * 2; 
    tv2.setText(ans + ""); 

    //P 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = (Math.sqrt(num6/3.14)) * 2 * 3.14; 
    tv.setText(ans + ""); 
} 

public void onInsertP(View v, double num2, double num7,double ans){ 
    //when inserting P 
    //r 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = num7/6.28; 
    tv3.setText(ans + ""); 

    //d 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = (num7/6.28) * 2; 
    tv2.setText(ans + ""); 

    //S 
    if (v.getId() == R.id.Badd) if (num2 == 0) flag = true; 
     else ans = (num7/6.28) * (num7 /6.28) * 3.14; 
    tv1.setText(ans + ""); 
} 

private double ParseDouble(String number) { 
    if (number!= null && number.length() > 0) { 
     try { 
      return Double.parseDouble(number); 
     } catch(Exception e) { 
      return -1;// Will return -1 in case of exception, you can change  it with another value 
     } 
    } 

return 1; 
} 

希望这可以帮助你。

让我知道它是怎么回事:)

一切顺利!

+0

我不能放弃在num2条件下消除或至少指出过度重复设置flag的机会。很明显,只有在获得num2后才需要执行一次。 – ChiefTwoPencils

+0

忘记提及'if(v.getId()== R.id.Badd)'的相似性......在相同的方法中检查多次的意义何在?有没有'V'改变所以... – ChiefTwoPencils

+0

@TejjD谢谢你的回答,我复制你的代码,它告诉“无法解析符号”标志“”和电视,tv1,tv2和tv3 –