2014-01-16 47 views
1

我正在研究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 
     } 

任何想法?帮助将不胜感激。

谢谢

+0

不要混淆,'ArrayList的= Array' – Christian

+0

谢谢您的回复!我知道我正在研究一个Array。我不知道如何实施移位方法 –

+0

有一个问题,您为什么想要这样做?目的是什么? – Christian

回答

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类实际使用一个随机点。

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 
    } 
} 
+0

感谢您的评论。所以你会建议这样的事情? for(int i = 0; i

+0

@HinWong我编辑了代码来说明我的观点 – mdl