阵列交换汽车游戏

时间:2012-09-30 06:51:07

标签: java arrays swap

我正在尝试设计一个程序,将数组中的值0与前面的元素交换,如果它不是0。

例如,如果数组是1 1 0 1 1 1,那么程序将继续交换,直到它成为0 1 1 1 1 1

但是当我运行此IndexOutOfBoundException时。我甚至尝试将for循环更改为:

for(int i = 1; i < newLane.length; i++)

解决了越界问题,但使其功能不正确。

以下是我的代码:

public static int[] down(int[] lane) {   
    int lan = lane.length; // length of array
    int[]newLane = new int[lan];  // creates new 1d matrix

    for(int i = 1; i < newLane.length; i++) {  
        if(newLane[i-1] != 0 && newLane[i] == 0 ){ // getting out of bounds error
            int tmp = newLane[i - 1];
            newLane[i - 1] = newLane[i];
            newLane[i] = tmp;
        }
    }

    return newLane;
}

4 个答案:

答案 0 :(得分:1)

我认为您可以简单地对数组进行排序:

public static int[] down(int[] lane){       
    int lan = lane.length; // length of array
    int[]newLane = Arrays.copyOf(lane,lan)  // creates new 1d matrix
    Arrays.sort(newLane);
    return newLane;
}

答案 1 :(得分:0)

您无法使用数组Lane的元素。目前newLane是一个空数组。我已将Lane的值指定为newLane

将您的功能更改为

public static int[] down(int[] lane){   

    int lan = lane.length; // length of array
    int[]newLane = new int[lan];  // creates new 1d matrix
    newLane = lane;

     for(int i = 1; i < newLane.length; i++) {  

         if(newLane[i-1] != 0 && newLane[i] == 0 ){ // getting out of bounds error
            int tmp = newLane[i - 1];
            newLane[i - 1] = newLane[i];
            newLane[i] = tmp;
            }



    }

         if(newLane[0]!=0 && newLane[1]==0)
         {
             int tmp = newLane[0];
                newLane[0] = newLane[1];
                newLane[1] = tmp;
         }
     return newLane;
    }

<强>更新 在for循环之后,检查第0个元素是否为非零。如果是,则先将其交换。

if(newLane[0]!=0 && newLane[1]==0)
         {
             int tmp = newLane[0];
                newLane[0] = newLane[1];
                newLane[1] = tmp;
         }

答案 2 :(得分:0)

正如我的评论所说:你很接近 只需添加

if(newLane[0] == 0) newLane[0] == 1;

在for-loop之前。

答案 3 :(得分:-1)

我会尝试这个

 public static int[]  swapping(int[] lane) 
  {   
int[] result = new int[lane.length];  

 for(int i = 0; i < result .length; i++) {  
      if ( result[i]==0) 
      {
        if( i==0)
           {
           }
         else
            {
       temp = result[i] ; 
       result[i]  = result [i-1] ; 
       result [i-1] = temp ; 
             }
     else
      {
       }
 return result ;
}