随机向左或向右移动数组列表中的对象

时间:2014-01-16 03:15:11

标签: java arrays

我正在研究Java中的Array问题。我知道当你声明一个对象时,你可以把它放在一个向右或向左移动的数组中。但是,无论如何,你可以随机向左或向右移动吗?

在本练习中,我将数组大小设置为100.我想检查单元格是否为空。如果它不是空的,则对象(熊和鱼)向左或向右移动(随机)。如果它是空的,它会做其他事情。

     For example:
    //Create an Array
    //Add objects into array
        Animal[] river = new Animal[100];
        Fish f = new Fish();
        Bear b = new Bear();
        river[0]= f;
        river[1]= b;

            for (int i = 0; i<river.length; i++){
                  if (river[i] != null){
        //not sure how to shift byte right and left 
        }

有什么想法吗?将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:2)

你的想法过于宽泛。向左或向右移动实际上只是将其从当前位置移除并将其添加到另一个位置。

这会带你到这样的伪代码:

if position is occupied
  store animal on position in variable
  empty the position
  put animal from variable in another position

而最后一步取决于你的标准。你可以position + 1position - 1,或者你可以使用Random类实际使用随机点。

答案 1 :(得分:0)

通过向左和向右“移动”,听起来像你想要的是随机交换river数组中的项目与其相邻的项目。正如其他人所提到的,您可以使用Random类来生成随机值。

我会生成一个{-1, 0, 1}:如果数字为0,则该项目不会移动;如果数字为-1,则将当前项(river[i])与其左邻居(river[i-1])交换;如果数字为1,则将当前项(river[i])与其右邻居(river[i+1])交换。请务必实现swap方法,并注意不要超出数组的范围。


编辑:

Random rnd = new Random();
for (int i=0; i<river.length; i++)
{
    int shift = rnd.nextInt(3) - 1; // -1, 0, or 1

    switch(shift)
    {
        case -1: // swap to the left
            if (i > 0)
                swap(river, i, i-1);
            break;

        case 1: // swap to the right
            if (i < river.length-1)
                swap(river, i, i+1);
            break;

        default:
            // no shift
    }
}