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

时间:2018-05-06 10:05:15

标签: java arrays insert

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

下面是伪代码: 我的目标是在这个数组的第4个位置加6:arr = [1,3,5,7,8]

@GetMapping(value = "/getUser/{id}", headers = "Accept=application/json",
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public ResponseEntity<Object> getUser(@PathVariable(value = "id")Long id) {
    if (id == null) return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    UserInfo userInfo = userService.get(id);


    if (userInfo == null) return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    return new ResponseEntity<>(userInfo, HttpStatus.OK);
}
@GetMapping(value = "/getUsers", headers = "Accept=application/json",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public List<UserInfo> getUsers()
{
    return userService.getAll();
}

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用像这样的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;
}

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

答案 1 :(得分:0)

您好,如评论中所建议您只需要将newX作为新数组返回。老师的问题需要三个步骤才能解决:

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

    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;
    }
    
  4. 这是您想要的工作功能。我刚刚编辑了你的第二个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;
    }