2012-05-10 4 views
0

У меня есть 5 текстовых сообщений для цифр и кнопки. при нажатии кнопки приложение вычисляет другое уравнение, основанное на том, какое поле осталось пустым. однако приложение продолжает сбой, когда я оставляю несколько полей пустыми с ошибкой, что первый двойной в первом случае if недействителен.несколько else если инструкции для проверки нескольких текстовых входов

идея кода

if (first field.getText().toString().equals("")) {...} 
else if (second field.getText().toString().equals("")) {...} 
else if (third field.getText().toString().equals("")) {...} 
else if (fourth field.getText().toString().equals("")) {...} 
else if (fifth.getText().toString().equals("")) {...} 
else {...} 

в основном последний должен просто дать тост за, если это не какое-либо из перечисленных выше (2-5 стеклотар, 0 опустошает

реального синтаксис это :

calc.setOnClickListener(new OnClickListener() {   
      public void onClick(View v) { 
       EditText fv = (EditText) findViewById(R.id.pv_fv); 
       EditText pv = (EditText) findViewById(R.id.pv_pv); 
       EditText r = (EditText) findViewById(R.id.pv_discountrate); 
       EditText n = (EditText) findViewById(R.id.pv_periods); 
       EditText t = (EditText) findViewById(R.id.pv_years); 



       if (fv.getText().toString().equals("")) { 
        double r1 = Double.parseDouble(r.getText().toString()); 
        double n1 = Double.parseDouble(n.getText().toString()); 
        double t1 = Double.parseDouble(t.getText().toString()); 
        double pv1 = Double.parseDouble(pv.getText().toString()); 
        double answer1 = pv1*(Math.pow(1+(r1/n1) ,n1*t1)); 
        answer1 = (double)(Math.round(answer1*100))/100; 
        TextView answer = (TextView) findViewById(R.id.pv_answer); 
        answer.setText("The Future Value of the cash flow is: "+answer1); 
       } 

       else if (pv.getText().toString().equals("")) { 
        double fv1 = Double.parseDouble(fv.getText().toString()); 
        double r1 = Double.parseDouble(r.getText().toString()); 
        double n1 = Double.parseDouble(n.getText().toString()); 
        double t1 = Double.parseDouble(t.getText().toString()); 
        double answer1 = fv1/(Math.pow(1+(r1/n1) ,n1*t1)); 
        answer1 = (double)(Math.round(answer1*100))/100; 
        TextView answer = (TextView) findViewById(R.id.pv_answer); 
        answer.setText("The Present Value of the cash flow is: "+answer1);      
       } 

       else if (r.getText().toString().equals("")){ 
        double fv1 = Double.parseDouble(fv.getText().toString()); 
        double pv1 = Double.parseDouble(pv.getText().toString()); 
        double n1 = Double.parseDouble(n.getText().toString()); 
        double t1 = Double.parseDouble(t.getText().toString()); 
        double answer1 = ((Math.pow(fv1/pv1, 1/(n1*t1))) -1)*n1 ; 
        answer1 = (double)(Math.round(answer1*100))/100; 
        TextView answer = (TextView) findViewById(R.id.pv_answer); 
        answer.setText("The discount rate/interest rate applied is: "+answer1); 
       } 

       else if (t.getText().toString().equals("")){ 
        double fv1 = Double.parseDouble(fv.getText().toString()); 
        double pv1 = Double.parseDouble(pv.getText().toString()); 
        double n1 = Double.parseDouble(n.getText().toString()); 
        double r1 = Double.parseDouble(r.getText().toString()); 
        double answer1 = Math.log(fv1/pv1)/(n1* Math.log(1+(r1/n1))) ; 
        answer1 = (double)(Math.round(answer1*100))/100; 
        TextView answer = (TextView) findViewById(R.id.pv_answer); 
        answer.setText("The number of years is: "+answer1); 
       } 

       else if(n.getText().toString().equals("")){ 
        Toast errormsg = Toast.makeText(PresentValue.this, "Sorry but Number of Periods cannot be computed.", 5000); 
        errormsg.setGravity(Gravity.CENTER, 0, 0); 
        errormsg.show(); 
       } 

       else { 
        Toast errormsg = Toast.makeText(PresentValue.this, "You either left too many fields empty or filled all of them.", 5000); 
        errormsg.setGravity(Gravity.CENTER, 0, 0); 
        errormsg.show(); 
       } 

      }   
     }); 

Любая идея о том, что случилось с этим

+0

Что вы подразумеваете под «первым двойным в первом утверждении»? –

+3

Ваш примерный код недействителен. Пожалуйста, предоставьте реальный исходный код, чтобы люди могли правильно ответить на вопрос. –

+1

Вам нужно показать код в первом операторе if, если это то, что вызывает ошибку. – Martin

ответ

0

Вот как я решил это. Однако это кажется действительно ... душным. есть ли способ сделать его более безвкусным?

//clickhandler 
     calc.setOnClickListener(new OnClickListener() {   
      public void onClick(View v) { 
       EditText fv = (EditText) findViewById(R.id.pv_fv); 
       EditText pv = (EditText) findViewById(R.id.pv_pv); 
       EditText r = (EditText) findViewById(R.id.pv_discountrate); 
       EditText n = (EditText) findViewById(R.id.pv_periods); 
       EditText t = (EditText) findViewById(R.id.pv_years); 
       TextView answer = (TextView) findViewById(R.id.pv_answer); 
       int filledfields = 0; 

       if (fv.getText().toString().equals("")){ 
        filledfields ++; 
       } 
       if (pv.getText().toString().equals("")) { 
        filledfields ++; 
       } 
       if (r.getText().toString().equals("")) { 
        filledfields ++; 
       } 
       if (t.getText().toString().equals("")) { 
        filledfields ++; 
       } 
       if (n.getText().toString().equals("")) { 
        filledfields ++; 
       } 

       if (filledfields > 1){ 
        Toast errormsg = Toast.makeText(PresentValue.this, "Sorry but you left more than one field empty.", 5000); 
        errormsg.setGravity(Gravity.CENTER, 0, 0); 
        errormsg.show(); 
       } 

       else if (fv.getText().toString().equals("")) { 
        double r1 = Double.parseDouble(r.getText().toString()); 
        double n1 = Double.parseDouble(n.getText().toString()); 
        double t1 = Double.parseDouble(t.getText().toString()); 
        double pv1 = Double.parseDouble(pv.getText().toString()); 
        double answer1 = pv1*(Math.pow(1+(r1/n1) ,n1*t1)); 
        answer1 = (double)(Math.round(answer1*100))/100; 

        answer.setText("The Future Value of the cash flow is: "+answer1); 
       } 

       else if (pv.getText().toString().equals("")) { 
        double fv1 = Double.parseDouble(fv.getText().toString()); 
        double r1 = Double.parseDouble(r.getText().toString()); 
        double n1 = Double.parseDouble(n.getText().toString()); 
        double t1 = Double.parseDouble(t.getText().toString()); 
        double answer1 = fv1/(Math.pow(1+(r1/n1) ,n1*t1)); 
        answer1 = (double)(Math.round(answer1*100))/100; 

        answer.setText("The Present Value of the cash flow is: "+answer1);      
       } 

       else if (r.getText().toString().equals("")){ 
        double fv1 = Double.parseDouble(fv.getText().toString()); 
        double pv1 = Double.parseDouble(pv.getText().toString()); 
        double n1 = Double.parseDouble(n.getText().toString()); 
        double t1 = Double.parseDouble(t.getText().toString()); 
        double answer1 = ((Math.pow(fv1/pv1, 1/(n1*t1))) -1)*n1 ; 
        answer1 = (double)(Math.round(answer1*100))/100; 

        answer.setText("The discount rate/interest rate applied is: "+answer1); 
       } 

       else if (t.getText().toString().equals("")){ 
        double fv1 = Double.parseDouble(fv.getText().toString()); 
        double pv1 = Double.parseDouble(pv.getText().toString()); 
        double n1 = Double.parseDouble(n.getText().toString()); 
        double r1 = Double.parseDouble(r.getText().toString()); 
        double answer1 = Math.log(fv1/pv1)/(n1* Math.log(1+(r1/n1))) ; 
        answer1 = (double)(Math.round(answer1*100))/100; 

        answer.setText("The number of years is: "+answer1); 
       } 

       else if(n.getText().toString().equals("")){ 
        Toast errormsg = Toast.makeText(PresentValue.this, "Sorry but Number of Periods cannot be computed.", 5000); 
        errormsg.setGravity(Gravity.CENTER, 0, 0); 
        errormsg.show(); 
       } 

       else { 
        Toast errormsg = Toast.makeText(PresentValue.this, "You either left too many fields empty or filled all of them.", 5000); 
        errormsg.setGravity(Gravity.CENTER, 0, 0); 
        errormsg.show(); 
       } 

      }   
     }); 
     //clickhandler end 
1

Если у вас есть только эти пять поля - оператор else доступен, только если ни одно из полей не пусто.

Если только один пуст, он будет улавливаться соответствующим оператором if - он отлично работает в этом аспекте.
Если две руды больше пустые - они будут пойманы только один раз, в первом условии, если это применимо, - что, кажется, не так, как вы хотите.
Если ни один из них не пуст, будет сделано заявление else, хотя ни один из них не пуст - это, очевидно, то, что вы имели в виду.

Альтернативный подход может не использовать операторы else if, но только if s и подсчитать количество неисправностей. Если он выше, то 1 - несколько полей пустые. Если оно равно 0, то никакие поля не будут пустыми. Если он может быть применен, конечно, зависит от фактического содержимого блоков для каждого утверждения.

+0

В основном я хочу, чтобы он выполнял соответствующие вычисления, когда только одно поле пусто. Когда два для всех пусты или ни один не пуст, он должен дать тост – Killerpixler

0

Поместите имена или ссылки на поля в List или Set. Затем вы можете легко получить пустой, который вам понадобится.

И

if (emptyFieldSet.size() > 1) { 
    toast that says "error multiples are empty" 
} 

является гораздо более читабельным, чем этот последний else заявление после уйму if с.

+0

Вы также можете поместить все поля в «Список» или «Установить» в первую очередь. Таким образом, вы можете легко попасть в нужные поля, и вы можете делать такие классные вещи, как 'fillFieldSet = allFieldSet.removeAll (emptyFieldSet) ' –

+0

Я отправил реальный код, который у меня есть. Где бы я разместил поле? – Killerpixler

+0

Должен спать, вернемся к этому завтра, пожалуйста, верните утверждения if в свой вопрос, иначе многие комментарии/ответы не имеют смысла. –

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