2013-12-11 19 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