Andrew Chang
Andrew Chang

Reputation: 1

How can I make the random number change after user got the right number?

How can I make the random number change after user got the right number? I tried while, but it seems that if I use while, the number is always true so it's going to make an infinite loop

    final TextView randomnumber = (TextView) findViewById(R.id.randomTextView);
    final EditText number = (EditText) findViewById(R.id.editText2);
    final EditText number2 = (EditText) findViewById(R.id.editText);
    final EditText yourchoose = (EditText) findViewById(R.id.choose);
    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int a = Integer.parseInt(number.getText().toString());
            int b = Integer.parseInt(number2.getText().toString());
            int d = (int) (Math.random() * (a - b) + b);
            int c = Integer.parseInt(yourchoose.getText().toString());
            if(d > c) {
                randomnumber.setText("Choose Bigger");
            } else if (d < c) {
                randomnumber.setText("Choose Smaller");
            } else {
                randomnumber.setText("You're Right, The number is " + d);
            }
        }
    });

Upvotes: 0

Views: 98

Answers (2)

Neerajlal K
Neerajlal K

Reputation: 6828

Generate a random number outside onClick. Remove the while loop from the onClick. See the code below,

final TextView randomnumber = (TextView) findViewById(R.id.randomTextView);
final EditText number = (EditText) findViewById(R.id.editText2);
final EditText number2 = (EditText) findViewById(R.id.editText);
final EditText yourchoose = (EditText) findViewById(R.id.choose);

Random rand = new Random();
final int randomNumber = rand.nextInt();

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        int a = Integer.parseInt(number.getText().toString());
        int b = Integer.parseInt(number2.getText().toString());
        int c = Integer.parseInt(yourchoose.getText().toString());

        int random = (int) (randomNumber * (a - b) + b);
        if (random > c) {
            randomnumber.setText("Choose Bigger");
        } else if (random < c) {
            randomnumber.setText("Choose Smaller");
        } else {
            randomnumber.setText("Your're Right, Number is " + random);
        }

    }
});

EDIT

On having a look again, the random number generated should be between the following range

b < randomNumber < (a - b)

So I used a TextWatcher to listen to the chnage on the number and number2 EditText.

// Before onCreate
int a = 0, b = 0, c, random = 0;

//inside onCreate
final TextView randomnumber = (TextView) findViewById(R.id.randomTextView);
final EditText number = (EditText) findViewById(R.id.editText2);
final EditText number2 = (EditText) findViewById(R.id.editText);
final EditText yourchoose = (EditText) findViewById(R.id.choose);

final Random rand = new Random();
number.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
        a = Integer.parseInt(number.getText().toString());
        random = rand.nextInt(a - b) + b;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void onTextChanged(CharSequence s, int start, int count, int after){}
});

number2.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
        b = Integer.parseInt(number2.getText().toString());
        random = rand.nextInt(a - b) + b;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void onTextChanged(CharSequence s, int start, int count, int after){}
});

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        int c = Integer.parseInt(yourchoose.getText().toString());

        if (random > c) {
            randomnumber.setText("Choose Bigger");
        } else if (random < c) {
            randomnumber.setText("Choose Smaller");
        } else {
            randomnumber.setText("Your're Right, Number is " + random);
        }

    }
});

Upvotes: 1

Hobbit
Hobbit

Reputation: 621

Because the value of c and random is not changing in a while loop, so it goes on.

For example: if value of random is 5 and c is 3. Once it enters the loop, the values remains the same and while(random!=c) is always true, so it's not going to stop.

Upvotes: 0

Related Questions