2015-10-01 2 views
-2

Это мое приложение-калькулятор, я знаю, что NumberFormat вызывается, когда мы пытаемся преобразовать строку в числовой тип. Я также окружил их TRY/CATCH, но я не могу получить их как значения INT. Здесь, в моем приложении, я получаю строки в текстовом виде и пытаюсь выполнить операции над ними.NumberFormat Exception в Android

Может ли кто-нибудь предложить альтернативный подход к проблеме?

Вот код:

public class MainActivity extends AppCompatActivity { 

    private static String TAG = MainActivity.class.getSimpleName(); 
    private static String GAT = "Tag"; 

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

    ArrayList<String> arrayList = new ArrayList<String>(); 

    String stringOne = " "; 
    String stringTwo = " "; 

    public void onClick1(View view) { 
     //Getting Input from TextView 
     TextView inputText = (TextView) findViewById(R.id.inputTextView); 
     Button button = (Button) view; 

     //Store as String from button press 
     stringOne = (String) button.getText().toString(); 
     Log.d(TAG, stringOne); 
     //For entering multiple values 
     if (!stringOne.contains("+") && !stringOne.contains("-") && !stringOne.contains("/") && !stringOne.contains("*")) { 
      //Concat if it has multiple digits to original string 
      stringTwo = stringTwo + stringOne; 
      Log.d(TAG, stringTwo); 
      //Remove the last string and place as StringTwo 
      if (arrayList.size() > 0) { 
       //Get last position in the array 
       arrayList.remove((arrayList.size() - 1)); 

      } 
      arrayList.add(stringTwo); 
     } else { 
      //For operators add two times because we removed the previous index 
      arrayList.add(stringOne); 
      arrayList.add(stringOne); 
      //Clear 
      stringTwo = " "; 

      Toast.makeText(this, stringOne, Toast.LENGTH_LONG).show(); 
      Log.d(TAG, stringOne); 

      // Log.d("Veer",stringTwo); 


     } 

     //Add to TextView 
     inputText.setText(inputText.getText().toString()+stringOne); 
     //inputText.setText(arrayList.toString()); 
    } 


    public void calculate(View view) { 
     TextView outputText = (TextView) findViewById(R.id.outputTextView); 
     int result = 0; 
     int list = arrayList.size(); 

     while (list != 1) { 
      if (list > 3) { 
       //Considering the equation to be like 4+5*5-2/4, Get the third operator, if * and /, then multiply 
       if (arrayList.get(3).contains("*") || arrayList.get(3).contains("/")) { 
        if (arrayList.get(3).contains("*")) { 
         result = Integer.parseInt(arrayList.get(2)) * Integer.parseInt(arrayList.get(4)); 
        } else if (arrayList.get(3).contains("/")) { 

         result = Integer.parseInt(arrayList.get(2))/Integer.parseInt(arrayList.get(4)); 
        } 
        arrayList.remove(2); 
        arrayList.remove(2); 
        arrayList.remove(2); 
        arrayList.add(2, Integer.toString(result)); 
        list = arrayList.size(); 
       } else { 
        //Vice versa, here for + and - ,replace 1st and 2nd digit 
        if (arrayList.get(1).contains("+")) { 

         result = Integer.parseInt(arrayList.get(0)) + Integer.parseInt(arrayList.get(2)); 
        } 
        if (arrayList.get(1).contains("-")) { 

         result = Integer.parseInt(arrayList.get(0)) - Integer.parseInt(arrayList.get(2)); 
        } 
        if (arrayList.get(1).contains("*")) { 

         result = Integer.parseInt(arrayList.get(0)) * Integer.parseInt(arrayList.get(2)); 
        } 
        if (arrayList.get(1).contains("/")) { 

         result = Integer.parseInt(arrayList.get(0))/Integer.parseInt(arrayList.get(2)); 
        } 
        arrayList.remove(0); 
        arrayList.remove(0); 
        arrayList.remove(0); 
        arrayList.add(0, Integer.toString(result)); 
        list = arrayList.size(); 
       } 
      } 
      else 
      { 
       //If size is 3 
       if (arrayList.get(1).contains("+")) { 

        result = Integer.parseInt(arrayList.get(0)) + Integer.parseInt(arrayList.get(2)); 
       } 
       if (arrayList.get(1).contains("-")) { 

        result = Integer.parseInt(arrayList.get(0)) - Integer.parseInt(arrayList.get(2)); 
       } 
       if (arrayList.get(1).contains("*")) { 

        result = Integer.parseInt(arrayList.get(0)) * Integer.parseInt(arrayList.get(2)); 
       } 
       if (arrayList.get(1).contains("/")) { 

        result = Integer.parseInt(arrayList.get(0))/Integer.parseInt(arrayList.get(2)); 
       } 
       arrayList.remove(0); 
       arrayList.remove(0); 
       arrayList.remove(0); 
       arrayList.add(0, Integer.toString(result)); 
       list = arrayList.size(); 
      } 
     } 
     outputText.setText(Integer.toString(result)); 
    } 


    public void clearView(View view) { 
     TextView input = (TextView)findViewById(R.id.inputTextView); 
     TextView output = (TextView)findViewById(R.id.outputTextView); 
     stringOne = ""; 
     stringTwo = ""; 
     input.setText(""); 
     output.setText(""); 
     arrayList.clear(); 
    } 
} 
+0

, когда вы получаете ошибку? почему вы пытаетесь удвоить вместо int? – Sree

+0

Я получаю ошибку времени выполнения в зависимости от уравнения, если его 2 * 3, то я получаю сообщение об ошибке if (arrayList.get (1) .contains ("*")) { result = Integer.parseInt (arrayList. get (0)) * Integer.parseInt (arrayList.get (2)); –

ответ

1

Вы должны поймать исключение, когда вы преобразовать строку в числовой тип. Если он генерирует исключение, то вы возвращаетесь. И если не исключение, вы продолжаете выполнять операции над ними.

String text = ""; 
    int num; 
    try { 
     num = Integer.parseInt(text); 
     // text is a number"); 
    } catch (NumberFormatException e) { 
     Toast.makeText(MainActivity.this, "Can not parse string to int: " + text,Toast.LENGTH_LONG).show(); 

     // text is not a number"; 
     // Show Log or make a Toast here to easy see when String is not Int format. After that find the reason why text is not int format 
    } 

Надежда этой помощь

+0

ОК, теперь не будет разбиваться, но как я могу получить их как INT –

+0

Из-за курса, если ваши данные 'STRING' верны, вы можете разобрать его на' INT'. Поэтому, если вы не можете получить значение как 'INT', ваш' STRING' не является INT-форматом –

+0

, что вы подразумеваете под данными строки ввода правильно? –

0
float num1 = 0; 
float num2 = 0; 
float result = 0; 

num1 = Float.parseFloat(etNum1.getText().toString()); 
num2 = Float.parseFloat(etNum2.getText().toString()); 

result = num1 * num2 ; 
Log.e("Result",""+result); 

Надеется, что это помогает.

Смежные вопросы