我必须编写这个程序,它将创建一个12 x 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();
}
}发布于 2013-11-21 03:53:39
如果您使用数组,如果您只在4个方向上工作,则示例单元格a1的邻居可以是a、a2、a1和a1。
您还可以为单元格创建一个知道其直接相邻单元格的类,这样您就可以获得左邻单元格,如cell.getLeftNeighbor()。
编辑:
好了,现在你已经有了你的代码,我们可以提供更具体的帮助。:)
按照您的实现方式,您必须访问类PlayingArea中的疾病逻辑。我不太明白你在疾病类中的方法是做什么的,例如,forTwo()会将'E‘或'F’赋值给字符D。
你需要确定疾病在哪个坐标上,你可以用不同的方法来做:
公共类单元{公共字符字母;公共布尔病;公共单元leftCell,rightCell,topCell,bottomCell;公共单元(字符newLetter){ letter = newLetter;}}
这个示例没有setter/getter方法,您可以在PlayingArea中创建细胞,设置每个细胞的疾病状态,并分配/访问相邻细胞。
发布于 2013-11-21 03:53:57
首先在纸上画出你的数组作为一个grid...like,一个跳棋棋盘.选择该网格中的任何空间,并计算出相邻空间相对于所选空间的索引。
写一个方法来做你刚刚在心理上做的事情。
这听起来像是一个迭代的问题。“数组需要多少次迭代才能完全被感染?”
发布于 2013-11-21 03:54:59
考虑到有限的信息,我认为递归方式会更自然,但你可以很容易地通过迭代来实现它(这将需要你存储死亡的单元以及下一步要去哪里)。
因为它是一个二维数组,一旦你有了被感染的细胞,你就可以检查左边和右边的字符是否“可感染”(相同的字母)。要向上和向下检查,您需要转到相邻的子数组。
例如:您的感染细胞是3,4。要检查左侧和右侧,您需要转到3,3和3,5条目。要向上和向下检查,需要转到2,4和4,4。如果需要对角线检查单元格,请检查2,3,2,5,4,3和4,5。
然后,如果您能够“感染”另一个细胞-再次调用该细胞上的函数。
这应该会给你一个从哪里开始的想法。如果你遇到一些错误--发布你的代码,并指明你被卡住的地方(如果你被允许这样做的话)。
https://stackoverflow.com/questions/20105471
复制相似问题