1

ええと...ここに問題があります。他の質問を調べたのは私が初めてではないようですが、Android固有のものを見つけることができません(その他はC++またはさまざまなシナリオのストレートJavaです)。

与えられたユーザー入力で必要な燃料マイレージを決定する計算機があります。私が今追加しているのは、レース中に失われた体重を計算できる「燃焼」の側面です。重量/燃焼要素を追加する前は、すべて正常に機能していました。

これで、最初のクリック時の重みを除いて、すべてが正常に計算されます。

2 回目のクリック (およびその後のクリック) では、適切に計算されます。switch ステートメントとその場所に関係があると思われますが、間違っている可能性があります....そうでなくても、変更方法がわかりません。

最初のクリックですべてが適切に機能するようにするためのヘルプを探しています。ありがとう!

編集: デバッガーとして入れた非例外のトースト テキストは、それが数学の問題なのか、それともコード内のものなのかを判断します。最初のクリックで「0.0」が表示され、その後のクリックで「6.2」または「6.6」が表示されます。


    package com.tomcat.performance;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.RadioGroup.OnCheckedChangeListener;
    import android.widget.TextView;
    import android.widget.Toast;


    public class Fuelsimple extends Activity implements OnCheckedChangeListener{

double fuelweight;

public void onCheckedChanged(RadioGroup group, int checkedId) {
    // TODO Auto-generated method stub
    switch (checkedId){
    case R.id.rbMethanol:
        fuelweight = 6.6;
        break;
    case R.id.rbGasoline:
        fuelweight = 6.2;
        break;}
}

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

RadioGroup rgFuelType = ((RadioGroup) findViewById (R.id.rgFuelType));
rgFuelType.setOnCheckedChangeListener(this);
RadioButton rbMethanol = ((RadioButton) findViewById(R.id.rbMethanol));
RadioButton rbGasoline = ((RadioButton) findViewById(R.id.rbGasoline));

Button gen = ((Button) findViewById(R.id.submit));  
gen.setOnClickListener(new View.OnClickListener() { 



        public void onClick(View v) {
    // TODO Auto-generated method stub      

            EditText fuelUsed, pracLaps, featureLaps;

            pracLaps = ((EditText) findViewById(R.id.pracLaps));
            fuelUsed = ((EditText) findViewById(R.id.fuelUsed));
            featureLaps = ((EditText) findViewById(R.id.featureLaps));
            TextView textLPGValue, textFuelNeededValue, textBurnoffValue;
            try{
            double pracLapsVar = Double.parseDouble(pracLaps.getText().toString());
            double fuelUsedVar = Double.parseDouble(fuelUsed.getText().toString());
            double featureLapsVar = Double.parseDouble(featureLaps.getText().toString());

            double efficiency = (pracLapsVar / fuelUsedVar);
            double fuelNeeded = (featureLapsVar / efficiency);
            double burnoff = (1.05 * (fuelNeeded * fuelweight));

            Toast andJelly = Toast.makeText(Fuelsimple.this, String.valueOf(fuelweight), Toast.LENGTH_LONG);
            andJelly.show();


            textLPGValue = ((TextView) findViewById(R.id.textLPGValue));
            textFuelNeededValue = ((TextView) findViewById(R.id.textFuelNeededValue));
            textBurnoffValue = ((TextView) findViewById(R.id.textBurnoffValue));

            textLPGValue.setText(String.valueOf(String.format("%.3f", efficiency)) + " laps per gallon");
            textFuelNeededValue.setText(String.valueOf(String.format("%.3f", fuelNeeded)) + " gallons");
            textBurnoffValue.setText(String.valueOf(String.format("%.2f", burnoff)) + " pounds");
            } catch (NumberFormatException e) {Toast andEggs = Toast.makeText(Fuelsimple.this, "Please complete all fields and enter your fuel & lap info in decimals or whole numbers.", Toast.LENGTH_LONG); andEggs.show();} 
            catch (NullPointerException n) {Toast andEggs = Toast.makeText(Fuelsimple.this, "Please enter ALL lap and fuel data.", Toast.LENGTH_LONG);
            andEggs.show();}
        }}
);      
}
    public void onClick(View v) {
    }
    }
4

2 に答える 2

3

私の知る限り、可変fuelWeightは、ラジオボタンが押されるまで初期化されません。これを修正する最も簡単な方法は、リスナーを設定した後、おそらくこれらの変数を初期化する場所のすぐ下で、setChecked(true)rbmethanolまたはrbGasolineのいずれかを呼び出すことです。switchステートメントを解決する必要があるため、リスナーの設定後にこれを行うことが重要です。現在、ラジオボタンを押す前に、すべての数値プリミティブデータ型と同様に、fuelWeightは0に初期化されます。これが、最初の計算が間違っている理由である可能性があります。

于 2012-07-05T19:39:10.583 に答える
1

チェック状態が変化するたびに呼び出されます。

cbSave.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                int visibility = isChecked ? View.VISIBLE : View.GONE;
                findViewById(R.id.nameInstructions).setVisibility(visibility);
                findViewById(R.id.name).setVisibility(visibility);

}
于 2014-08-07T22:21:46.573 に答える