Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从中寻找随机数和模式_Java_Random - Fatal编程技术网

Java 从中寻找随机数和模式

Java 从中寻找随机数和模式,java,random,Java,Random,我有一个大的家庭作业问题,我的尝试没有解决它的一小部分工作。这个项目是生命的游戏,所以在每一步,细胞中的有机体都要考虑它周围的每一个细胞。没有使用对角线,我想从一个随机单元格开始考虑 我已经尝试过几种方法,但我坚持认为这是最好的 第一部分-找到一个随机的x和y,它们是边,而不是对角线。我认为a侧的abs(x)和abs(y)不可能是相同的。我循环随机尝试,直到abs()不一样 第二部分-使用four if()确定当前侧,然后将x、y更改为下一侧(顺时针方向) 我的结果是,循环在奇怪的地方停止,并且

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

我已经尝试过几种方法,但我坚持认为这是最好的

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

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

我的结果是,循环在奇怪的地方停止,并且从不与abs()不同。我怀疑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
publicstaticvoidmain(字符串[]args){
//杰克贝格
System.out.println(“本节中的目标是”+
“获得随机边,然后顺时针移动到其他边”);
int targetx;//这些将保存下一个要使用的单元格。
int targety;
//第一部分-让随机边成为起始单元格
//注意:abs(x)=abs(y)表示对角单元格,而非a侧
//首先将随机数0或1放入目标。
//继续尝试随机数,直到abs()不相等
做{
targetx=(int)(Math.round(Math.random());
targety=(int)(Math.round(Math.random());
System.out.println(“rando,尚未选中”+targetx+,“+targety”);
System.out.println(“abs x”+数学abs(targetx));
系统输出打印项次(“abs y”+数学abs(targetx));
}而(Math.abs(targetx)==(Math.abs(targety));
System.out.println(“在检查侧面,而非角落“+targetx+”,“+targety”);
//第二部分-顺时针绕两侧行走
System.out.println(“随机起始单元格:“+targetx+”,“+targety”);
对于(int targetCounter=0;targetCounter
我的结果是,循环在奇怪的地方停止,并且永远不会停止
abs()不同。我怀疑while()表达式是错误的

检查这些行中的变量名

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


您应该使用if-else-if结构。即使每个if语句中设置的值与下一个if语句不匹配,您仍然希望使用if-else-if结构,因为这样java就不必每次通过循环检查所有4个if条件。使用和if-else-if结构,只要一个if匹配,r跳过est。

您知道Math.random()返回一个介于0和1之间的双精度值吗?可以尝试java.util.random.nextInt()?我的结论是我犯了一个愚蠢的错误。我一直告诉自己不要在不立即进行更改的情况下复制粘贴。也许我需要更大声地告诉自己。谢谢你把答案变成了教训。那真的很好。每个人都会遇到这种情况。:)然后在第二部分中,似乎所有表达式都不匹配。如果1,0进入循环,那么所有三次迭代都会出现1,0。我预计中的1,0将匹配第一个If(),并将变量更改为0,1。表达式是否错误?我尝试了targetx.equals(1)但是不能用在原语上。谢谢。@玩GAS,为你的下一个问题添加了答案。我让你用else if-我试图通过使用独立的ifs进行测试来简化它,结果太聪明了一半。使用else if,比赛结束后它会退出而不做更多的测试。非常感谢你在这方面的帮助。现在我可以继续t了o任务的核心问题。
System.out.println("abs x "+Math.abs(targetx));
System.out.println("abs y "+Math.abs(targetx));