【发布时间】:2019-12-16 00:07:56
【问题描述】:
我创建了一个简单的游戏,其中 2 名玩家输入输入,领先较大的一方在游戏结束时被宣布为获胜者以及获胜的利润。您输入的第一个输入是每个玩家获得的回合数。在输出中,我需要提到的玩家编号和边距。我能够完成它,但我想知道这是否可以在不使用 HashMap 的情况下完成,因为我也已经在使用数组列表。有人可以建议这样做的方法吗?
Scanner o = new Scanner(System.in);
List<Integer> arrlist = new ArrayList<Integer>();
int q = o.nextInt(), a1, b1, diff, max, w;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < q; i++) { // q is the number of turns
a1 = o.nextInt(); //first player input
b1 = o.nextInt(); //second player input
diff = (a1 > b1) ? a1 - b1 : b1 - a1; //getting the difference
w = (a1 > b1) ? 1 : 2; //picking the winner for the turn
map.put(diff, w);
arrlist.add(diff);
}
max = arrlist.get(0);
for (int j = 0; j < arrlist.size(); j++) {
if (arrlist.get(j) > max)
max = arrlist.get(j);
}
System.out.printf("%d %d", map.get(max), max );
【问题讨论】:
-
您可以使用运行总计 - 有两个变量,每个用户一个。
-
或者创建一个新的
class,它代表一个“差异”和一个“赢家”。class Result { private int diff; private int winner; }。然后你可以只跟踪其中一个,如果新差异大于旧差异,则更新局部变量。 -
只是为了让你自己和其他人在未来更容易:如果你给你的变量取有用的名字,你可以摆脱大部分的 cmets!只需将
q重命名为numberOfTurns并将a1重命名为inputPlayer1并将b1重命名为inputPlayer2。并且调用ArrayListarrlist是毫无意义的:命名它以表明它意味着什么。