سؤال

Displaying two random numbers and counting scores for odd and even turns. When one of it reaches to 100, the application stops.

This is my code..

public class Board_Play1 extends Activity {

int d=0,a=0,b=0,turn=2;
Random random = new Random();

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.board_play1);
    EditText diceno = (EditText) findViewById(R.id.editText1);
    EditText p1 = (EditText) findViewById(R.id.editText2);
    EditText p2 = (EditText) findViewById(R.id.editText3);

    diceno.setText(String.valueOf(d));  
    p1.setText(String.valueOf(a));
    p2.setText(String.valueOf(b));

    while(a!=100 && b!=100)
    {
        if(turn%2==0)
        {
            Button button = (Button) findViewById(R.id.button1);
            button.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View view) {
                    // TODO Auto-generated method stub
                    d=random.nextInt(6)+1;
                    EditText diceno = (EditText) findViewById(R.id.editText1);
                    diceno.setText(String.valueOf(d));

                }
            }); 
        }
        else
        {

            d=random.nextInt(6)+1;
            diceno.setText(String.valueOf(d));
        }

    if(turn%2==0)
            a+=d;
        else
            b+=d;

    if(a>100)
        a-=d;
    if(b>100)
        b-=d;


        p1.setText(String.valueOf(a));
        p2.setText(String.valueOf(b));
        turn++;
    }
    a=0;b=0;

}


}

When I run this.. It goes like.. everything is completed. All the time p2 editText gets 100 and p1 will have some number less than 100 and diceno has a value 100-p1.

But well that's not the main question I want to ask. It is that I added Buttons and onClickListener methods that run only when user clicks on that particular button. But nothing such is happening. As soon as I open the app it gets their max. values and user got nothing to do.

Why is it being that way? Help what to do so that I start with values 0 in both p1 and p2.

هل كانت مفيدة؟

المحلول

Try this, I changed your code

public class Board_Play1 extends Activity {

int d=0,a=0,b=0,turn=2;
Random random = new Random();

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.board_play1);
EditText diceno = (EditText) findViewById(R.id.editText1);
EditText p1 = (EditText) findViewById(R.id.editText2);
EditText p2 = (EditText) findViewById(R.id.editText3);

diceno.setText(String.valueOf(d));  
p1.setText(String.valueOf(a));
p2.setText(String.valueOf(b));
EditText diceno = (EditText) findViewById(R.id.editText1);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                // TODO Auto-generated method stub
                d=random.nextInt(6)+1;
               diceno.setText(String.valueOf(d));

                if(turn%2==0)
                        a+=d;
                    else
                        b+=d;

                if(a>100)
                    a-=d;
                if(b>100)
                    b-=d;


                    p1.setText(String.valueOf(a));
                    p2.setText(String.valueOf(b));
                    turn++;
            }


        }); 
 }


}

Update : I will add one more method to calculateDiceno. I think this will helps you

public class Board_Play1 extends Activity {

int d=0,a=0,b=0,turn=2;
Random random = new Random();

@Override
protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.board_play1);
        EditText diceno = (EditText) findViewById(R.id.editText1);
        EditText p1 = (EditText) findViewById(R.id.editText2);
        EditText p2 = (EditText) findViewById(R.id.editText3);

        diceno.setText(String.valueOf(d));  
        p1.setText(String.valueOf(a));
        p2.setText(String.valueOf(b));
        EditText diceno = (EditText) findViewById(R.id.editText1);
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View view) {
                        // This is user Turn
                        d=random.nextInt(6)+1;
                        diceno.setText(String.valueOf(d));
                        calculateDiceno();

                        //This is Application Trun. You may add some delay with progress bar

                        d=random.nextInt(6)+1;
                        diceno.setText(String.valueOf(d));
                        calculateDiceno();


                    }

        }); 


 }

    private void calculateDiceno(){
           if(turn%2==0)
                a+=d;
            else
                b+=d;

        if(a>100)
            a-=d;
        if(b>100)
            b-=d;


            p1.setText(String.valueOf(a));
            p2.setText(String.valueOf(b));
            turn++;
        }


}

Update 2: Don't use sleep(). Use Handler for some delay.

//This is Application Trun. You may add some delay with progress bar
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
          //This will execute after 3 sec
          d=random.nextInt(6)+1;
      diceno.setText(String.valueOf(d));
      calculateDiceno();
    }
}, 3000);  // 3000 means set 3 sec delay. 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top