【问题标题】:Java: How do I call the array from different class, and I do I modify them?Java:如何从不同的类中调用数组,并修改它们?
【发布时间】:2021-08-03 11:51:19
【问题描述】:

我是Java编程的初学者,我正在尝试制作一个2人棋盘游戏,玩家根据骰子的结果(1~6)在棋盘上移动。

空白数组用于显示玩家的位置。 blank[i][0] 是第一个玩家在棋盘上的位置,blank[i][1] 显示第二个玩家的位置。

我在class Blank{} 中创建了数组,并希望在class Player{} 的函数中使用它。这是class Blank{}的代码和class Player{}的一部分代码

class Blank {
    
    Blank() {
        String[][] blank = new String[12][2];
        for (int i = 0; i < 12; i++) {
            for (int j = 0; j <2; j++)
                blank[i][j] = " ";  }
    }
}
class Player {
    
    int player1, player2;
    
    Blank blank = new Blank();
    
    Player() {
        player1 = 1;
        player2 = 2;}
    
    void readyPlayers() {
        blank[0][0] = player1;
        blank[0][1] = player2;}

    int getPlayer1() {
        int i = 0;
        for ( i = 0; i < 10; i++) {
            if (blank[i][0] == "1")
                break;}
        return i;}

   void setPlayer1(int p1Loc) {
        for(int i = 0; i < 10; i++)
            blank[i][0] = " ";
        blank[p1Loc][0] = player1;}

   void movePlayer1(int dice1) {
        int p1Loc = getPlayer1();
        for(int i = 0; i < dice1; i++) {
            p1Loc += 1;
            if (p1Loc == 10)
                p1Loc = 0;}
        
        setPlayer1(p1Loc);}

我认为class Player{} 中的函数可以工作,因为Blank blank = new Blank() 行,但是每个blank[][] 数组中都有这个数组。

错误:The type of the expression must be an array type but it resolved to Blank

【问题讨论】:

  • 变量blank 不是数组类型,因此会出现编译器错误。代码处于我无法推荐任何修复的状态(我什至无法完全推断出程序应该做什么)。我建议阅读有关 Java 和 OOP 的教程,例如this one by Oracle.
  • "我根据您给我的建议更改了我的代码。" 不要那样做,这是一个问答网站而不是论坛,通过更改您的问题,您会使其他答案变得过时和荒谬
  • 不知道这个..我的错

标签: java arrays function class instance


【解决方案1】:

Blank blank = new Blank(); 是一个类实例化,不能像您所说的那样使用blank[0][0] = player1;。变量blank 只能用于调用您的类Blank 的方法,例如假设您的Blank 类有一个方法exampleMethod()

public class Blank {

    Blank() {
        String[][] blank = new String[12][2];
        for (int i = 0; i < 12; i++) {
            for (int j = 0; j <2; j++)
                blank[i][j] = " ";  }
    }

    public void exampleMethod(){
        //write your code here
    }
}

这就是您从Player 类中的方法调用它的方式

public class Player {
    int player1, player2;

    Blank blank = new Blank();

    Player() {
        player1 = 1;
        player2 = 2;}

    void readyPlayers() {
        blank[0][0] = player1; //instead of these
        blank[0][1] = player2; ////instead of these

        blank.exampleMethod(); // This is how to use the instantiated blank class. 
    }
}

所以我建议你重构你的代码。

【讨论】:

  • 我稍微改变了我的代码。你觉得这行得通吗?
  • @ICIS 不要那样做,因为你的问题已经过时了
【解决方案2】:

首先,您在 Blank 构造函数中创建了一个局部变量,但是当您从那里退出时,空白变量将不再可用。

其次,在函数中,您尝试将 int 写入 String,但您以错误的方式操作。阅读此处Convert int to String 了解更多详情。

【讨论】:

    【解决方案3】:

    这不是一个很好的描述。你应该修复它。我还是会尽力帮忙的。 如果您想记录他们在棋盘上的位置,只需使用一个数组 arr[2] 或两个不同的变量。另外我认为您不需要使用字符串数组。在 getPlayer1 中,您不需要放置 break。 return 会自动中断它。

    【讨论】:

      猜你喜欢
      • 2019-11-29
      • 2023-01-05
      • 1970-01-01
      • 2012-07-25
      • 2015-05-17
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多