java未定义变量_关于java:跟踪未定义的变量

我正在建立一个简单的纸牌游戏的基础上的游戏称为战争。它可以与两个玩家一起使用,但我需要对它进行修改,以便与用户在开始时输入的任何数量的玩家一起使用。我很难知道如何跟踪玩家和分数,因为我不再有具体的变量可以使用(不能为每个可能的玩家创建一个变量,所以玩家是动态添加的)。我撞到墙上了,不知道从这里到哪里去。

以下是我的主要方法:

System.out.println("Welcome to War! How many players are playing?"); //User prompt

Scanner scanner = new Scanner(System.in); //Scanner init

int numberOfPlayers = scanner.nextInt();//set number of players to next integer entered

ArrayList deck = createDeck(numberOfPlayers);

ArrayList playerNames = new ArrayList();

Map players = new HashMap();

System.out.println("Enter player name");

for (int p = 0; p <= numberOfPlayers; p++) {

String playerID = scanner.next();

addPlayer(playerID);

players.put(playerID, 100);

playerNames.add(playerID);

}

for (int j = createDeck(numberOfPlayers).size(); j > 0; j = j - numberOfPlayers) {  //j is set to deck length. Increment down two number each loop.

String readString = scanner.nextLine(); //Set variable"readString" to user input

int score = 0;

if (readString.equals("")) {    //If user input equals"enter"...

ArrayList currentScore = new ArrayList();

for (int q = 0; q <= numberOfPlayers; q++){

score = checkValue(deck);

String name = playerNames.get(q);

currentScore.add(score);

System.out.println(name +" drew a"+ deck.get(0) +" worth" + score +" points!"); //Print player 1's card

deck.remove(0); //Remove card

players.put(name, players.get(name).intValue() - score);

}System.out.println(players.values());

}

}

此方法检查所绘制卡的值并指定点值。

int currentScore = 0;

boolean checkAce = deck.get(0).startsWith("Ace");

boolean checkTwo = deck.get(0).startsWith("Two");

boolean checkThree = deck.get(0).startsWith("Three");

boolean checkFour = deck.get(0).startsWith("Four");

boolean checkFive = deck.get(0).startsWith("Five");

boolean checkSix = deck.get(0).startsWith("Six");

boolean checkSeven = deck.get(0).startsWith("Seven");

boolean checkEight = deck.get(0).startsWith("Eight");

boolean checkNine = deck.get(0).startsWith("Nine");

boolean checkTen = deck.get(0).startsWith("Ten");

boolean checkJack = deck.get(0).startsWith("Jack");

boolean checkQueen = deck.get(0).startsWith("Queen");

boolean checkKing = deck.get(0).startsWith("King");

if (checkAce) {

currentScore = 14;

}else if (checkTwo) {

currentScore = 2;

}else if (checkThree) {

currentScore = 3;

}else if (checkFour) {

currentScore = 4;

}else if (checkFive) {

currentScore = 5;

}else if (checkSix) {

currentScore = 6;

}else if (checkSeven) {

currentScore = 7;

}else if (checkEight) {

currentScore = 8;

}else if (checkNine) {

currentScore = 9;

}else if (checkTen) {

currentScore = 10;

}else if (checkJack) {

currentScore = 11;

}else if (checkQueen) {

currentScore = 12;

}else if (checkKing) {

currentScore = 13;

}

return currentScore;

}

我的主要问题是什么是最好的方法来处理未知数量的多个玩家,这样我就可以跟踪分数并宣布胜出。到目前为止,我所拥有的打印出了它们的名称和每轮得到的点数,但我没有办法操作这些值或将它们相互比较。

我用dictionary让玩家把key和value的分数联系起来。

编辑:任何不包含多个类的解决方案都是首选。

你可以在每轮结束时对你的Hashmap进行排序。然后将第一个元素作为值打印出来。这是获得冠军的最简单方法。

例如,可以使用以下方法进行排序:

public static >

List> entriesSortedByValues(Map map) {

List> sortedEntries = new ArrayList>(map.entrySet());

Collections.sort(sortedEntries,

new Comparator>() {

@Override

public int compare(Entry e1, Entry e2) {

return e2.getValue().compareTo(e1.getValue());

}

}

);

return sortedEntries;

}

那你就打电话给:entriesSortedByValues(players);。

示例如下:根据值按降序对map进行排序

更新:通过比较score和best的值,您可以为每轮中最好的玩家存储index,例如:

int best = 0, index = 0;

for (int q = 0; q <= numberOfPlayers; q++){

score = checkValue(deck);

if (best < score){

index = q;

best = score;

}

String name = playerNames.get(q);

currentScore.add(score);

System.out.println(name +" drew a"+ deck.get(0) +" worth" + score +" points!"); //Print player 1's card

deck.remove(0); //Remove card

players.put(name, players.get(name).intValue() - score);

}

System.out.println("Best player in this round:" + playerNames.get(index);

这似乎让我找到了正确的方向。但是当调用这个方法时,我得到了一个按数字顺序排列的键列表。有没有一种方法可以选择最上面的一个,并根据其值执行操作?我需要将本轮的优胜者得分加在他们的总得分上,并从他们自己的总得分中减去其他玩家的得分。

您可以迭代排序后的hashmap,从顶部(第一个元素)到末尾(最后一个元素)为每轮分配分数。我不明白你的意思,我得到了一个按数字顺序排列的键列表?您将收到按降序排列的哈希图。第一个元素将始终是上述方法的赢家。

这个方法给了我基于每个玩家的总点数的点数顺序(这对这个项目的另一个方面很有帮助),但我也需要能够得到每轮的顺序。我试图为当前的分数建立一个数组列表,但我找不到能让我对它们进行排序并准确地宣布获胜者的等效方法。

您可以简单地存储q参数。我将编辑答案。

不,应该可以,我正在初始化best,每轮索引为0->int best=0,index=0;请接受答案;)

谢谢您!抱歉,我没有看到第二次编辑。这很管用。谢谢您!

抱歉打扰@m.aibin,但您是否知道一种方法,可以让您在使用此方法时识别领带?

瓷砖在末端?排序后比较前两个值。圆形后的瓷砖?创建其他布尔值,并在best=score时更改它。那么你应该考虑下一步该怎么做;)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值