Java 如何以正确的方式创建对象数组?

Java 如何以正确的方式创建对象数组?,java,arrays,object,Java,Arrays,Object,所以我刚刚开始在Java中使用对象,我听说你可以创建一个对象数组,但是我在这方面遇到了一些问题 public class Minesweeper { static int Turns; static boolean Won; static String Name; static int Winnings; public Minesweeper(boolean won, int turns,String pName,int score){

所以我刚刚开始在Java中使用对象,我听说你可以创建一个对象数组,但是我在这方面遇到了一些问题

public class Minesweeper {

    static int Turns;
    static boolean Won;
    static String Name;
    static int Winnings;
    public Minesweeper(boolean won, int turns,String pName,int score){
        Turns=turns;
        Won=won;
        Name=pName;
        Winnings=score;

    }

    public static void main(String[] args) {

        Scanner inpt = new Scanner(System.in);
        int pl=0,again,respd;
        String ans;
        String pName;
        Minesweeper [] player= new Minesweeper[20];

        do{

        again=0;
        respd=0;

        System.out.println("What's your name?");
        pName=inpt.next();


        Won=false;
        Turns=0;    

        play(inpt);

        System.out.println("");
        System.out.println("Play Again?");

        ans = inpt.next();
        if(ans.charAt(0)=='y'||ans.charAt(0)=='Y'){
            again=1;
        }
        else{
            again=0;
        }

        player[pl]= new Minesweeper(Won,Turns,pName,Winnings);
        pl++;

        }while(again==1);

        System.out.println("Won?:\tName:\tTurns:\t:Score:");
        for(int i=0;i<pl;i++){
            System.out.println(player[i].Won+"\t"+player[i].Name+"\t"+player[i].Turns+"\t"+player[i].Winnings);
        }

    }
公共级扫雷艇{
静态整数匝数;
静态布尔元;
静态字符串名;
静态整数赢款;
公共扫雷艇(布尔赢、整数回合、字符串pName、整数分数){
匝数=匝数;
韩元=韩元;
Name=pName;
赢款=分数;
}
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int pl=0,同样,respd;
字符串ans;
字符串pName;
扫雷舰[]玩家=新扫雷舰[20];
做{
再次=0;
respd=0;
System.out.println(“你叫什么名字?”);
pName=inpt.next();
赢=假;
匝数=0;
播放(输入);
System.out.println(“”);
System.out.println(“再次播放?”);
ans=inpt.next();
如果(ans.charAt(0)='y'| | ans.charAt(0)='y'){
再次=1;
}
否则{
再次=0;
}
玩家[pl]=新扫雷舰(赢、回合、pName、赢);
pl++;
}而(同样=1);
System.out.println(“赢得?:\t名称:\t翻转:\t:Score:”;

对于(int i=0;i如果您事先不知道大小,我将使用列表而不是数组:

列出扫雷列表=新建阵列列表();

然后,您可以:

扫雷舰列表。添加(新扫雷舰(赢、回合、pName、赢);

然后:

Java中的静态值意味着程序中的所有对象只共享1个值。您编写所有扫雷器对象的方式为每个静态变量共享相同的信息。通过删除“Static”关键字将其更改为“instance”变量:


如果您事先不知道大小,我会使用列表而不是数组:

列出扫雷列表=新建阵列列表();

然后,您可以:

扫雷舰列表。添加(新扫雷舰(赢、回合、pName、赢);

然后:

Java中的静态值意味着程序中的所有对象只共享1个值。您编写所有扫雷器对象的方式为每个静态变量共享相同的信息。通过删除“Static”关键字将其更改为“instance”变量:


您打算为每个玩家存储数据的字段是
静态的
。这与它们的预期用途相矛盾

如果您有5个类实例,
static int将变为;
使该字段只存在一次。删除
static
将为每个实例提供一个单独的字段,这正是您所需要的

(顺便说一句,Java中的字段名通常以小写字母开头,因此最好使用
turns
而不是
turns

如果你转身

static int Turns;
static boolean Won;
static String Name;
static int Winnings;
进入

您将看到主循环不再工作

因此,您必须在
main()
中添加局部变量:

赢得的
回合
值必须以某种方式以干净的方式获得,以及
赢款
(可能您希望将它们作为一个单独的类
游戏结果
,由
play()
返回)

那你就可以了

    player[pl]= new Minesweeper(won,turns,pName,winnings);

(顺便说一句,名字可能应该放在第一位,但这是风格的问题。)

您打算为每个玩家存储数据的字段是静态的。这与它们的预期用途相矛盾

如果您有5个类实例,
static int将变为;
使该字段只存在一次。删除
static
将为每个实例提供一个单独的字段,这正是您所需要的

(顺便说一句,Java中的字段名通常以小写字母开头,因此最好使用
turns
而不是
turns

如果你转身

static int Turns;
static boolean Won;
static String Name;
static int Winnings;
进入

您将看到主循环不再工作

因此,您必须在
main()
中添加局部变量:

赢得的
回合
值必须以某种方式以干净的方式获得,以及
赢款
(可能您希望将它们作为一个单独的类
游戏结果
,由
play()
返回)

那你就可以了

    player[pl]= new Minesweeper(won,turns,pName,winnings);

(顺便说一句,名字也许应该放在第一位,但这是风格的问题。)

static
变量属于类-换句话说,它们不会在类的实例之间更改。请阅读java中的
static
上下文。因此:如果您希望不同的玩家有不同的
回合
,例如,
回合
不能是静态的。请将所有
static
修饰符从M中移除然后,所有在main中使用这些变量的地方(a
static
context),都使用
player[pl].Won
或您需要使用的任何变量
static
变量都属于类-换句话说,它们不会在类的实例中更改。请阅读java中的
static
上下文。因此:如果您希望不同的玩家有不同的
回合数
,例如,
回合数
不能是静态的。请阅读所有
static
修饰符远离扫雷舰类。然后,所有使用这些变量的地方(a
static
上下文),改为使用
player[pl]。Won
或任何需要使用的变量。我还解决了OP的问题“它只是重复输出最后一个玩家的分数”是由
静态
上下文引起的。我还要指出OP的问题“它只是重复输出最后一个玩家的分数”是由
静态
上下文引起的。删除它们会产生错误:“无法从静态上下文引用”这是因为您直接在静态
main
方法中使用变量。您需要从对象访问它们。因此,您需要访问扫雷器对象。如果您的对象名为
m
,您将调用
m.turns
m.getTurns
int turns = 0;
boolean won = false;
String name;
int winnings;
    player[pl]= new Minesweeper(won,turns,pName,winnings);