2012-03-31 12 views
0

私は個人的な興味のためにアンドロイドプロジェクトに取り組んでいます。私は複数のEditTextフィールドで作業しており、すべてゼロ以外の10進数または整数に入力する必要があります。 xmlファイルでは、数値または小数点しか受け付けないことを指定しました。私はあまりJavaに精通していませんが、私はtry/catchメソッドと、それぞれのEditText値をdoubleとして解析しようとしているときにどのように使用されているのかを読んでいます。現時点では、すべてのフィールドがいっぱいになると正常に動作しますが、誤ってフィールドを入力することを忘れた場合、クラッシュする代わりにエラーメッセージが表示されるように、何らかの例外処理を追加します。これは多くのように聞こえるが、私はそれがかなり軽微だと思う。ここで私が使用している計算方法です。あなたのレビュー:)ありがとうございAndroid:空のEditTextフィールドを確認する

public static void calculate() { 

    NumberFormat formatter1 = new DecimalFormat("#0.00"); 
    NumberFormat formatter2 = new DecimalFormat("#0.00000"); 

    Editable evG1F = etG1F.getText(); 
    Editable evG1U = etG1U.getText(); 
    Editable evG2F = etG2F.getText(); 
    Editable evG2U = etG2U.getText(); 
    Editable evG3F = etG3F.getText(); 
    Editable evG3U = etG3U.getText(); 
    Editable evWin = etWin.getText(); 

    double g1f = 0.0; 
    double g1u = 0.0; 
    double g2f = 0.0; 
    double g2u = 0.0; 
    double g3f = 0.0; 
    double g3u = 0.0; 
    double p1odds, p2odds, p3odds, p4odds, p5odds, p6odds, p7odds, p8odds; 
    double totalParlay, profit, finalOdds, risk; 

    win = 0.0; 

    g1f = Double.parseDouble(evG1F.toString()); 
    g1u = Double.parseDouble(evG1U.toString()); 
    g2f = Double.parseDouble(evG2F.toString()); 
    g2u = Double.parseDouble(evG2U.toString()); 
    g3f = Double.parseDouble(evG3F.toString()); 
    g3u = Double.parseDouble(evG3U.toString()); 
    win = Double.parseDouble(evWin.toString()); 

    p1odds = (1/(g1f * g2f * g3f)); 
    p2odds = (1/(g1f * g2f * g3u)); 
    p3odds = (1/(g1f * g2u * g3f)); 
    p4odds = (1/(g1f * g2u * g3u)); 
    p5odds = (1/(g1u * g2f * g3f)); 
    p6odds = (1/(g1u * g2f * g3u)); 
    p7odds = (1/(g1u * g2u * g3f)); 
    p8odds = (1/(g1u * g2u * g3u)); 

    totalParlay = (p1odds + p2odds + p3odds + p4odds + p5odds + p6odds 
      + p7odds + p8odds); 
    profit = 1 - totalParlay; 
    finalOdds = ((profit/totalParlay) + 1); 
    risk = (win/(finalOdds - 1)); 

    p1 = ((risk + win) * p1odds); 
    p2 = ((risk + win) * p2odds); 
    p3 = ((risk + win) * p3odds); 
    p4 = ((risk + win) * p4odds); 
    p5 = ((risk + win) * p5odds); 
    p6 = ((risk + win) * p6odds); 
    p7 = ((risk + win) * p7odds); 
    p8 = ((risk + win) * p8odds); 

    sRisk = risk; 
    sFinalOdds = finalOdds; 

    tvRisk.setText("$" + formatter1.format(Parlay.sRisk)); 
    tvOdds.setText("" + formatter2.format(Parlay.sFinalOdds)); 

} 
+0

このコードは配列を叫ぶ。 – MByD

答えて

1

あなたはtry/catchブロックであなたのparseDouble()文を包むことができます:

それが有効な二重のない場合、または例外がスローされます

try { 
     g1f = Double.parseDouble(evG1F.getText().toString()); 
     g1u = Double.parseDouble(evG1U.getText().toString()); 
     g2f = Double.parseDouble(evG2F.getText().toString()); 
     g2u = Double.parseDouble(evG2U.getText().toString()); 
     g3f = Double.parseDouble(evG3F.getText().toString()); 
     g3u = Double.parseDouble(evG3U.getText().toString()); 
     win = Double.parseDouble(evWin.getText().toString()); 
    } catch (NumberFormatException e) { 
     // Error handling here 
    } 
文字列の場合空です。あなたが本当に(あなただけとにかく彼らに getText()を使用しているので)、さらにアップしたもの Editableオブジェクトを宣言する必要はありませんので、私は、呼び出しごとに toString()getText()を追加しました。

+0

ありがとう!編集可能な変数を宣言する必要があるかどうかはわかりませんでした。私は宣言した編集可能な変数を使用していない場合 – user1055656

+0

も、私はそれがetG1F.getTextされるべきだと思う()。のtoString() – user1055656

+0

あなたは絶対的に正しいです:) –

関連する問題