JAVA. счетчик попыток

198
16 июня 2022, 02:00

недавно начал изучать java. Задание: сделать игру, в которой пользователю нужно угадать цифру от 0 до 100 + в конце сделать счетчик попыток. Все сделал, только не понимаю почему счетчик постоянно в конце показывает 0.

Первый класс

import com.sun.javaws.exceptions.ExitException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
public class GUI extends Random0100 {
    JFrame frame = new JFrame("6 sapkis");
    JPanel panel = new JPanel();
    JLabel label = new JLabel("Угадайте число от 0 до 100:");
    JLabel answer = new JLabel("");
    JButton button = new JButton("Отправить");
    JTextField pole = new JTextField("",5);
    GUI() {
        URL iconURL = getClass().getResource("question.png");
        ImageIcon icon = new ImageIcon(iconURL);
        frame.setIconImage(icon.getImage());
        panel.add(label);
        panel.add(pole);
        panel.add(button);
        panel.add(answer);
        frame.add(panel);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int need = Integer.parseInt(pole.getText());
                counter++;
                if (need == guess) {
                    frame.setVisible(false);
                    Win open = new Win();
                } else {
                    answer.setText("Пробуйте еще");
                }
            }
        });
        answer.setForeground(Color.red);
        frame.setResizable(false);
        frame.setSize(230,150);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
class Random0100 {
    int guess = (int)(Math.random()*100);
    int counter;
    Random0100(){
        System.out.println("Подсказка: "+guess);
    }
}

И второй класс

public class Win extends GUI {
    JFrame frame = new JFrame("Победа!");
    JPanel panel = new JPanel();
    JLabel text = new JLabel("Вы угадали число!");
    JLabel text2 = new JLabel("Кол-во попыток: "+counter);
    Win() {
        URL iconURL = getClass().getResource("question.png");
        ImageIcon icon = new ImageIcon(iconURL);
        frame.setIconImage(icon.getImage());
        panel.add(text);
        panel.add(text2);
        frame.add(panel);

        frame.setResizable(false);
        frame.setSize(250,200);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
Answer 1

При победе вы делаете new Win(), т.е., новый объект и все поля, включая унаследованное counter, инициализируются дефолтными значениями, если это не указано иначе. Самое простое решение - сделать counter статическим

READ ALSO
Проблема с рукописным текстом CSS

Проблема с рукописным текстом CSS

При комбинации свойств для текста:

346
Как задать разные фоны с помощью CSS?

Как задать разные фоны с помощью CSS?

На макете видно эллипс слева и прямоугольник справаТак вот вопрос: как задать два бэкграунда через CSS, чтобы всё хорошо работало?

390
Обращение к первому элементу строки display: grid;

Обращение к первому элементу строки display: grid;

Есть у меня такой HTML: Сейчас там расположена 1 строка на 13 элементов, таких строк будет 6

281
Как отодвинуть вертикальные ссылки, так как на скрине ниже?

Как отодвинуть вертикальные ссылки, так как на скрине ниже?

Мне нужно понять, как перенести текст с помощью css в нужное месторасположение

377