【问题标题】:Use List class in Java在 Java 中使用 List 类
【发布时间】:2022-01-25 08:28:32
【问题描述】:

我想制作井字游戏。我使用List 类来确定获胜者。我在几种方法中使用List。如何在 main 方法中创建这个类,以便以后可以使用List 其他方法?

我已附上我的代码,以便您理解我的问题。

public class Main {

    public static void main(String[] args) {
        List<Integer> playerPositions = new ArrayList<>(); //создадим список для определения победителя
        List<Integer> CPUpositions = new ArrayList<>();

        //создать двумерный массив для отрисовки игры
        char[][] gameBoard = new char[][] {
            { ' ', '|', ' ', '|', ' '},
            { '-', '+', '-', '+', '-'},
            { ' ', '|', ' ', '|', ' '},
            { '-', '+', '-', '+', '-'},
            { ' ', '|', ' ', '|', ' '}
        };
        // printGameBoard(gameBoard);
    }

    public static String checkWinner() {
        List toprow = Arrays.asList(1, 2, 3);
        List midrow = Arrays.asList(4, 5, 6);
        List botrow = Arrays.asList(7, 8, 9);
        List col1 = Arrays.asList(1, 4, 7);
        List col2 = Arrays.asList(2, 5, 8);
        List col3 = Arrays.asList(3, 6, 9);
        List cross1 = Arrays.asList(1, 5, 9);
        List cross2 = Arrays.asList(3, 5, 7);
        return "";
    }
}

【问题讨论】:

  • 如果你想在多个方法中使用 List,你应该将它声明为 Main 类的静态成员
  • 警告:您正在使用 原始类型List 采用 类型参数,但您已提供在您的 checkWinner() 方法中没有。您应该将所有出现的List 替换为List&lt;Integer&gt;

标签: java arrays list game-engine


【解决方案1】:

您在 main 方法中创建 ArrayList。因此,您不能在 main 方法之外访问这些变量。 您应该像这样将它们声明为私有类变量:

public class Main {

    List<Integer> playerPositions = new ArrayList<>();
    List<Integer> CPUpositions = new ArrayList<>();

    public static void main(String[] args) {
        // Do sth with playerPositions and CPUpositions
    }

【讨论】:

  • 请注意,为了使用这两个字段,OP 必须创建一个Main 的实例。
  • @MCEmperor 如果他想使用其他类中的字段,那是真的。刚才提到的问题是在几种方法中使用字段。我认为他的意思是同一个类中的方法。
【解决方案2】:

有多种方法可以解决这个问题:

a) 将 playerPositions 和 CPUpositions 创建为静态类变量 - 基本上是用户 dcnis 所说的,除了您需要添加“static”关键字才能在不实例化“Main”对象的情况下使用它们:

public class Main {

static List<Integer> playerPositions = new ArrayList<>();
static List<Integer> CPUpositions = new ArrayList<>();

public static void main(String[] args) {
    // Do sth with playerPositions and CPUpositions
}

或者,您可以将列表作为参数传递给您的函数:

public static void main(String[] args){
    List<Integer> playerPositions = new ArrayList<>();
    List<Integer> CPUPositions = new ArrayList<>();
    checkWinner(playerPositions, CPUPositions);
}
public static void checkWinner(List<Integer> playerPositions, List<Integer> CPUPositions){
    //do cool stuff with those lists
}

【讨论】:

    【解决方案3】:

    创建一个静态的List列表,里面有topRow、botRow等

    List<List> winningList;
    

    并检查 playerPositions 是否包含 WinningList 中的任何 List 或 CPUpositions 是否包含 WinningList 的任何列表部分。

    名单上谁赢了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      相关资源
      最近更新 更多