首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找随机数并从中找出模式

查找随机数并从中找出模式
EN

Stack Overflow用户
提问于 2013-06-08 22:04:28
回答 1查看 138关注 0票数 0

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

我已经用了几种方法,但我认为这是最好的。

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

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

我的结果是循环在奇怪的地方停止,并且从来没有abs()的不同。我怀疑while()表达式是错误的。我尝试了abs(x).equals(abs(y)),但发现该方法在原语上不起作用。所以我尝试了abs(x) != abs(y),但这导致了奇怪的结果。

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

代码语言:javascript
运行
复制
   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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-08 22:23:19

我的结果是,循环在奇怪的地方停止,并且从来不会有abs()的不同。

()我怀疑while()表达式是错误的

代码语言:javascript
运行
复制
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结构,因为then java不必在每次循环中都检查所有4个if条件。使用和if-else if结构,只要有一个if匹配,其余的就被跳过。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17000285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档