2016-12-02 13 views
0

この計算プログラムには2つの問題があります(いくつかの入力を取り、計算を実行し、いくつかの出力を行います)。助けてくれてありがとう! cResultetResultbeta1ResultphiResultMnResult & phiMnResultエミュレーション時の冗長警告とアプリケーションのクラッシュ(Androidスタジオ)(Java)

2)アプリケーションに

1)Variable 'aResult' initializer 'Double.parseDouble(tvaResult.getText().toString()) is redundant類似の警告ボタンをクリックした後にクラッシュします。これは、私の計算のいくつかがエラーに陥っているとか、ボタンコーディング自体が間違っていると信じています。

--------- beginning of crash E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.ericallenbellville.rcbeamdesign, PID: 3087 java.lang.NumberFormatException: empty String at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071) at java.lang.Double.parseDouble(Double.java:547) at com.example.ericallenbellville.rcbeamdesign.MainActivity.onClick(MainActivity.java:54) at android.view.View.performClick(View.java:5637) at android.view.View$PerformClick.run(View.java:22429) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

package com.example.ericallenbellville.rcbeamdesign; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 


public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    public Button btnCalc; 
    private TextView tvaResult; 
    private TextView tvcResult; 
    private TextView tvetResult; 
    private TextView tvphiResult; 
    private TextView tvMnResult; 
    private TextView tvphiMnResult; 
    private TextView tvbeta1Result; 
    private EditText etB,etD,etAs,etFc,etFy; 

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

    private void init() { 
     btnCalc = (Button)findViewById(R.id.btnCalc); 
     etB = (EditText)findViewById(R.id.etB); 
     etD = (EditText)findViewById(R.id.etD); 
     etAs = (EditText)findViewById(R.id.etAs); 
     etFc = (EditText)findViewById(R.id.etFc); 
     etFy = (EditText)findViewById(R.id.etFy); 
     tvaResult = (TextView)findViewById(R.id.tvaResult); 
     tvcResult = (TextView)findViewById(R.id.tvcResult); 
     tvetResult = (TextView)findViewById(R.id.tvetResult); 
     tvphiResult = (TextView)findViewById(R.id.tvphiResult); 
     tvMnResult = (TextView)findViewById(R.id.tvMnResult); 
     tvphiMnResult = (TextView)findViewById(R.id.tvphiMnResult); 
     tvbeta1Result = (TextView)findViewById(R.id.tvbeta1Result); 

     btnCalc.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
      Double B = Double.parseDouble(etB.getText().toString()); 
      Double D = Double.parseDouble(etD.getText().toString()); 
      Double As = Double.parseDouble(etAs.getText().toString()); 
      Double Fc = Double.parseDouble(etFc.getText().toString()); 
      Double Fy = Double.parseDouble(etFy.getText().toString()); 
      Double aResult = Double.parseDouble(tvaResult.getText().toString()); 
      Double cResult = Double.parseDouble(tvcResult.getText().toString()); 
      Double etResult = Double.parseDouble(tvetResult.getText().toString()); 
      Double beta1Result = Double.parseDouble(tvbeta1Result.getText().toString()); 
      Double phiResult = Double.parseDouble(tvphiResult.getText().toString()); 
      Double MnResult = Double.parseDouble(tvMnResult.getText().toString()); 
      Double phiMnResult = Double.parseDouble(tvphiMnResult.getText().toString()); 
      switch(view.getId()) { 
       case R.id.btnCalc: 
        if (Fc <= 4000) { 
         beta1Result = (0.85); 
        } else if (4000 < Fc && Fc <= 8000) { 
         beta1Result = ((0.85)-(0.05 * ((Fc - 4000)/(1000)))); 
        } else { 
         beta1Result = 0.65; 
        } 
        aResult = ((Fy * As)/(0.85 * Fc * B)); 
        cResult = (aResult/beta1Result); 
        etResult = (((D - cResult)/(cResult)) * 0.003); 
        if (etResult >= 0.005) { 
         phiResult = (0.9); 
        } else if (0.002 <= etResult && etResult < 0.005) { 
         phiResult = (0.65 + (etResult - 0.002) * 0.25/(0.005 - 0.002)); 
        } else { 
         phiResult = (0.00); 
        } 
        MnResult = (((Fy * As) * (D - (aResult/2.0)))); 
        phiMnResult = phiResult * MnResult; 
        tvaResult.setText(String.valueOf(aResult)); 
        tvcResult.setText(String.valueOf(cResult)); 
        tvetResult.setText(String.valueOf(etResult)); 
        tvphiResult.setText(String.valueOf(phiResult)); 
        tvMnResult.setText(String.valueOf(MnResult)); 
        tvphiMnResult.setText(String.valueOf(phiMnResult)); 
        break; 

      }} 
    } 
