我必须制作这个程序,使12×12阵列填充不同的字母,然后制作一种疾病,扩散到相同字母的附近单元格(它将被随机放置在数组中)。到目前为止,我已经设法为阵列和疾病做了一个类(选择一个随机的char来患病),但我不明白我怎么能让它看到附近的细胞。此外,在疾病中,用户可以选择多少个不同的字母(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');
}
}
AND THE ARRAY:
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();
}
}
答案 0 :(得分:1)
如果使用数组,则可以使用示例单元格a [1] [1]的邻居 a [0] [1],a [2] [1],a [1] [0]和[1] [2],如果你只在4个方向工作。
您还可以为细胞创建一个类,它知道它的直接相邻细胞, 所以你可以像cell.getLeftNeighbor()一样得到左边的邻居。
修改强>
好的,现在你已经拥有了你的代码,我们可以提供更具体的帮助。 :)
您实施它的方式,您必须访问您的类PlayArea中的疾病逻辑。我不太明白你们在疾病类中的方法是什么,forTwo()会将“E”或“F”分配给char D,例如。
您需要确定疾病的坐标,您可以通过不同的方式进行:
在PlayingArea中指定坐标,如5和4 = grid [5] [4]。直接邻居现在是网格[x-1] [x],网格[x + 1] [x], grid [x] [x-1]和grid [x] [x + 1]。
将char [] []替换为Cell [] []。您将不得不创建一个类Cell,它只需要知道一个布尔值,哪个字母在其中,如果它是患病的。此外,您可以将其他Cell作为属性,这样您就可以直接访问单元格邻居。
public class Cell{
public char letter;
public boolean diseased;
public Cell leftCell, rightCell, topCell, bottomCell;
public Cell(char newLetter){
letter = newLetter;
}
}
此示例没有setter / getter方法,您可以在PlayingArea中创建单元格,设置每个单元格的疾病状态并分配/访问相邻单元格。
答案 1 :(得分:0)
首先在纸上画出你的阵列作为网格......就像一个跳棋板。选择该网格中的任何空间,并找出相对于您选择的空间的相邻空间的索引。
写一个方法来做你刚才做的事情。
听起来这是一个反复的问题。 “数组完全被感染需要多少次迭代?”
答案 2 :(得分:0)
鉴于信息有限,我认为递归方式会更自然,但您可以通过迭代轻松实现它(它需要您存储已故的单元格以及下一步的位置)。
由于它是一个2D数组,一旦你有了受感染的细胞,你就可以检查左边和右边的字符是否是“可感染的”(同一个字母)。 要检查上下,您需要选择相邻的子阵列。
例如: 你感染的细胞是[3,4]。要检查左右,您需要转到[3,3]和[3,5]条目。 要检查上下,您需要转到[2,4]和[4,4]。 如果需要对角检查细胞,请检查[2,3],[2,5],[4,3]和[4,5]。
然后,如果您能够“感染”另一个细胞 - 再次在该细胞上调用您的功能。
这可以让你知道从哪里开始。 如果你遇到一些错误 - 发布你的代码并指明你被困的地方(如果你被允许这样做)。
答案 3 :(得分: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
除非你将疾病对象传递给阵列或阵列的一个子集,否则你无法从疾病中做到这一点。