java信函游戏[家庭作业]
我的家庭作业有问题。我没有要求任何代码。我所要求的是关于如何实施作业的某些部分的一些建议。java信函游戏[家庭作业]
这个任务如下:N个玩家(n是用户给出的)和一个带有字母(A-Z,未指定字母数量或者在问题中表示为无限制)的'盒子'。每个字母都有一个索引。 A = 0,B = 1,...,Z = 25。 每位玩家都会收到一封随机字母。第一个形成大小为p> = 3(p由用户给出)的单词的玩家具有以下属性:字母的索引应该是算术级数。例如,如果p = 3,则ABC或ZXV是获胜组合。
程序应该在每次迭代时显示每个玩家的字母。当一个玩家获胜时,该节目应该显示赢得的玩家和获胜的单词。
建议是:使用Math.random()和StringBuilder处理字符串。
我觉得这个程序的入口点是要求用户给出玩家的数量。之后,我应该生成N个对象(给定一个类播放器)。第一个愚蠢的问题:我如何生成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
}
还有其他想法吗?对于如何思考这个问题的解决方案,真的很感激。
如何生成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');
}
这需要的是字符分享了很多与积分数值类型Java中的特性的事实。
该死的..那么容易? :) 谢谢! – Constantin 2012-03-04 18:48:14
我不太清楚我的老师真的想从我这里得到什么。问题表明:“一个带有英文字母(A-Z,无限制)的盒子,其索引分配给每个字母(即A = 0; B = 1; ...; Z = 25)。 – Constantin 2012-03-04 18:56:27
当使用 列表
要创建多个播放器,你需要使用一个容器:
Vector<Player> players = new Vector<Player>();
for (int i = 0 ; i < n ; i++)
players.add(new Player());
Vector
仅仅是一个例子,有吨,从中可以选择。
为了将数字与字母关联起来,我还会使用Vector
。或者可能是从int
到char
的HashMap
。但由于整数是连续的,Vector
也会这样做。
您可以将“播放器”的实例放入数组中(动态大小的数组列表)。 刚才看到有人发布了一个数组列表的代码。一探究竟!
关于问题1:一旦你知道的玩家数量
Player[] players;
然后,你可以为它分配适当大小的数组:你可以声明Player
对象的数组
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";
然后,您可以用提取或chars.charAt(i)
与chars.substring(i, i + 1)
一个字符的字符串的单个字符作为char
。
“和一个带有字母(A-Z,未指定字母数量或者在问题中表示为无限的”box“)”... wha? – 2012-03-04 18:48:58
我假设它有一个随机字母的数组,但其大小合理。 – Constantin 2012-03-04 18:51:50
你可能不需要一个数组来实际*保存*所有这些随机字母。只要你需要一个,就生成一个新的。 – 2012-03-04 18:53:23