Reputation: 1
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
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
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