Я делаю игру в угадывание чисел в приложении для Android. У вас есть три попытки угадать число. Если у вас закончились испытания, то вы проиграли.
Я добавил цикл for, чтобы каждый раз, когда пользователь вводит данные, он добавлял еще один. Но когда я запускаю приложение и ввожу числа более трех раз, оно не показывает сообщение «У вас больше нет попыток», как будто оно не считает попытки.
Я попытался изменить for на кнопку перезагрузки, а затем каждый раз, когда я нажимаю кнопку перезагрузки, добавляется еще одна. Но это тоже не сработало.
Мой текущий код:
public class MainActivity extends AppCompatActivity {
private int trials;
private int maxTrials = 3;
private TextView s_title, t_rules, strt_title, t_introgss;
private Button btn_start;
private EditText num_input;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num_input = findViewById(R.id.num_input);
btn_start = findViewById(R.id.btn_start);
s_title = findViewById(R.id.s_title);
t_rules = findViewById(R.id.t_rules);
strt_title = findViewById(R.id.strt_title);
t_introgss = findViewById(R.id.t_introgss);
btn_start.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View arg0){
s_title.setVisibility(View.INVISIBLE);
t_rules.setVisibility(View.INVISIBLE);
btn_start.setVisibility(View.INVISIBLE);
strt_title.setVisibility(View.VISIBLE);
t_introgss.setVisibility(View.VISIBLE);
num_input.setVisibility(View.VISIBLE);
}
});
num_input.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int guessNum = Integer.parseInt(num_input.getText().toString());
int number = 1 + (int) (30 * Math.random());
for (trials = 0; trials < maxTrials; trials++) {
if (guessNum == number) {
Toast.makeText(MainActivity.this, "You won!", Toast.LENGTH_SHORT).show();
} else if (guessNum < number && trials != maxTrials - 1) {
Toast.makeText(MainActivity.this, "The number is bigger", Toast.LENGTH_SHORT).show();
} else if (guessNum > number && trials != maxTrials - 1) {
Toast.makeText(MainActivity.this, "The number is smaller", Toast.LENGTH_SHORT).show();
}
if (trials == maxTrials) {
Toast.makeText(MainActivity.this, "You dont have more tries", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, "The number was " + number, Toast.LENGTH_SHORT).show();
break;
}
}
}
});
}
}
Я думаю, что это не считает испытания, потому что генерирует случайное число каждый раз, когда пользователь вводит предположение. Я попытался ввести 17, и он показывает сообщение, что «значение больше», и я ввожу 18 и показывает сообщение, что «значение меньше». Как будто не сохраняет случайное число.




trials никогда не будет == до maxTrials. В цикле for вы начинаете с trials = 0 и останавливаете цикл, когда trials < maxTrials. Вместо этого критерии следует изменить на trials == maxTrials-1. Кроме того, вам не нужно break, так как это должно обрабатываться циклом for
You do not have to break as that should be handled by the for loop -- @mkjh
Это уже является причиной того, что цикл for заканчивается, поэтому размещение его позже, а не в качестве условия проверки/разрыва, будет более эффективным. Также,
Try changing it to trials <= maxTrials – @viv3k
// start at trial 1 & end when trial == the max
for (trials = 1; trials <= maxTrials; trials++)
{
...
}
// then after that loop
Toast.makeText(MainActivity.this, "You dont have more tries", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, "The number was " + number, Toast.LENGTH_SHORT).show();
Оператор break предоставляется тестовым условием trials < maxTrials в цикле for.
РЕДАКТИРОВАТЬ для дополнительной информации
once I input a number, the "the number is ..." message repeats three times, and shows that the user ran out of trials, but only one number has been input.
Я вижу, что значение вводится из цикла
public void onClick(View view)
{
int guessNum = Integer.parseInt(num_input.getText().toString());
int number = 1 + (int) (30 * Math.random());
Затем внутри цикла нет другого места, где пользователь может предположить, поэтому он каждый раз проверяет эти условия с одним и тем же номером. Чтение предположения пользователя в цикле позволит вам переназначить значение для проверки в следующем цикле (отредактирован формат в цикле while)
trials = 0;
boolean found = false;
// under 3 guesses and not found
while(++trials <= maxTrials && !found)
{
// they guessed it
if (guessNum == number)
{
they win;
found = true;
} // they didn't guess it
else
{
if (guessNum < number)
it is bigger;
else
it is smaller;
// take the next guess when it is > or <
guessNum = Integer.parseInt(num_input.getText().toString());
}
}
...
}
ПРИМЕЧАНИЕ Это не полный код
Это сработало! Но теперь, когда я ввожу число, сообщение «число ...» повторяется три раза и показывает, что у пользователя закончились испытания, но был введен только один номер.
@aurora -- я включил дополнительную информацию
Я думаю, что ваша проблема связана с условием цикла for
trials < maxTrials. Поэтому, когдаtrails == maxTrails, он даже не войдет в цикл for. Попробуйте изменить его наtrails <= maxTrails