我的家庭作业有问题。我不是要求任何代码。我要求的是关于如何实现任务的某些部分的一些建议。
分配如下:N个玩家(n由用户给出)和带有字母的“盒子”(A-Z,未指定字母数或在问题中表示:无限制)。每个字母都有一个索引。 A = 0,B = 1,......,Z = 25。 每位玩家收到一封随机信件。形成大小为p> = 3(p由用户给出)的单词的第一个玩家具有以下属性:字母的索引应该是算术级数。例如,如果p = 3,则ABC或ZXV是获胜组合。
程序应该在每次迭代时显示每个玩家的字母。当一个玩家获胜时,该程序应该显示获胜的玩家和获胜的单词。
建议是:使用Math.random()和StringBuilder来处理字符串。
我认为该计划的切入点的方式是要求用户给出玩家的数量。之后我应该生成N个对象(给定一个类Player)。第一个愚蠢的问题:如何生成N个对象。类似的东西:
for (int i = 0 ; i < n ; i++) {
Player player1 = new Player();
//how do I allocate the other objects?
}
有没有办法为字母分配索引?我能想到的就是生成随机字母,例如:
Random r = new Random();
box = new char[9999];
for (int i = 0; i < 9999; i++){
box[i]= (char)(r.nextInt(25)+65); //there are 26 letters and A starts on position 65
}
还有其他想法吗?非常感谢任何关于如何解决这个问题的建议。
答案 0 :(得分:2)
如何生成N个对象
使用列表或数组。大多数惯用Java代码使用数组上的列表
List<Player> players = new ArrayList<Player>();
for (int i = 0; i < n; i++) {
players.add(new Player());
}
现在players
包含所有n
玩家,并且引用特定玩家k
(从0到n - 1),您使用players.get(k)
例如
players.get(k).takeTurn();
会在第k个玩家上调用takeTurn
。
有没有办法为字母分配索引?
我不太清楚你的意思是什么,或者你为什么生成9999个字符,但现在你生成9999个随机字符的方式将不起作用,因为它将排除'Z'。每当您致电r.nextInt
时,实际上指定的 1超出了您想要的最高限额。因此,要从'A'到'Z'生成9999个随机字符,您需要
Random r = new Random();
box = new char[9999];
for (int i = 0; i < 9999; i++){
box[i] = (char)(r.nextInt((int)'Z' - (int)'A' + 1) + 'A');
}
利用了chars与Java中的整数数字类型共享许多特性的事实。
答案 1 :(得分:1)
要创建多个玩家,您需要使用容器:
Vector<Player> players = new Vector<Player>();
for ( int i = 0 ; i < n ; i++ )
players.add(new Player());
Vector
只是一个例子,你可以选择吨。
为了将数字与字母相关联,我还会使用Vector
。或者可能是从HashMap
到int
的{{1}}。但由于整数是连续的,char
也会这样做。
答案 2 :(得分:1)
关于问题1:您可以声明Player
个对象的数组:
Player[] players;
然后,一旦你知道了玩家的数量,就可以为它分配一个合适大小的数组:
players = new Player[n];
这个数组仍然是null
,所以你可以使用下标用你的循环初始化它:
for (int i = 0; i < n; ++i) {
players[i] = new Player();
}
(您也可以使用ArrayList
,但这对此没有任何好处(除了了解集合框架之外),因为您确切知道需要多少Player
个对象。)
关于你的第二个问题,有各种技巧。您可以定义char
数组:
char[] chars = { 'A', 'B', /* etc */, 'Z' };
然后您可以通过下标访问每个角色。或者您可以定义一个字符串:
String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
然后,您可以使用char
将单个字符提取为chars.charAt(i)
,或将chars.substring(i, i + 1)
提取为单字符字符串。
答案 3 :(得分:0)
您可以将“Player”的实例放入数组(动态大小的arraylist)。 刚看到有人发布了arraylist的代码。看看吧!