Java 在对象内创建对象

Java creating Objects inside an Object

提问人:Paradox 提问时间:10/22/2023 更新时间:10/23/2023 访问量:62

问:

我对 Java 很陌生,我想自己编写国际象棋。已经为此创建了一个领域、玩家和棋子类,只有棋子、玩家和主类对此很重要。所以基本上我想在 Player 的对象中创建一个 Piece 对象。试过了,没有用:,)

基本上,我为 Piece 和 Player 定义了构造函数方法。使用 Main,我创建了对象 Player 1 和 2。然后我想尝试是否可以使用创建 Piece 对象的方法在 Player 类/对象中创建一个 Piece 对象。利用这一点,我想直接将棋子分配给玩家。在这种情况下,这里只有一个棋子。 顺便说一句,我只从文件中粘贴了最重要的东西,而不是与字段或 smth 相关的内容。

class Player {
    public int id, piecesleft, l1, l2;
    public String name;
    
    public Player(int idin, int plin, String namein) {
        id = idin;
        piecesleft = plin;
        name = namein;
        if (id == 1) {
            l1 = 7;
            l2 = 6;
        } else {
            l1 = 0;
            l2 = 1;
        }
    };

    public void piecegen() {
        Piece pawnA = new Piece('p', true, l2, 0);
    };
};

class Piece {
    public char type;
    public boolean status;
    public int pos1, pos2;
    
    public Piece(char typein, boolean statusin, int pos1in, int pos2in) {
        type = typein;
        status = statusin;
        pos1 = pos1in;
        pos2 = pos2in;
    };
};

public class Main {
    public static void main (String[] args) {
        Scanner scan = new Scanner(System.in);
        
        System.out.print("\nSpieler 1 - Name:  ");
        String name1 = scan.nextLine();
        Player p1 = new Player(1, 16, name1);
        
        System.out.print("Spieler 2 - Name:  ");
        String name2 = scan.nextLine();
        Player p2 = new Player(2, 16, name2);
        
        p1.piecegen();
        p2.piecegen();
        System.out.println(p1.pawnA.type);
    };
};

基本上告诉我“pawnA无法解析或不是字段”:,)

Java 对象

评论

4赞 user207421 10/22/2023
错误消息非常清楚。 不是 的字段。方法中有一个具有该名称的局部变量,但没有此类字段。pawnAPlayerpiecegen()
0赞 user207421 10/22/2023
如果查看 Player,则没有字段。函数或其他任何地方的变量都与它无关。 不存在。就这么简单。@HeathMorganpawnAmain()p1.pawnA
0赞 user207421 10/22/2023
@HeathMorgan 而且我没有说函数中没有“没有命名变量”。不要错误地引用我的话。你只是混淆了这个问题。没有必要重新解释已经明确说明的内容。您的评论都具有误导性,应删除。pawnAmain
0赞 Paradox 10/22/2023
那么,我现在该怎么做呢?那么我如何创建 pawnA 作为 Player 的某种对象,以便我可以像“p1.pawnA.type”一样与这些棋子进行交互?我的第一个想法是为 piecegen 函数中的每个 Piece 定义 type、posx 等的公共变量......这有意义吗?:,)
1赞 user207421 10/22/2023
与您声明的方式相同。id, piecesLeft, l1, l2, name

答:

0赞 Paradox 10/23/2023 #1

是的,我现在正在回答我自己的问题,因为我找到了解决方案。也许它会帮助其他一些新手:) 就像我说的,我想做的是在对象内部创建对象。意识到这并不能真正奏效,我尝试了其他方法并找到了解决方案。在这种情况下,我想创建棋子并直接将它们与玩家联系起来。我只是不得不想一点不同。发现,我可以在 Player 类中为 Pieces 类创建一个对象数组:

public Piece piece[] = new Piece[16];

这就是我在 Player 类的开头粘贴的内容,使数组成为播放器的一部分。public 之后的“Piece”只是声明数组的类型。它基本上告诉程序这是来自“Piece”类的对象数组。 “piece[]” 是数组的名称。通过“new Piece[16]”,我们告诉程序 Array 中可以有多少个 “Piece.最后,我只是在 player 类中编辑了我的“piecegen()”方法,以将数组内特定位置的值设置为具有我想要的参数的 piece 对象。方法示例:

this.piece[0] = new Piece('p', true, l2, 0);

现在,我可以通过访问数组和数组内的点来访问 main 方法中的对象,并添加“.type”矿石,就像任何普通对象一样。我的 Main 方法的示例:

System.out.println("| Type: " + p1.piece[0].type);

这将输出“p”,因为它是一个棋子:) 感谢您的评论,如果此答案中的任何内容有误,请纠正我。最后,我仍然不是专家;)