+0

スタックトレースを送信します。 – rafid059

+0

@RafiduzzamanSonnetクラッシュログを意味しますか?私はそれを投稿しました。申し訳ありませんが、これは私が今までに書いた必要がある最初のプログラムです。 –

+0

ダブルで空の文字列を解析しようとしています。 – rafid059

答えて

0

あなたはなど、値を使用してaResultcResultされていない、あなたはswitch文の中にそれらを計算まで。なぜテキストビューのテキストを使ってそれらを初期化するのですか?例外が発生する理由は、textviewsが空で空の文字列を解析してDoubleにしようとしているためです。

double aResult = 0; //Double.parseDouble(tvaResult.getText().toString()); 
double cResult = 0; //Double.parseDouble(tvcResult.getText().toString()); 
double etResult = 0; //Double.parseDouble(tvetResult.getText().toString()); 
double beta1Result = 0; //Double.parseDouble(tvbeta1Result.getText().toString()); 
double phiResult = 0; //Double.parseDouble(tvphiResult.getText().toString()); 
double MnResult = 0; //Double.parseDouble(tvMnResult.getText().toString()); 
double phiMnResult = 0; //Double.parseDouble(tvphiMnResult.getText().toString()); 
switch(view.getId()) { 
    case R.id.btnCalc: 
    if (Fc <= 4000) { 
     beta1Result = (0.85); 
    } else if (4000 < Fc && Fc <= 8000) { 
     beta1Result = ((0.85)-(0.05 * ((Fc - 4000)/(1000)))); 
    } else { 
     beta1Result = 0.65; 
    } 
    aResult = ((Fy * As)/(0.85 * Fc * B)); 
    cResult = (aResult/beta1Result); 
    etResult = (((D - cResult)/(cResult)) * 0.003); 
    if (etResult >= 0.005) { 
     phiResult = (0.9); 
    } else if (0.002 <= etResult && etResult < 0.005) { 
     phiResult = (0.65 + (etResult - 0.002) * 0.25/(0.005 - 0.002)); 
    } else { 
     phiResult = (0.00); 
    } 
    MnResult = (((Fy * As) * (D - (aResult/2.0)))); 
    phiMnResult = phiResult * MnResult; 
    tvaResult.setText(String.valueOf(aResult)); 
    tvcResult.setText(String.valueOf(cResult)); 
    tvetResult.setText(String.valueOf(etResult)); 
    tvphiResult.setText(String.valueOf(phiResult)); 
    tvMnResult.setText(String.valueOf(MnResult)); 
    tvphiMnResult.setText(String.valueOf(phiMnResult)); 
    break; 
} 
+0

私はこの答えの前にあなたが言っていたことを理解しました。結果についてdouble.parseに関するテキストの残りの部分を削除しました。私はこれをチェックし、計算が完了するまで走った。私はそれらを0に設定するあなたのやり方が同じ効果になると信じています。それは正しいと思いますか? –

+0

はい、同じでしょう。ところで、あなたは今、 'switch'ケースの中でそれらの変数を宣言していますよね? – rafid059

+0

コードの最後に、結果がTextViewに変換されます(私が何かを誤解している場合を除きます)。 –

関連する問題