1

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

分配如下:N 名玩家(n 由用户给出)和一个带有字母的“盒子”(AZ,未指定的字母数量或问题中所述:无限制)。每个字母都有一个索引。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

4 回答 4

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();

会调用takeTurn第 k 个玩家。

有没有办法为字母分配索引?

我不太清楚你的意思是什么,或者你为什么要生成 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 中的整数类型共享许多特征的事实。

于 2012-03-04T18:46:51.000 回答
1

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

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

Vector只是一个例子,您可以从中选择很多。

对于将数字与字母相关联,我也会使用Vector. 或者可能是HashMapfrom intto char。但由于整数是连续的,所以 aVector也会这样做。

于 2012-03-04T18:47:50.647 回答
1

关于问题 1:您可以声明一个对象数组Player

Player[] players;

然后,一旦您知道玩家的数量,您就可以为其分配一个适当大小的数组:

players = new Player[n];

这个数组仍然是 all null,所以你可以用你的循环使用下标来初始化它:

for (int i = 0; i < n; ++i) {
    players[i] = new Player();
}

(您也可以为此使用 an ArrayList,但这没有任何好处(除了了解集合框架之外),因为您确切知道Player需要多少对象。)

关于你的第二个问题,有多种技术。您可以定义一个char数组:

char[] chars = { 'A', 'B', /* etc */, 'Z' };

然后您可以通过下标访问每个字符。或者你可以定义一个字符串:

String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

然后,您可以将单个字符提取为charusingchars.charAt(i)或作为单个字符的字符串 with chars.substring(i, i + 1)

于 2012-03-04T18:51:39.273 回答
0

您可以将“播放器”的实例放入一个数组(动态大小的数组列表)。刚刚看到有人发布了数组列表的代码。一探究竟!

于 2012-03-04T18:50:12.810 回答