Java 生成与2d数组中最后一组数字仅相差1的数字集

Java 生成与2d数组中最后一组数字仅相差1的数字集,java,arrays,random,2d,Java,Arrays,Random,2d,问题:我想在网格上生成随机的接触位置。地点总数为5个。是否有更有效/不同的方法执行以下代码: /* * 8 1 2 * 7 [original] 3 * 6 5 4 */ int rand = 1 + (int)(Math.random() * ((8 - 1) + 1)); if(rand >= 2 && rand<= 4) { newx++; } else if(rand >=

问题:我想在网格上生成随机的接触位置。地点总数为5个。是否有更有效/不同的方法执行以下代码:

 /*
 * 8        1       2
 * 7    [original]  3
 * 6        5       4
 */


int rand = 1 + (int)(Math.random() * ((8 - 1) + 1));
if(rand >= 2 && rand<= 4)
{
    newx++;
}
else if(rand >=6 && rand<=8)
{
    newx--;
}

//change y according to number
if(rand == 8 || rand == 1 || rand==2)
{
    newy++;
}
else if(rand >= 4 && rand<= 6 )
{
    newy--;
}
/*
* 8        1       2
*7[原件]3
* 6        5       4
*/
int rand=1+(int)(Math.random()*((8-1)+1));
如果(rand>=2&&rand=6&&rand=4&&rand根据
switch
语句,似乎对您的情况更有效。而且它使您的代码更具可读性

switch (rand){
    case 1:         newy++; break;
    case 2: newx++; newy++; break;
    case 3: newx++;         break;
    case 4: newx++; newy--; break;
    case 5:         newy--; break;
    case 6: newx--; newy--; break;
    case 7: newx--;         break;
    case 8: newx--; newy++; break;
}
根据
switch
语句,它似乎对您的情况更有效。而且它使您的代码更具可读性

switch (rand){
    case 1:         newy++; break;
    case 2: newx++; newy++; break;
    case 3: newx++;         break;
    case 4: newx++; newy--; break;
    case 5:         newy--; break;
    case 6: newx--; newy--; break;
    case 7: newx--;         break;
    case 8: newx--; newy++; break;
}

我建议使用
Random.nextInt(8)
Vs
Math.Random()*8
(查看原因)。因为您当前的需求似乎只允许一个“种子”,您可以在类中声明一个
static Random Random=new Random();
,所以您只需在方法中调用
Random.nextInt(8)

int rand = random.nextInt(8); //0..7
if (rand < 3) //0,1,2
{
    newx++;
}
else if (rand < 6) //3,4,5
{
    newx--;
}

//change y according to number
if(rand % 3 == 0) //0,3,6
{
    newy++;
}
else if(rand % 3 == 1) //1,4,7
{
    newy--;
}

我建议使用
Random.nextInt(8)
Vs
Math.Random()*8
(查看原因)。因为您当前的需求似乎只允许一个“种子”,您可以在类中声明一个
static Random Random=new Random();
,所以您只需在方法中调用
Random.nextInt(8)

int rand = random.nextInt(8); //0..7
if (rand < 3) //0,1,2
{
    newx++;
}
else if (rand < 6) //3,4,5
{
    newx--;
}

//change y according to number
if(rand % 3 == 0) //0,3,6
{
    newy++;
}
else if(rand % 3 == 1) //1,4,7
{
    newy--;
}

“触摸”是什么意思?你能给出一个样本输出吗?之后你会使用“rank”变量吗?或者它只用于选择一个随机整数[1,8]?你能发布整个方法吗?@tunaki选择指定的位置(如1-8)然后使用指定的位置生成另一个location@KonstantinosChalkias代码的其余部分只是将绘制的形状映射到jframe中供用户查看。这是游戏的一部分“触摸”是什么意思?您能给出一个示例输出吗?之后是否使用“rank”变量?或者它仅用于选择随机整数[1,8]?你能发布整个方法吗?@tunaki选择指定的位置(如1-8)然后使用指定的位置生成另一个location@KonstantinosChalkias代码的其余部分只是将绘制的形状映射到jframe中供用户查看。这是游戏的一部分我对这方面的努力感到惊讶。谢谢:我对这方面的努力感到惊讶。谢谢:D