2013-12-11 18 views
1

Android应用,其执行addition等基本操作类型浮体和整数的两个值,并且OnClick()是如下方法添加Android中

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
      case R.id.btnAdd: 
      isValidToProcess(1); 
      break; 
      ...... 
      /*Switch continues for all other operations like Subtraction,etc*/ 
    } 
} 

和我的isValidToProcess()是如下

private boolean isValidToProcess(int a) { 
    String num1 = mEdit1.getText().toString(); 
    String num2 = mEdit2.getText().toString(); 

    if (num1.matches("") || num2.matches("")) 
    { 
     ValueEmptyWarning(); 
    } 
    else { 
     float numa = Float.parseFloat(num1); 
     float numb = Float.parseFloat(num2); 
     switch (a) { 

     case 1: 
      addition(numa, numb); 
      break; 
       ...... 
      /*Switch continues for all other operations like Subtraction,etc*/ 
    } 
} 

addition()功能

public void addition(float numa, float numb) { 
    answer = numa + numb; 
    mEdit3.setText(String.valueOf(answer)); 
    Log.v(TAG, "Error at Subtraction"); 
} 

这个程序工作正常进行FloatInteger数字,但问题是,整数和浮点值,答案将在分数,例如Number1=2Number2=3answer=5.0

目标:如果用户输入整数,小数点不应该在那里。

这是可能获得用户输入的值的类型EditText

+0

在调用加法方法之前检查输入的值是整数还是浮点意味着numa和numb值 – indraja

回答

1

更多控制,尝试像

public float addition(float numa, float numb) { 
    // will return float 
    return numa + numb; 
} 

public int addition(int numa, float numb) { 
    // explicitly cast to int 
    return numa + (int) numb; 
} 

public int addition(float numa, int numb) { 
    // explicitly cast to int 
    return (int) numa + numb; 
} 

public int addition(int numa, int numb) { 
    // will return int 
    return numa + numb; 
} 

重载方法基本OOP概念,考试系统的在放,尝试这样的事情......

public void examineInput(String input1, String input2) { 

    // For both are float 
    if (input1.indexOf(".") != -1 && input2.indexOf(".") != -1) { 
     float numa = Float.parseFloat(input1); 
     float numb = Float.parseFloat(input2); 
     float ans = addition(numa, numb); 
     Log.i(TAG, String.format("%f + %f = %f", numa, numb, ans)); 
    } 

    // for first to be int and second to be float 
    else if (input1.indexOf(".") == -1 && input2.indexOf(".") != -1) { 
     int numa = Integer.parseInt(input1); 
     float numb = Float.parseFloat(input2); 
     int ans = addition(numa, numb); 
     Log.i(TAG, String.format("%d + %f = %d", numa, numb, ans)); 
    } 

    // for first to be float and second to be int 
    else if (input1.indexOf(".") != -1 && input2.indexOf(".") == -1) { 
     float numa = Float.parseFloat(input1); 
     int numb = Integer.parseInt(input2); 
     int ans = addition(numa, numb); 
     Log.i(TAG, String.format("%f + %d = %d", numa, numb, ans)); 
    } 

    // for both to be int 
    else if (input1.indexOf(".") == -1 && input2.indexOf(".") == -1) { 
     int numa = Integer.parseInt(input1); 
     int numb = Integer.parseInt(input2); 
     int ans = addition(numa, numb); 
     Log.i(TAG, String.format("%d + %d = %d", numa, numb, ans)); 
    } 
} 

而且是输入测试此代码,输出

examineInput("5.2", "6.2"); // 5.200000 + 6.200000 = 11.400000 
examineInput("5", "3.6");  // 5 + 3.600000 = 8 
examineInput("1.6", "5");  // 1.600000 + 5 = 6 
examineInput("5", "5");  // 5 + 5 = 10 

注:你需要验证examineInput始终得到有效的数字,而不是非numaric字符的字符串...

希望这有助于提高OOP概念以及.. :)

+0

我同意,但是我们从字符串中获取值,从这些语句中得到'String num1 = mEdit1.getText()。toString() ; String num2 = mEdit2.getText()。toString();'正如我之前所说的首先需要弄清楚输入的值是整数还是浮点数, – WEshruth

+0

@Vishruth:现在看到精致的答案... –

+1

优秀的答案!非常感谢! – WEshruth

1

我不认为在EditText中有一个可用的API用于开发人员获取值的类型。您可以在JAVA中找到另一种方法,apache可以提供一些小部件来处理此问题。

0

用户总是进入字符串没有其他类型使用editText输入,但是,您需要检查editText是否具有(。),因此它是float,然后将其解析为float,否则它是Integer,然后将其解析为Integer。

代码可能如下所示。

if (num1.indexOf(".") != 0) { 
    float numa = Float.parseFloat(num1); 
    float numb = Float.parseFloat(num2); 
} 
else 
{ 
    int numa = Integer.parseInt(num1); 
    int numb = Integer.parseInt(num2); 
} 

这样做对于整数的输出不会在分数风格

P.S: 你必须确保键盘只进入数。所以你的应用在解析时不会崩溃。

希望这有助于

0

哪个用户对输入的EditText将只有永远字符串类型的价值。但是您可以限制用户通过EditText中的android:inputType=""属性输入任何相关类型值。

1

在这种情况下,您可以使用字符串格式化程序。

Formatting Numeric Print Output

对于你的情况,你必须使用一个像这样的模式。

 
DecimalFormat df = new DecimalFormat("0.##"); 
String finalAnswer = df.format(answer); 
1

您可以使用下面的代码在你的addition功能,如果您的answerfloat

answer = numa + numb; 
String answerString = String.valueOf(answer); 
String decimalString = answerString.substring(answerString.indexOf(".") + 1); 

if (Integer.parseInt(decimalString) == 0) 
    answerString = answerString.substring(0, answerString.indexOf(".")); 

这将小数点后返回float值,如果你的answer有其他比0,否则将返回intString

2

首先检查Integer.parseInt(numer)并捕获NumberFormatException。如果它将正确解析它然后它是一个整数,否则你可以去浮动。

+0

这是一个正确的答案 – Arunkumar