我正在尝试设计一个程序,将数组中的值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;
}
答案 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 ;
}