Получение Java для отображения правильного количества декрементов - PullRequest
0 голосов
/ 30 мая 2019

Я создаю приложение, которое представляет собой игру в угадайку от 1 до 100. Текущая версия, которую я пишу, дает игроку 7 попыток найти правильное предположение. Я создал переменную для отображения количества догадок, оставленных игроком, однако, как только игрок угадал, число догадок уменьшается более чем на одну (обычно на две).

Так что, в основном, число аргументов var. будет уменьшаться при каждом запуске метода checkGuess (). Я попытался поместить декремент в прослушиватель событий, когда игрок нажимает кнопку, но он все еще уменьшается более чем на единицу. Есть слушатель setOnClick, если игрок нажимает кнопку мыши, и другой для кнопки ввода. Когда я использую кнопку в игре, она уменьшается должным образом. Когда я использую кнопку ENTER, она уменьшается на два. Когда я нажимаю ENTER, запускается ли прослушиватель кнопок?

Я попытался изменить декремент с numberOfGuesses--; to --numberOfGuesses;

Я пытался присвоить его как numberOfGuesses = numberOfGuesses - 1;

Вот переменные, подключенные к GUI w, и метод checkGuess ()

public class MainActivity extends AppCompatActivity {
    private EditText txtGuess;
    private Button btnGuess;
    private TextView lblOutput;
    private int theNumber;
    private int numberOfTries = 7;

    public void checkGuess() {
        String guessText = txtGuess.getText().toString();//
        String message = "";
        try {
            --numberOfTries;
            int guess = Integer.parseInt(guessText);
            if (guess > theNumber)
                message = guess + " is too high. You have " +numberOfTries + " " + " tries left! ";



            else if (guess < theNumber)
                message = guess + " is too low. You have " +numberOfTries + " " + " tries left! ";


            else{
                message = guess +
                        " is correct! You finished with " +numberOfTries + " tries left. Let's play again!";
                Toast.makeText(MainActivity.this, message,
                          Toast.LENGTH_LONG).show();
                newGame();

            }
        } catch (Exception e) {
            message = "Enter a whole number between 1 and 100.";
        } finally {
            lblOutput.setText(message);
            txtGuess.requestFocus();
            txtGuess.selectAll();

Метод newGame (), который генерирует новое случайное число

 public void newGame(){

        theNumber = (int)(Math.random() * 100 + 1);
        numberOfTries = 7;

    }

Вот метод, который запускается при выполнении приложения

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtGuess = (EditText) findViewById(R.id.txtGuess);
        btnGuess = (Button) findViewById(R.id.btnGuess);
        lblOutput = (TextView) findViewById(R.id.lblOutput);
        newGame();
        btnGuess.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkGuess();
            }
        });
        txtGuess.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
               checkGuess();
               return true;
            }
        });
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

       FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

Я ожидаю, что числоOfGuesses уменьшится с 7 до 6, но фактический вывод уменьшается с 7 до 5, когда я использую ввод, он работает так, как я хочу для нажатия кнопки (или, по крайней мере, отображается как 7 до 5)

1 Ответ

0 голосов
/ 30 мая 2019

Нажатие ввода, когда текстовое поле выделено, вызовет OnEditorActionListener (и так же, как я могу сказать, любые другие изменения).Вы пробовали отфильтровать этот Listener по actionId, чтобы убедиться, что он отключается только для клавиши ввода?

...