Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Swap - Fatal编程技术网

Java 汽车游戏中的阵列交换

Java 汽车游戏中的阵列交换,java,arrays,swap,Java,Arrays,Swap,我试图设计一个程序,如果数组中的值0不是0,则将它与前面的元素交换 例如,如果数组是1011,则程序将继续交换,直到它变成011 但是当我运行这个IndexOutOfBoundException时,会发生异常。我甚至尝试将for循环更改为: for(int i = 1; i < newLane.length; i++) for(int i=1;i

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

例如,如果数组是
1011
,则程序将继续交换,直到它变成
011

但是当我运行这个
IndexOutOfBoundException
时,会发生异常。我甚至尝试将for循环更改为:

for(int i = 1; i < newLane.length; i++)
for(int i=1;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;
}
公共静态int[]向下(int[]车道){
int lan=lane.length;//数组的长度
int[]newLane=newint[lan];//创建新的1d矩阵
对于(inti=1;i
您在任何地方都无法使用数组元素
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;
    }

正如我的评论所说:你很接近了。
加上

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

在for循环之前。

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

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;
}
我试试这个

 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 ;
}
公共静态int[]交换(int[]通道)
{   
int[]结果=新int[车道长度];
对于(inti=0;i
在if语句中,你说
newLane[i-1]
如果从1开始,你会没事的,但是跳过第一个元素(就像你现在做的那样)。如果从0开始,你会得到一个ArrayIndexOutOfBoundsException。我的建议是从1开始,第一次在外面做(之前)循环。什么是
函数不正确
顺便说一句?他没有使用传递的数组
Lane
。你认为这将如何工作?你知道我的假设。我认为他正在检查正确的数组,但在缩短代码时忽略了初始化,但我已经问过他对
函数不正确
@Shashan意味着什么kKadneI认为他放弃了newLane的初始化以缩短thr代码。他明确表示,由于他更改了for-loop,它的
功能不正确。
。我认为他没有这样做。不,他不想在前面得到0,他希望它与数组中的前一个条目交换,并且只有当它的前一个不是0.Bu时t
与数组中的前一个条目交换,并且只有当它的前一个条目不是0时,才意味着
在前面获取所有的0
。是的,但不是在一个方法调用中。在Brian Webster编辑之前,这是一个汽车游戏,记得吗?所以这个方法被称为
down
,我想这是
down
的缩写。大多数游戏都不是这样说
你想从A到B?幸运的是,我们只需进行数组排序,这样你就不必做所有困难的事情,只需等待几毫秒。
这将始终返回一个0的数组。
 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 ;
}