@Makaron3000

Почему не работает так как надо вывод попыток?

Суть следующая:Для выполнения этой задачи вам нужно создать новую переменную (например, numberOfTries), в которой будет храниться число попыток пользователя. После успешного завершения метода checkGuess() число попыток пользователя должно увеличиваться на единицу, а после того, как число угадано, отображаться на экране.
Но как результат показывает всегда что пользователь угадал с 1 попытки, хотя на самом деле их там 2,3,5,7. Подскажите что не так?
import javax.swing.JFrame;
import java.awt.Window.Type;
import javax.swing.JLabel;

import java.awt.Dimension;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class GuesstingGame extends JFrame {
	private JTextField txtGuess;
	private JLabel lblOutput;
	private int theNumber;
	private JButton btnPlayAgain;
	
	public void checkGuess() { //Method 
		String guessText = txtGuess.getText();
		String message = "";
		int numberOfTries = 0;
		
		numberOfTries = numberOfTries + 1;
		
				
		try {//обработка ошибок, таких как ввод букв
			int guess = Integer.parseInt(guessText);
					
			if (guess < theNumber)
				message = guess + " is too low. Try again.";
			else if (guess > theNumber)
				message = guess + " is too high. Try again.";
			else {
				message = guess + " is correct. You win!.";
				message += " You win after " + numberOfTries + " tries.";
		        btnPlayAgain.setVisible(true);//Who the button play again
		   }
		} catch (Exception e) {//body of try-catch-finally
			message = "Enter a whole number between 1 and 100.";
		} finally {
			lblOutput.setText(message);
			txtGuess.requestFocus();
			txtGuess.selectAll();
			
	    }
		
		
	
	}
	
	
	public void newGame() {  //Own method
		theNumber = (int)(Math.random() * 100 + 1);
		lblOutput.setText(""); // Скрываем текст о выигрыше
	    txtGuess.setText(""); // Скрываем ввод
	    btnPlayAgain.setVisible(false); // Скрываем кнопку
	}
	
	public GuesstingGame() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Ваше имя Hi-Lo Guessting Game");
		getContentPane().setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Ваше Имя Hi-Lo Guessing Game");
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 15));
		lblNewLabel.setBounds(0, 0, 434, 21);
		getContentPane().add(lblNewLabel);
		
		JLabel lblNewLabel_1 = new JLabel("Guess a number between 1 and 100:");
		lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_1.setBounds(36, 45, 247, 21);
		getContentPane().add(lblNewLabel_1);
		
		txtGuess = new JTextField();
		txtGuess.setHorizontalAlignment(SwingConstants.RIGHT);
		txtGuess.setBounds(293, 47, 65, 19);
		getContentPane().add(txtGuess);
		txtGuess.setColumns(10);
		
		JButton btnGuess = new JButton("Guess!");
		btnGuess.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				checkGuess();
			}
		});
		
		txtGuess.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			checkGuess();
			}
		});
		
		btnGuess.setFont(new Font("Tahoma", Font.BOLD, 13));
		btnGuess.setBounds(168, 111, 98, 36);
		getContentPane().add(btnGuess);
		
		lblOutput = new JLabel("Enter a number above and click Guess!");
		lblOutput.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblOutput.setHorizontalAlignment(SwingConstants.CENTER);
		lblOutput.setBounds(0, 171, 434, 21);
		getContentPane().add(lblOutput);
		
		btnPlayAgain = new JButton("Play Again?");
		btnPlayAgain.setVisible(false);
		btnPlayAgain.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnPlayAgain.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				newGame();
				//btnPlayAgain.setVisible(false);
			}
		});
		
		btnPlayAgain.setBounds(168, 203, 98, 36);
		getContentPane().add(btnPlayAgain);
	}

	public static void main(String[] args) {
		GuesstingGame theGame = new GuesstingGame();
		
		theGame.newGame();
		
		//Ключевые слова new Dimension() в круглых скобках метода
		//setSize() сообщают компилятору Java о создании объекта типа
		//Dimension с шириной 450 пикселей и высотой 300 пикселей
		theGame.setSize(new Dimension(450, 300));
		
		//Наконец, добавьте в метод main() следующую строку, чтобы
		//приложение появилось на экране:
		theGame.setVisible(true);
		
	}
}
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 1
LaRN
@LaRN
Senior Developer
Переменная numberOfTries локальная, объявлена в процедуре checkGuess(), поэтому при каждой попытке счёт начинается с 0 и предыдущие попытки не учитываются.
Для вашей задачи можно добавить классу GuesstingGame поле, отвечающее за текущее количество попыток. При старте каждой новой сессии игры это поле нужно обнулять, а в процессе игры увеличивать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы