Java 20: невозможно объявить глобальную переменную со значением «статическая».

Я пытаюсь следовать руководству YouTube по созданию игры в крестики-нолики.

Я следую инструкциям и пытаюсь создатьplayerPositionsиcomputerPositionsкак ArrayLists. Они должны быть общедоступными/глобальными/статическими, чтобы методы могли их читать. Но если я попытаюсь добавить «public», «static», «protected» и т. д. перед ArrayList, это выдаст ошибку и предложит удалить «public» и т. д.

Я думаю, что это ошибка специально для Java 17–Java 20. В других версиях этой ошибки нет.

Я указал, где объявлены списки ArrayLists и где они используются.

      package youtube.alexlee;

import java.util.*;

public class TicTacToe {
    public static void main(String[] args) {
        
        // ***** ⬇️⬇️⬇️⬇️
        ArrayList<Integer> playerPositions = new ArrayList<Integer>();
        ArrayList<Integer> computerPositions = new ArrayList<Integer>();

        char[][] gameBoard = {
                {'1', '|', '2', '|', '3' },
                {'-', '+', '-', '+', '-' },
                {'4', '|', '5', '|', '6' },
                {'-', '+', '-', '+', '-' },
                {'7', '|', '8', '|', '9' }
        };

        while (true) {
            Scanner scan = new Scanner(System.in);
            System.out.println("Enter number (1-9) to place marker.");
            int playerPos = scan.nextInt();
            System.out.println("You selected: " + playerPos);
            placePiece(gameBoard, playerPos, "player");

            Random rand = new Random();
            int compPos = rand.nextInt(9) + 1;
            placePiece(gameBoard, compPos, "computer");
            System.out.println("Computer selected: " + compPos);

            printGameBoard(gameBoard);

            String winning = checkWinner();
            System.out.println(winning);
            if (winning.equals("Congratulations, you win!") || winning.equals("Sorry! Computer wins!")){
                System.exit(0);
            }
        }
    }

    private static void placePiece(char[][] gameBoard, int pos, String user) {

        char symbol = ' ';

        if (user.equals("player")) {
            symbol = 'X';
            // ***** ⬇️⬇️⬇️⬇️
            playerPositions.add(pos);
        } else if (user.equals("computer")) {
            symbol = 'O';
            // ***** ⬇️⬇️⬇️⬇️
            computerPositions.add(pos);
        }

        switch (pos) {
            case 1 -> gameBoard[0][0] = symbol;
            case 2 -> gameBoard[0][2] = symbol;
            case 3 -> gameBoard[0][4] = symbol;
            case 4 -> gameBoard[2][0] = symbol;
            case 5 -> gameBoard[2][2] = symbol;
            case 6 -> gameBoard[2][4] = symbol;
            case 7 -> gameBoard[4][0] = symbol;
            case 8 -> gameBoard[4][2] = symbol;
            case 9 -> gameBoard[4][4] = symbol;
        }
    }

    private static void printGameBoard(char[][] gameBoard) {
        for (char[] row : gameBoard) {
            for (char c : row) {
                System.out.print(c);
            }
            System.out.println();
        }
    }

    public static String checkWinner() {
        List<Integer> topRow = Arrays.asList(1, 2, 3);
        List<Integer> middleRow = Arrays.asList(4, 5, 6);
        List<Integer> bottomRow = Arrays.asList(7, 8, 9);

        List<Integer> leftCol = Arrays.asList(1, 4, 7);
        List<Integer> middleCol = Arrays.asList(2, 5, 8);
        List<Integer> rightCol = Arrays.asList(3, 6, 9);

        List<Integer> cross1 = Arrays.asList(1, 5, 9);
        List<Integer> cross2 = Arrays.asList(7, 5, 3);

        List<List> winningConditions = new ArrayList<List>();
        winningConditions.add(topRow);
        winningConditions.add(middleRow);
        winningConditions.add(bottomRow);

        winningConditions.add(leftCol);
        winningConditions.add(middleCol);
        winningConditions.add(rightCol);

        winningConditions.add(cross1);
        winningConditions.add(cross2);

        for (List l : winningConditions){
            // ***** ⬇️⬇️⬇️⬇️
            if(playerPositions.containsAll(l)){
                return "Congratulations, you win!";
            }
            // ***** ⬇️⬇️⬇️⬇️
            else if(computerPositions.contains(l)){
                return "Sorry! Computer wins!";
            }
            // ***** ⬇️⬇️⬇️⬇️
            else if(playerPositions.size() + computerPositions.size() == 9){
                return "It's a tie!";
            }
        }

        return "";
    }
}

Я ожидал использоватьstaticкак (например)static ArrayList<Integer> playerPositions = new ArrayList<Integer>();но это приводит к ошибке. я тоже попробовалpublic staticиprotected staticсреди других комбинаций.

0 ответов

Другие вопросы по тегам