2012-03-05 3 views
0

Я хочу отобразить случайное сгенерированное выражение, подобное 2 + 3 = при нажатии #. Я реализовал этот код, но когда я его нажимаю, приложение выходит из строя.текст дисплея при нажатии кнопки #

Мой XML-код:

<TextView 
     android:id="@+id/randomNumberGen" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="15dp" 
     android:textSize="45dp" /> 

код Java является:

package org.example.question; 

import java.util.Random; 


import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class QuestionActivity extends Activity implements View.OnClickListener { 
    /** Called when the activity is first created. */ 
    int fnum, snum; 


Button one,two,three,four,five,six,seven,eight,nine,zero,minus,hash; 
    TextView display; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final Random myRandom = new Random(); 

     display = (TextView)findViewById(R.id.randonNumberGen); 

     //Buttons 
     one= (Button) findViewById(R.id.keypad_1); 
     two= (Button) findViewById(R.id.keypad_2); 
     three= (Button) findViewById(R.id.keypad_3); 
     four= (Button) findViewById(R.id.keypad_4); 
     five = (Button) findViewById(R.id.keypad_5); 
     six= (Button) findViewById(R.id.keypad_6); 
     seven = (Button) findViewById(R.id.keypad_7); 
     eight = (Button) findViewById(R.id.keypad_8); 
     nine = (Button) findViewById(R.id.keypad_9); 
     minus = (Button) findViewById(R.id.keypad_subtract); 
     hash = (Button) findViewById(R.id.keypad_hash); 


     one.setOnClickListener(this);  two.setOnClickListener(this);  three.setOnClickListener(this); 
     three.setOnClickListener(this); four.setOnClickListener(this);  five.setOnClickListener(this); 
     six.setOnClickListener(this);  seven.setOnClickListener(this);  eight.setOnClickListener(this); 
     nine.setOnClickListener(this);  minus.setOnClickListener(this);  hash.setOnClickListener(this); 

} 

    public void onClick(View arg0) { 
     View v = null; 
     switch(v.getId()){ 
     case R.id.keypad_hash: 
      display.setText(fnum+"+"+ snum+"="); 
      fnum = (int) ((double) ((Math.random() * 1000))/100.0); 
      snum = (int) ((double) ((Math.random() * 1000))/100.0); 
      break; 
     } 

    } 
    public void requestFocus() { 
     // TODO Auto-generated method stub 

    } 
} 

При нажатии на кнопку "#" сбои приложений. Любые идеи почему?

+0

fnum и snum initalised? Я вижу, что вы объявляете их, но я не вижу, где вы их устанавливаете. –

+0

Опубликовать трассировку стека. – kabuko

+0

@graham, я устанавливаю их в fnum = 0 и snum = 0 и im, используя их в выражении switch для генерации выражения randon, например fnum + snum = –

ответ

1

OK из кода дал вам объявить

int fnum, snum; 

, но они не установлены в любом месте в коде до того момента, когда вы звоните:

display.setText(fnum+"+"+ snum+"="); 

вы, вероятно, получите сообщение об ошибке, однако без бревен/debug info Я не могу сказать вам. Отправьте их, чтобы подтвердить это.

Edit:

После display.setText ... вы установите значения. Вы должны установить их, а затем отобразить их.

case R.id.keypad_hash: 

     fnum = (int) ((double) ((Math.random() * 1000))/100.0); 
     snum = (int) ((double) ((Math.random() * 1000))/100.0); 
     display.setText(fnum+"+"+ snum+"="); 
     break; 

Следующая Edit:

Если вы не слишком суетливая о случайной ИНТ вы создаете вы могли бы сделать что-то вроде:

Random random = new Random(); 

fnum = random.nextInt(100); 
//nextInt(100) - upto the max value of 100 
snum = random.nextInt(100); 
+0

также почему вы умножаете 1000, затем делили на 100? вы просто хотите умножить на 10? –

+1

Потому что ваш код не будет выглядеть круто, если в нем нет большого количества арифметических операторов. Всем это известно. – JakeWilson801

+1

У Джона Скита была бы пригонка, если бы он увидел эту математику - куда ушла кнопка «скрыть от скита»? –

2
View v = null; 
switch(v.getId()){ 

Вы не можете сделать это. v является null. Вместо этого попробуйте switch(arg0.getId()).

EDIT: Кроме того, как Грэм Смит указывает, поставить линию ...

display.setText(fnum+"+"+ snum+"="); 

... После того как вы сгенерировали случайные числа.

+0

спасибо парню ... он отлично работал с переключателем (arg0.getId()) .... –