Java 如何以正确的方式创建对象数组?
所以我刚刚开始在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){
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中使用这些变量的地方(astatic
context),都使用player[pl].Won
或您需要使用的任何变量static
变量都属于类-换句话说,它们不会在类的实例中更改。请阅读java中的static
上下文。因此:如果您希望不同的玩家有不同的回合数
,例如,回合数
不能是静态的。请阅读所有static
修饰符远离扫雷舰类。然后,所有使用这些变量的地方(astatic
上下文),改为使用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);