我写了这段代码来制作由随机数组成的5x5模式。
public class RandomPatternGenerator {
public static final int n= 5;
public static int boxArray[][] = new int[n][n];
public static int randomize(int randomNumber){
randomNumber = (int)(Math.random()*5);
return randomNumber;
}
public static void letsPattern(){
for(int x=0; x<5; x++){
for (int y = 0; y<5; y++){
boxArray[y][x]= randomize(x);
}
}
}
public static void display(){
for(int x=0; x<5; x++){
for (int y = 0; y<5; y++){
System.out.print(boxArray[y][x]);
}
System.out.println();
}
}
public static void main(String[] args){
letsPattern();
display(); }}
但是我想定义两个规则:两个4不能水平相邻。 此外,只要模式中有3,就应该有0。
我如何将这两条规则一起应用?
答案 0 :(得分:0)
如果您实施这两项规则,那么您应首先注意您的数字将不再是“随机”。假设没问题......
要实现第一条规则(4条规则),你必须保留一个boolean
来跟踪前一个数字是否水平是4.如果它是真的你的随机数是另一个4,那么得到另一个随机数数。继续获取另一个数字(提示:while循环),直到它不再是4.确保你的boolean
准确地跟踪前一个数字是否为4(提示:你必须每次都重置它)。 / p>
要实施第二条规则(3规则),您必须完成整个数组两次。第一次按照当前的设置进行设置(包括4规则)。第二次,你搜索以找到任何3s(提示:另外2个嵌套for循环)。如果此3不在顶行,则用0替换3上方的数字。
我选择不给你任何实现此功能的代码,但我相信你可以从我提供的内容中找到解决方法。祝你好运!
PS:你将n
定义为5(我完全同意),但从不使用它!每次你的代码中都有5,对于一致性情况,它实际上应该是n
,这样你以后就会混淆自己(“为什么这是5而不是6?”的事情)
答案 1 :(得分:0)
对于相邻的4,您希望将当前号码与之前的号码进行比较。如果选择的数字是4而前一个是4,则需要获得所选4的新随机数。 对于3,如果您选择的数字是3并且您不在第一行,您只想将其上方的数字更改为0。
public static void letsPattern() {
for(int y=0; y<5; x++){
for (int x = 0; x<5; y++){
boxArray[x][y]= randomize();
//4 rule
if(x>=1 && y>=1) {
bool adjacent = true;
while(adjacent) {
if(boxArray[x][y] == 4 && boxArray[x][y] == boxArray[x-1][y]) {
boxArray[x][y] = randomize();
} else {
adjacent = false;
}
}
//3-0 rule
if(y>=1) {
if(boxArray[x][y] == 3) {
boxArray[x][y-1] = 0;
}
}
}
}
我切换了你的for循环。也没有必要为randomize()设置一个参数,因为你没有在方法中使用它。