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 
    } 

还有其他想法吗?对于如何思考这个问题的解决方案,真的很感激。

+0

“和一个带有字母(A-Z,未指定字母数量或者在问题中表示为无限的”box“)”... wha? – 2012-03-04 18:48:58

+0

我假设它有一个随机字母的数组,但其大小合理。 – Constantin 2012-03-04 18:51:50

+0

你可能不需要一个数组来实际*保存*所有这些随机字母。只要你需要一个,就生成一个新的。 – 2012-03-04 18:53:23

如何生成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中的特性的事实。

+0

该死的..那么容易? :) 谢谢! – Constantin 2012-03-04 18:48:14

+0

我不太清楚我的老师真的想从我这里得到什么。问题表明:“一个带有英文字母(A-Z,无限制)的盒子,其索引分配给每个字母(即A = 0; B = 1; ...; Z = 25)。 – Constantin 2012-03-04 18:56:27

+0

当使用 列表 players = new ArrayList (); for(int i = 0; i Constantin 2012-03-05 18:35:26

要创建多个播放器,你需要使用一个容器:

Vector<Player> players = new Vector<Player>(); 
for (int i = 0 ; i < n ; i++) 
    players.add(new Player()); 

Vector仅仅是一个例子,有吨,从中可以选择。

为了将数字与字母关联起来,我还会使用Vector。或者可能是从intcharHashMap。但由于整数是连续的,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