2015-02-21 2 views
0

Я создаю приложение, которое решает для недостающих частей наклонного треугольника, если оно разрешимо, но мне сложно провести синтаксический анализ данных из EditTexts. Вот пример моего кода:Есть ли способ разобрать EditTexts, который не пуст?

Double A, B, C, a, b, c; 
    aa = (EditText)findViewById(R.id.angleA); 
    ab = (EditText)findViewById(R.id.angleB); 
    ac = (EditText)findViewById(R.id.angleC); 
    sa = (EditText)findViewById(R.id.sideA); 
    sb = (EditText)findViewById(R.id.sideB); 
    sc = (EditText)findViewById(R.id.sideC); 

if (!aa.getText().toString().isEmpty()){ 
     A = Double.parseDouble(aa.getText().toString()); 
    } 

    if (!ab.getText().toString().isEmpty()){ 
     B = Double.parseDouble(ab.getText().toString()); 
    } 

    if (!ac.getText().toString().isEmpty()){ 
     C = Double.parseDouble(ac.getText().toString()); 
    } 

    if (!sa.getText().toString().isEmpty()){ 
     a = Double.parseDouble(sa.getText().toString()); 
    } 

    if (!sb.getText().toString().isEmpty()){ 
     b = Double.parseDouble(sb.getText().toString()); 
    } 

    if (!sc.getText().toString().isEmpty()){ 
     c = Double.parseDouble(sc.getText().toString()); 
    } 

Я интересно, если есть более короткий способ кодирования это.

+3

Почему бы вам не создать один метод, который будет проверять и анализировать его? – Fahim

+1

Короче? в чем? количество строк? – Gatunox

+0

Хорошо. Наконец, моя проблема решена. Моя проблема была в том, что программа вылетает, когда вы вынуждаете синтаксический анализ на пустые edittexts. То, что я сделал, я использовал, попробовал и поймал. Благодарю. – xSkyyy16

ответ

0

Самый короткий, читаемый как я могу думать:

// Store EditText ids in an array 
int[] editTextIds = new int[] { R.id.angleA, R.id.angleB, 
     R.id.angleC, R.id.sideA, R.id.sideB, R.id.sideC }; 
// Store EditText values in an ArrayList 
ArrayList<Double> results = new ArrayList<>(); 

// Loop ids, saving values to ArrayList 
for (int id : editTextIds) { 
    String value = ((EditText) findViewById(id)).getText().toString(); 
    if (TextUtils.isEmpty(value)) { 
     results.add(null); 
    } else { 
     results.add(Double.valueOf(value)); 
    } 
} 

// Now: 
// results.get(0) = A 
// results.get(1) = B 
// results.get(2) = C 
// results.get(3) = a 
// results.get(4) = b 
// results.get(5) = c 
// If results.get(x) returns null, means value isn't set 
0

Вы могли бы написать функцию, чтобы сделать работу:

Double A, B, C, a, b, c; 

public void calc() 
{ 
    A = getValueOrNan(R.id.angleA); 
    B = getValueOrNan(R.id.angleB); 
    C = getValueOrNan(R.id.angleC); 
    a = getValueOrNan(R.id.sideA); 
    b = getValueOrNan(R.id.sideA); 
    c = getValueOrNan(R.id.sideA); 

    if (A == Double.NaN) 
    { 
     // calc A 
    } 
    if (B == Double.NaN) 
    { 
     // calc B 
    } 

    // ... 
} 

public Double getValueOrNan(int id) 
{ 
    EditText et = (EditText)findViewById(id); 

    if (!et.getText().toString().isEmpty()) 
    { 
     return Double.parseDouble(et.getText().toString()); 
    } 
    else 
    { 
     return Double.NaN; 
    } 
} 
+0

Если 'A! = Double.NaN', он не проверяет B. – Simas

+0

@ user3249477 thx, fixed. – 0xSimi

0

использования TextUtils.isEmpty() и исключения Java обработки

aa = (EditText)findViewById(R.id.angleA); 
ab = (EditText)findViewById(R.id.angleB); 
ac = (EditText)findViewById(R.id.angleC); 
sa = (EditText)findViewById(R.id.sideA); 
sb = (EditText)findViewById(R.id.sideB); 
sc = (EditText)findViewById(R.id.sideC); 

//Rest of the stuff 
// 
Double saDouble=getVal(sa); 


public Double getVal(EditText et){ 
Double op=Double.NAN;  
try{ 
if(!TextUtils.isEmpty(et.getText())) 
    Double.parseDouble(et.getText().toString()); 
}catch(NumberFormatException e){ 
    //log,toast,dialog whatever you need to display. 
} 
return op; 
} 
Смежные вопросы