Partage
  • Partager sur Facebook
  • Partager sur Twitter

java:59: error: type List does not take parameters

List<Integer> minePositions = new ArrayList<>();

    16 mars 2023 à 14:30:40

    Bonjour, je suis débutant en java et j'ai cette erreur que j'arrive pas à corriger si pouvez m'aider s'il vous plait je souhaite récupérer la liste des cases minées du jeu demineur mais ça va pas voici mon code :

    package nv;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.Arrays;
    
    
    public class Demineur extends JFrame implements ActionListener,
            MouseListener {
    
        int rows = 8;
        int cols = 8;
        int numMines = 7;
        GridLayout layout = new GridLayout(rows, cols);
        boolean[] mines = new boolean[rows * cols];
        boolean[] clickable = new boolean[rows * cols];
        boolean lost = false;
        boolean won = false;
        int[] numbers = new int[rows * cols];
        JButton[] buttons = new JButton[rows * cols];
        boolean[] clickdone = new boolean[rows * cols];
        JMenuItem newGameButton = new JMenuItem("new game");
        JMenuItem difficulty = new JMenuItem("options");
        JLabel mineLabel = new JLabel("mines: " + numMines + " marked: 0");
        JPanel p = new JPanel();
    
        public Demineur() {
            p.setLayout(layout);
            setupI();
            for (int i = 0; i < (rows * cols); i++) {
                p.add(buttons[i]);
            }
            JMenuBar mb = new JMenuBar();
            JMenu m = new JMenu("file");
            newGameButton.addActionListener(this);
            m.add(newGameButton);
            difficulty.addActionListener(this);
            m.add(difficulty);
            mb.add(m);
            this.setJMenuBar(mb);
            this.add(p);
            this.add(mineLabel, BorderLayout.SOUTH);
            this.pack();
            this.setVisible(true);
        }
    
        public void fillMines() {
            int needed = numMines;
            while (needed > 0) {
                int x = (int) Math.floor(Math.random() * rows);
                int y = (int) Math.floor(Math.random() * cols);
                if (!mines[(rows * y) + x]) {
                    mines[(rows * y) + x] = true;
                    needed--;
                }
            }
    
            List<Integer> minePositions = new ArrayList<>();
                  for (int i = 0; i < mines.length; i++) {
                      if (mines[i]) {
                          minePositions.add(i);
                      }
                    }
    
        }
    
        public void fillNumbers() {
            for (int x = 0; x < rows; x++) {
                for (int y = 0; y < cols; y++) {
                    int cur = (rows * y) + x;
                    if (mines[cur]) {
                        numbers[cur] = 0;
                        continue;
                    }
                    int temp = 0;
                    boolean l = (x - 1) >= 0;
                    boolean r = (x + 1) < rows;
                    boolean u = (y - 1) >= 0;
                    boolean d = (y + 1) < cols;
                    int left = (rows * (y)) + (x - 1);
                    int right = (rows * (y)) + (x + 1);
                    int up = (rows * (y - 1)) + (x);
                    int upleft = (rows * (y - 1)) + (x - 1);
                    int upright = (rows * (y - 1)) + (x + 1);
                    int down = (rows * (y + 1)) + (x);
                    int downleft = (rows * (y + 1)) + (x - 1);
                    int downright = (rows * (y + 1)) + (x + 1);
                    if (u) {
                        if (mines[up]) {
                            temp++;
                        }
                        if (l) {
                            if (mines[upleft]) {
                                temp++;
                            }
                        }
                        if (r) {
                            if (mines[upright]) {
                                temp++;
                            }
                        }
                    }
                    if (d) {
                        if (mines[down]) {
                            temp++;
                        }
                        if (l) {
                            if (mines[downleft]) {
                                temp++;
                            }
                        }
                        if (r) {
                            if (mines[downright]) {
                                temp++;
                            }
                        }
                    }
                    if (l) {
                        if (mines[left]) {
                            temp++;
                        }
                    }
                    if (r) {
                        if (mines[right]) {
                            temp++;
                        }
                    }
                    numbers[cur] = temp;
                }
            }
        }
    
        public void setupI() {
            for (int x = 0; x < rows; x++) {
                for (int y = 0; y < cols; y++) {
                    mines[(rows * y) + x] = false;
                    clickdone[(rows * y) + x] = false;
                    clickable[(rows * y) + x] = true;
                    buttons[(rows * y) + x] = new JButton( /*"" + ( x * y )*/);
                    buttons[(rows * y) + x].setPreferredSize(new Dimension(
                            45, 45));
                    buttons[(rows * y) + x].addActionListener(this);
                    buttons[(rows * y) + x].addMouseListener(this);
                }
            }
            fillMines();
            fillNumbers();
        }
    
        public void setupI2() {
            this.remove(p);
            p = new JPanel();
            layout = new GridLayout(rows, cols);
            p.setLayout(layout);
            buttons = new JButton[rows * cols];
            mines = new boolean[rows * cols];
            clickdone = new boolean[rows * cols];
            clickable = new boolean[rows * cols];
            numbers = new int[rows * cols];
            setupI();
            for (int i = 0; i < (rows * cols); i++) {
                p.add(buttons[i]);
            }
            this.add(p);
            this.pack();
            fillMines();
            fillNumbers();
        }
    
        public void setup() {
            for (int x = 0; x < rows; x++) {
                for (int y = 0; y < cols; y++) {
                    mines[(rows * y) + x] = false;
                    clickdone[(rows * y) + x] = false;
                    clickable[(rows * y) + x] = true;
                    buttons[(rows * y) + x].setEnabled(true);
                    buttons[(rows * y) + x].setText("");
                }
            }
            fillMines();
            fillNumbers();
            lost = false;
            mineLabel.setText("mines: " + numMines + " marked: 0");
        }
    
    
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == difficulty) {
                rows = Integer.parseInt((String) JOptionPane.showInputDialog(
                        this, "Rows", "Rows", JOptionPane.PLAIN_MESSAGE, null,
                        null, 10));
                cols = Integer.parseInt((String) JOptionPane.showInputDialog(
                        this, "Columns", "Columns", JOptionPane.PLAIN_MESSAGE,
                        null, null, 10));
                numMines = Integer.parseInt((String) JOptionPane.showInputDialog(this, "Mines", "Mines",
                        JOptionPane.PLAIN_MESSAGE, null, null, 10));
                setupI2();
            }
            if (!won) {
                for (int x = 0; x < rows; x++) {
                    for (int y = 0; y < cols; y++) {
                        if (e.getSource() == buttons[(rows * y) + x]
                                && !won && clickable[(rows * y) + x]) {
                            doCheck(x, y);
                            break;
                        }
                    }
                }
            }
            if (e.getSource() == newGameButton) {
                setup();
                won = false;
                return;
    
            }
            siGagner();
        }
    
        public void mousePressed(MouseEvent e) {
            if (e.getButton() == 3) {
                int n = 0;
                for (int x = 0; x < rows; x++) {
                    for (int y = 0; y < cols; y++) {
                        if (e.getSource() == buttons[(rows * y) + x]) {
                            clickable[(rows * y) + x] = !clickable[(rows * y)
                                    + x];
                        }
                        if (!clickdone[(rows * y) + x]) {
                            if (!clickable[(rows * y) + x]) {
                                buttons[(rows * y) + x].setText("X");
                                n++;
                            } else {
                                buttons[(rows * y) + x].setText("");
                            }
                            mineLabel.setText("mines: " + numMines + " marked: "
                                    + n);
                        }
                    }
                }
            }
        }
        public void mouseEntered(MouseEvent e) {
        }
    
        public void mouseExited(MouseEvent e) {
        }
    
        public void doCheck(int x, int y) {
            int cur = (rows * y) + x;
            boolean l = (x - 1) >= 0;
            boolean r = (x + 1) < rows;
            boolean u = (y - 1) >= 0;
            boolean d = (y + 1) < cols;
            int left = (rows * (y)) + (x - 1);
            int right = (rows * (y)) + (x + 1);
            int up = (rows * (y - 1)) + (x);
            int upleft = (rows * (y - 1)) + (x - 1);
            int upright = (rows * (y - 1)) + (x + 1);
            int down = (rows * (y + 1)) + (x);
            int downleft = (rows * (y + 1)) + (x - 1);
            int downright = (rows * (y + 1)) + (x + 1);
    
            clickdone[cur] = true;
            buttons[cur].setEnabled(false);
            if (numbers[cur] == 0 && !mines[cur] && !lost && !won) {
                if (u && !won) {
                    if (!clickdone[up] && !mines[up]) {
                        clickdone[up] = true;
                        buttons[up].doClick();
                    }
                    if (l && !won) {
                        if (!clickdone[upleft] && numbers[upleft] != 0
                                && !mines[upleft]) {
                            clickdone[upleft] = true;
                            buttons[upleft].doClick();
                        }
                    }
                    if (r && !won) {
                        if (!clickdone[upright] && numbers[upright] != 0
                                && !mines[upright]) {
                            clickdone[upright] = true;
                            buttons[upright].doClick();
                        }
                    }
                }
                if (d && !won) {
                    if (!clickdone[down] && !mines[down]) {
                        clickdone[down] = true;
                        buttons[down].doClick();
                    }
                    if (l && !won) {
                        if (!clickdone[downleft] && numbers[downleft] != 0
                                && !mines[downleft]) {
                            clickdone[downleft] = true;
                            buttons[downleft].doClick();
                        }
                    }
                    if (r && !won) {
                        if (!clickdone[downright]
                                && numbers[downright] != 0
                                && !mines[downright]) {
                            clickdone[downright] = true;
                            buttons[downright].doClick();
                        }
                    }
                }
                if (l && !won) {
                    if (!clickdone[left] && !mines[left]) {
                        clickdone[left] = true;
                        buttons[left].doClick();
                    }
                }
                if (r && !won) {
                    if (!clickdone[right] && !mines[right]) {
                        clickdone[right] = true;
                        buttons[right].doClick();
                    }
                }
            } else {
                buttons[cur].setText("" + numbers[cur]);
                if (!mines[cur] && numbers[cur] == 0) {
                    buttons[cur].setText("");
                }
            }
            if (mines[cur] && !won) {
                buttons[cur].setText("0");
                doLose();
            }
        }
    
        public void gagner() {
            if (!lost && !won) {
                won = true;
                JOptionPane.showMessageDialog(null,
                        "you win!nstarting a new game", "you lose",
                        JOptionPane.INFORMATION_MESSAGE);
                newGameButton.doClick();
            }
        }
    
        public void siGagner() {
            for (int x = 0; x < rows; x++) {
                for (int y = 0; y < cols; y++) {
                    int cur = (rows * y) + x;
                    if (!clickdone[cur]) {
                        if (mines[cur]) {
                            continue;
                        } else {
                            return;
                        }
                    }
                }
            }
    
            gagner();
        }
    
        public void mouseReleased(MouseEvent e) {
        }
    
        public void mouseClicked(MouseEvent e) {
        }
    
    
        public void doLose() {
            if (!lost && !won) {
                lost = true;
                for (int i = 0; i < rows * cols; i++) {
                    if (!clickdone[i]) {
                        buttons[i].doClick(0);
                    }
                }
                JOptionPane.showMessageDialog(null,
                        "you lose!nstarting a new game", "you lose",
                        JOptionPane.ERROR_MESSAGE);
                setup();
            }
            System.out.println(Arrays.toString(mines));
        }
    }
    

    Et le main
    package nv;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.Arrays;
    
    public class Main{
    
    public static void main(String[] args) {
        new Demineur();
      }
    }
    
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      16 mars 2023 à 20:34:50

      A vue de nez je dirais un conflit d'import sur List, ne jamais utiliser les import xxx.*
      • Partager sur Facebook
      • Partager sur Twitter
        17 mars 2023 à 14:02:50

        Une version de java sans genericité ? (Avant java 5)

        PS: pourquoi galérer avec la linéarisation des indices, alors qu'on peut très bien utiliser de tableaux 2D ?

        	int[][] t = new int[10][10];

        Vu que de toutes façons, le code fait des boucles sur 2 indices :

         for (int x = 0; x < rows; x++) {        // ligne 172
                    for (int y = 0; y < cols; y++) {
               

        PS2 : autre galère utiliser les noms x et y pour des indices de lignes et colonne

        • d'une part pas de chance c'est le mauvais choix : d'habitude le numéros de colonnes correspondent aux abscisses (les x) et les lignes aux y
        • d'autre part ça embrouille ; c'est beaucoup moins fatigant d'employer r pour les rows et c pour les cols, comme ça on n'a pas à réfléchir sur qui est qui.
         
        for (int r = 0; r < rows; r++) {       
                    for (int c = 0; c < cols; c++) {



        -
        Edité par michelbillaud 22 mars 2023 à 10:20:01

        • Partager sur Facebook
        • Partager sur Twitter
          21 mars 2023 à 23:34:44

          Bonjour, merci a vous tous pour vos réponses, j'ai pu corriger mais jusqu'à présent, je n'arrive pas à faire la déduction des cases minées si vous pouvez me donner des pistes s'il vous plait.
          • Partager sur Facebook
          • Partager sur Twitter
            22 mars 2023 à 0:13:12

            Corrigé comment ? Quelle était la cause  du problème ?

            (On essaie d'aider alors ça serait sympa de faire un retour)

            • Partager sur Facebook
            • Partager sur Twitter

            java:59: error: type List does not take parameters

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown