从中找到随机数和模式

时间:2013-06-08 14:04:28

标签: java random

我有一个很大的家庭作业问题,我没有尝试解决其中的一小部分问题。该项目是生命游戏,因此在每个步骤中,细胞中的生物体必须考虑其周围的每个细胞。不使用对角线,我想在随机单元中开始考虑。

我已经采用了几种方法,但我在这方面做得最好。

第一部分 - 找到一个随机的x和y,它们是一个边,而不是一个对角线。我认为这是一个侧面abs(x)和abs(y)不能相同。我循环遍历随机尝试,直到abs()s不同。

第二部分 - 使用四个if()来确定当前边,然后将x,y更改为下一个边(顺时针方向)。

我的结果是循环在奇数位置停止,而绝不与abs()s不同。我怀疑while()表达式是错误的。我尝试了abs(x).equals(abs(y)),但发现该方法不适用于基元。所以我尝试了abs(x)!= abs(y),但这会导致奇怪的结果。

这是目前的努力。任何帮助,将不胜感激。

   public static void main(String[] args)   {
      //jkbeg
       System.out.println("objective in this section is" +
            " to get a random side and then move clockwise around to others");
       int targetx; //these will hold the next cell to use.
       int targety;

//     Part One - get random side to be starting cell
//     n.b. abs(x) == abs(y) means diagnol cell, not a side
//     first get randoms of 0 or 1 into targets. 
//     keep trying randoms until abs() are not equal       
     do {   
         targetx = (int) (Math.round(Math.random()));
         targety = (int) (Math.round(Math.random()));
         System.out.println("rando, not checked yet"+targetx +","+targety);
         System.out.println("abs x "+Math.abs(targetx));
         System.out.println("abs y "+Math.abs(targetx));
     }while(Math.abs(targetx) == (Math.abs(targety))  );
     System.out.println("after check for sides, not corners"+targetx +","+targety);

//Part two - walk around the sides clockwise
         System.out.println("random start cell: "+targetx +","+targety);
     for(int targetCounter=0; targetCounter<4; targetCounter++){         
         if ((targetx==1)&&(targety==0)){targetx=0;targety=1;} //top to right
         if ((targetx==0)&&(targety==1)){targetx=-1;targety=0;} //right to bottom
         if ((targetx==-1)&&(targety==0)){targetx=0;targety=-1;} //bottom to left
         if ((targetx==0)&&(targety==-1)){targetx=1;targety=0;} //left to top
         System.out.println("next cell clockwise: "+targetx +","+targety);
     }
     System.out.println("end  *random side then walk around* here here");
     System.exit(0);
   } // main
      //jkend

1 个答案:

答案 0 :(得分:1)

  

我的结果是循环在奇数位置停止而从不停止   abs()不同。我怀疑while()表达式是错误的

System.out.println("abs x "+Math.abs(targetx));
System.out.println("abs y "+Math.abs(targetx));

检查这些行中的变量名称。

第二部分:每个if语句都会更改targetx和targety的值,以使值与下一个if语句匹配。因此,每个if语句都会执行,并且循环结束时targetx和targety的值是最后一个if语句中设置的值。

你应该使用if-else if结构。即使在每个if语句中设置的值与下一个if语句不匹配,您仍然希望使用if-else if结构,因为那样java就不必每次都通过循环检查所有4个条件。使用if和else if结构,如果匹配,则跳过其余部分。