-1

私の友人のために、ボタンのonClickの合計が1ずつ増えるシンプルなカウンターアプリを作成しようとしています。ボタンがクリックされたときに強制的に閉じて、数学ロジックを実行しているはずです。LogCatのエラーの理由は、私にはまったく明らかです。私がJava/Androidで数学を試みたのはこれが初めてです(はい、私は初心者です)私は、Imが値を適切に処理または宣言するか、あるいはこの方法でそれを行うことが可能かどうかさえ完全にはわかりません。多くの例を見ましたが、それらはすべて私が本当に探しているものよりも複雑で、素晴らしくて単純なようです。(私の研究からの)二次的な質問として、そして私自身の検証のために、doubleは小数をとることができる値ですが、intは整数ですか?それらが両方とも整数である(つまり、doubleに小数が含まれていない)限り、それらを互いに置き換えることができますか(intの代わりにdoubleを使用し、その逆も可能です)?

コード

    public class CounterActivity extends Activity
{
TextView tt;
Button calculate;
double x=1;  //Known value to be increased by
double z=0;  //The total to increase incrementally
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  tt=(TextView)findViewById(R.id.tt);
  calculate=(Button)findViewById(R.id.calculate);
  calculate.setOnClickListener(OnClickListener);

}

Button.OnClickListener OnClickListener = new Button.OnClickListener() {
  public void onClick (View calculate) {

  x=Double.parseDouble("x");  //Dont believe these are set properly
  z=Double.parseDouble("z");
  z=x+z;  //The basic loop to run onClick
  tt.setText(Double.toString(z));
}
};
} 

LogCat

    12-16 15:58:52.194: W/dalvikvm(382): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    12-16 15:58:52.194: E/AndroidRuntime(382): Uncaught handler: thread main exiting due to uncaught exception
    12-16 15:58:52.214: E/AndroidRuntime(382): java.lang.NumberFormatException: 
    12-16 15:58:52.214: E/AndroidRuntime(382):  at org.apache.harmony.luni.util.FloatingPointParser.parseDblImpl(Native Method)
    12-16 15:58:52.214: E/AndroidRuntime(382):  at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:283)
    12-16 15:58:52.214: E/AndroidRuntime(382):  at java.lang.Double.parseDouble(Double.java:285)
    12-16 15:58:52.214: E/AndroidRuntime(382):  at jtek.industries.com.CounterActivity.calculate(CounterActivity.java:37)
    12-16 15:58:52.214: E/AndroidRuntime(382):  at jtek.industries.com.CounterActivity.access$0(CounterActivity.java:35)
    12-16 15:58:52.214: E/AndroidRuntime(382):  at jtek.industries.com.CounterActivity$1.onClick(CounterActivity.java:33)
    12-16 15:58:52.214: E/AndroidRuntime(382):  at android.view.View.performClick(View.java:2364)
    12-16 15:58:52.214: E/AndroidRuntime(382):  at android.view.View.onTouchEvent(View.java:4179)
    12-16 15:58:52.214: E/AndroidRuntime(382):  at android.widget.TextView.onTouchEvent(TextView.java:6541)
    12-16 15:58:52.214: E/AndroidRuntime(382):  at android.view.View.dispatchTouchEvent(View.java:3709)

少し方向性をいただければ幸いです。もっと複雑なことに飛び込む前に、基本を理解する必要があります:)

4

2 に答える 2

2

これは間違っています:

  x=Double.parseDouble("x");  //Dont believe these are set properly
  z=Double.parseDouble("z");

parseDouble()メソッドは、String引数として指定された値をDouble値に変換するため、「x」をに変換することはできませんDouble。たとえば、「2.5」を入力すると、2.5が2倍の値になります。

この方法の詳細については、Androidのドキュメントをご覧ください。

于 2012-12-16T22:24:40.737 に答える
0

Double.parseDouble(someNumber)someNumberたとえば、それが数値を表す文字列であることを期待し"1.02"ます。

あなたの場合、"x"は数値を表す文字列ではないため、失敗して例外をスローします。

于 2012-12-16T22:23:17.227 に答える