0

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

我已经通过几种方式接近它,但我认为这是最好的。

第一部分 - 找到一个随机的 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
4

1 回答 1

1

我的结果是循环在奇怪的地方停止,并且从 abs()s 不同。我怀疑 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 条件. 使用 if-else if 结构,只要一个 if 匹配,就跳过其余的。

于 2013-06-08T14:23:19.473 回答