因此,我刚刚开始在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;


wonturns值以及winnings也必须以某种方式获得。 (也许您想将它们设为GameResult返回的单独的类play()。)

那你就可以

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


(顺便说一句,名称应该放在首位,但这是风格问题。)

09-05 02:02