Java 使用1 for循环将整数插入数组

Java 使用1 for循环将整数插入数组,java,arrays,sorting,Java,Arrays,Sorting,我正在尝试编写一个方法,该方法接受一个排序数组和一个整数,并返回一个新的排序数组,其中整数位于正确的位置 我试图在不使用动态数组的情况下实现这一点,并且只使用1 for循环-我使用了一种不同的方法来实现这一点 方法如下: public static int[] insert(int[] a, int k) { int j = 0; int[] s = new int[a.length + 1]; for(int i = 0; i < a.length; i++) {

我正在尝试编写一个方法,该方法接受一个排序数组和一个整数,并返回一个新的排序数组,其中整数位于正确的位置

我试图在不使用动态数组的情况下实现这一点,并且只使用1 for循环-我使用了一种不同的方法来实现这一点

方法如下:

public static int[] insert(int[] a, int k) {
    int j = 0;
    int[] s = new int[a.length + 1];
    for(int i = 0; i < a.length; i++) {
        if(k < a[i] && j == 0) {
            s[i] = k;
            j++;
        } else {
            s[i + j] = a[i];
        }
    }
    return s;
}
我正在尝试插入一个5

这个方法的问题是,它总是将插入的整数后面的索引设置为0。在这种情况下,它将存储并打印

1, 2, 3, 4, 5, 0, 7, 8
而不是

1, 2, 3, 4, 5, 6, 7, 8

谢谢

它没有将索引设置为零,只是跳过了一个索引。当
k
为真时,它将递增
i
(在for循环中)和
j
(在
j++
语句中)。因此,当您下次执行
s[i+j]=a[i]
时,它将跳过两个位置,而不是一个


解决方案是确保在循环的每次迭代中复制原始数组中的值。换句话说,一旦你将
k
分配给
s[i]
你就需要将
a[i]
分配给
s[i+1]
。实现这一点的最简单方法是删除
else
子句,并在每次迭代中执行
s[i+j]

您可能需要使用替代方法。不要使用循环,而是使用Arrays对象添加和排序数组

例如:

public int[] insert(int[] a, int k) {
    // create a copy of int array parameter and add one to the length
    int[] s = Arrays.copyOf(a, a.length + 1);

    // add the second parameter at the end of the new array
    s[s.length - 1] = k;

    // sort the array
    Arrays.sort(s);

    return s;
}
public static int[]insertintosorterDarray(int[]数组,int k){
int[]newArray=newint[array.length+1];
int i=0;//用于数组
int j=0;//用于新数组
布尔插入=假;
while(i
它将如何打印4您的
阵列1中没有4
?并插入已存在于
数组1
中的5。您不需要“else”。其中有一些方便的函数可以help@matt你说得对!谢谢,只需添加
s[i+j]=a[i]j++
之后的
if
中进行编码>以复制插入位置的值。或者干脆删除
else
part你是对的,你知道如何让它只跳过1个索引吗?我以前试过s[I]=a[I],很明显,我只是得到了我的插入的副本。是的,我会在回答中给出一些提示。结果是“else”导致了跳过,嗯
public int[] insert(int[] a, int k) {
    // create a copy of int array parameter and add one to the length
    int[] s = Arrays.copyOf(a, a.length + 1);

    // add the second parameter at the end of the new array
    s[s.length - 1] = k;

    // sort the array
    Arrays.sort(s);

    return s;
}
   public static int[] insertIntoSortedArray(int[] array, int k) {
    int[] newArray = new int[array.length + 1];
    int i = 0;// for array
    int j = 0;// for new array
    boolean inserted = false;
    while (i < array.length) {
        if (!inserted && k < array[i]) {
            newArray[j] = k;
            inserted = true;
        } else {
            newArray[j] = array[i++];
        }
        j++;
    }
    return newArray;
}