因此,我刚刚开始在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);
}
}
它只是重复输出最后一个玩家的分数(由于循环),我希望它打印出所有玩过该游戏的玩家。
我需要更改哪些行
整个代码
https://pastebin.com/hX1kEYcQ
最佳答案
您打算为每个播放器存储数据的字段是static
。这与它们的预期用途相矛盾。
如果您有5个类的实例,则static int Turns;
会使该字段仅存在一次。删除static
将为每个实例提供一个单独的字段,这是您所需要的。
(顺便说一句,Java中的字段名称通常以小写字母开头,因此最好使用turns
代替Turns
。)
如果你转
static int Turns;
static boolean Won;
static String Name;
static int Winnings;
进入
int turns;
boolean won;
String name;
int winnings;
您会看到您的主循环不再起作用。
因此,您必须在
main()
中添加局部变量:int turns = 0;
boolean won = false;
String name;
int winnings;
won
和turns
值以及winnings
也必须以某种方式获得。 (也许您想将它们设为GameResult
返回的单独的类play()
。)那你就可以
player[pl]= new Minesweeper(won,turns,pName,winnings);
(顺便说一句,名称应该放在首位,但这是风格问题。)