在固定位置插入一个数字到现有数组,将伪代码转换为可执行代码



我正在尝试从老师在课堂上提供的这段伪代码中获取一段可执行的代码,以便我可以逐步了解它是如何工作的,但由于我对 Java 的了解有限(不到一周(,我无法将其转换为给定结构的可执行代码, 请帮忙。

下面是伪代码: 我的目标是将 6 添加到该数组中的第 4 位:arr=[1,3,5,7,8]

public class Class3 {
public static int[] insert(int[]x,int item,int position){
int[] newX= new int[x.length+1];
position =Math.min(x.length, position);
for (int i=0;i<position;i++){
newX[i]=x[i];
}
newX[position]=item;
for (int indexinOld)=position.indexinOld<x.length;indexinOld++){
newX[indexinOld+1]=x[indexinOld]
}

嗨,正如评论中所建议的,您只需要将 newX 作为新数组返回即可。老师提出的问题需要三个步骤来解决:

  1. 创建一个长度可以容纳添加元素的新数组
  2. 添加所有旧元素,
  3. 直到要将新元素从旧数组添加到新数组的位置
  4. 将元素添加到其中,并用旧数组中的剩余元素填充新数组。

    public static int[] insert(int[]x,int item,int position){
    int[] newX= new int[x.length+1];
    position =Math.min(x.length, position);
    for (int i=0;i<position;i++){
    newX[i]=x[i];
    }
    newX[position]=item;
    for (int indexinOld=position+1;indexinOld<x.length+1;indexinOld++){
    newX[indexinOld]=x[indexinOld-1];
    }
    return newX;
    }
    

这是您想要的工作功能。我刚刚编辑了您的第二个 for 循环并将 newX-Array 作为数组返回。

对于其他读者,有一种更简单的方法,无需为此使用 for 循环(也不使用 ArrayLists(

我用了这个:

public static int[] insert(int[]x,int item,int position){
int[] newX= new int[x.length+1];
position =Math.min(x.length, position);
System.arraycopy(x, 0, newX, 0, position);
newX[position]=item;
System.arraycopy(x, position, newX, position+1, x.length-position);
return newX;
}

最简单的方法是使用这样的 ArrayList...

public static int [] insert(int[]x,int item,int position)
{
ArrayList <Integer> list = new ArrayList <> ( Arrays.asList(x) );
list.add(position, item);
return ArrayUtils.toPrimitive(list.toArray(new Integer [0]));
}

但是,因为您是 java 新手,所以我不建议使用此解决方案。在这里替代一个没有ArrayList的解决方案......

public static int[] insert(int [] oldArray, int value, int insertIndex)
{
int [] newArray = new int[oldArray.length + 1];
for(int index = 0; index < newArray.length - 1; ++index)
{
newArray[index < insertIndex ? index : index + 1] = oldArray[index];
}
newArray[insertIndex] = value;
return newArray;
}

一些解释:首先,创建第二个数组,其元素比原始元素多一个。其次,使用原始数组中的值初始化所有插槽。如果计数器等于应插入值的位置,则此算法将跳过此槽。完成循环后,使用给定值初始化插入位置的槽。

最新更新