2013-11-20 67 views
0

我必須製作這個程序,它會讓一個12乘12的數組填充不同的字母,然後製造一種疾病,傳播到同一個字母的附近單元格中(它會隨機的放置在陣列中)。到目前爲止,我已經成功地爲陣列和疾病製作了一個類(選擇一個隨機的字符病變),但我不明白如何讓它看到附近的細胞。此外,在疾病中,用戶可以選擇多少個不同的字母(2-4)。到目前爲止,我已經做:讓一些東西在一個數組中移動

import java.util.Random; 
public class Disease { 
public char D ; 
Random r = new Random(); 
public void forTwo() { 
    Random r = new Random(); 
    D = (char)(r.nextInt(2) + 'E'); 
} 
public void forThree() { 
    Random r = new Random(); 
    D = (char)(r.nextInt(3) + 'E'); 
} 
public void forFour() { 
    Random r = new Random(); 
    D = (char)(r.nextInt(4) + 'E'); 
} 
} 

和數組:

import java.util.Arrays; 
import java.util.Random; 
public class PlayingArea { 
private String letters; 
public char[][] grid; 
public PlayingArea(String letters) { 
    this.letters = letters; 
} 
public void populate() { 
    int n = letters.length(); 
    grid = new char[12][12]; 

    Random r = new Random(); 
    for (int j = 0; j < grid.length; j++) { 
     for (int i = 0; i < grid.length; i++) { 
      grid[i][j] = letters.charAt(r.nextInt(n)); 
     } 
    } 
} 
public String gridAsString() { 
    StringBuilder sb = new StringBuilder(); 
    for (char[] letterRow : grid) { 
     sb.append(Arrays.toString(letterRow)).append('\n'); 
    } 
    return sb.toString(); 
} 
} 
+3

歡迎來到SO! :)你可以分享你迄今爲止做了什麼嗎? – Roman

+0

這個問題可能不夠具體。假設你已經知道如何訪問數組元素,那麼不僅僅是「讓單元格看到附近單元格的一種方法」。請嘗試一下,如果您遇到代碼問題,我們很樂意提供幫助。 – Zong

+0

如果字符在'arr [row] [col]',那麼它可以看到'arr [row-1] [col]','arr [row + 1] [col]','arr [row] [ col-1]'和'arr [row] [col + 1]',除非這些元素在數組之外。你是這個意思嗎? –

回答

1

如果你使用數組的例子的鄰居細胞中,[1] [1]可 一個[0] [1],a [2] [1],a [1] [0]和a [1] [2]如果您只在四個方向工作。

您還可以爲細胞創建一個類,該細胞知道其直接鄰居細胞 ,因此您可以像cell.getLeftNeighbor()那樣獲取左邊的鄰居。

編輯:

好了,現在你有你的代碼到目前爲止,我們可以幫助更具體一點。 :)

您實施它的方式,您將不得不訪問您的類PlayingArea中的疾病邏輯。我不太明白在疾病類中你的方法是什麼,for two()將例如給char D賦予'E'或'F'。

您需要確定在哪個座標病,你可以做不同的方式:

  • 指定座標PlayingArea,像5和4 =電網[5] [4] .The直接鄰居現在是網格[x-1] [x],網格[x + 1] [x],網格[x] [x-1]和網格[x] [x + 1]。

  • 用單元格[] []替換char [] []。你將不得不創建一個Cell類,它只需要知道一個布爾值,哪個字母在裏面,如果它是病態的。此外,您可以將其他單元格作爲屬性,這樣您可以直接訪問單元格鄰居。

    public class Cell{ 
        public char letter; 
        public boolean diseased; 
        public Cell leftCell, rightCell, topCell, bottomCell; 
    
        public Cell(char newLetter){ 
         letter = newLetter; 
        } 
    } 
    

    這個例子是沒有設置器/吸氣劑的方法,可以在創建PlayingArea細胞,設置每個小區的疾病的狀態,並分配/接入相鄰小區。

0

首先在紙上畫出陣列作爲網格......就像跳棋板一樣。選擇該網格中的任何空間,並找出相對於您選擇的相鄰空間的索引。

寫一個方法來做你剛剛做的心理。

聽起來這是一個迭代的問題。 「陣列被完全感染需要多少次迭代?」

0

鑑於有限的信息,我認爲遞歸的方式會更自然,但您可以輕鬆地通過迭代來實現它(它需要您存儲已故的單元格以及接下來的位置)。

既然是二維陣列,一旦感染了細胞,就可以檢查左右角色是否「感染」(同一個字母)。 要檢查上下,你需要去相鄰的子陣列。

例如: 您的感染細胞是[3,4]。要檢查左側和右側,您需要轉到[3,3]和[3,5]條目。 要上下查看,您需要轉到[2,4]和[4,4]。 如果您需要對角檢查單元格,請檢查[2,3],[2,5],[4,3]和[4,5]。

然後,如果你能夠「感染」另一個細胞 - 再次在該細胞上調用你的功能。

這應該給你一個想法從哪裏開始。 如果您遇到一些錯誤 - 發佈代碼並指定卡住的位置(如果允許的話)。

0

店疾病對象作爲你的病對象變量的當前位置,所以每一種疾病都有一個當前的位置/座標即X,Y

使用x和y爲你的疾病的當前位置(你不要「知道):

  • 要看看上相鄰的單元可以使用

array[x+1][y] // Right
array[x-1][y] // Left
array[x][y+1] // Down
array[x][y-1] // Up

  • 如果您還想查看對角線,請使用相同的方法。 (數組[x-1] [y-1] =左上)

除非將疾病對象傳遞給數組或數組的子集,否則無法從疾病中完成。

相關問題