java字母游戏[家庭作业]

时间:2012-03-04 18:42:23

标签: java letter

我的家庭作业有问题。我不是要求任何代码。我要求的是关于如何实现任务的某些部分的一些建议。

分配如下: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
    }

还有其他想法吗?非常感谢任何关于如何解决这个问题的建议。

4 个答案:

答案 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。或者可能是从HashMapint的{​​{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的代码。看看吧!