定义随机模式的规则

时间:2014-10-21 15:46:43

标签: java nested-loops

我写了这段代码来制作由随机数组成的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。

我如何将这两条规则一起应用?

2 个答案:

答案 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()设置一个参数,因为你没有在方法中使用它。