2012-03-04 64 views
1

我的家庭作業有問題。我沒有要求任何代碼。我所要求的是關於如何實施作業的某些部分的一些建議。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

回答

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'); 
} 

這需要的是字符分享了很多與積分數值類型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

1

要創建多個播放器,你需要使用一個容器:

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

Vector僅僅是一個例子,有噸,從中可以選擇。

爲了將數字與字母關聯起來,我還會使用Vector。或者可能是從intcharHashMap。但由於整數是連續的,Vector也會這樣做。

0

您可以將「播放器」的實例放入數組中(動態大小的數組列表)。 剛纔看到有人發佈了一個數組列表的代碼。一探究竟!

1

關於問題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