为什么在将新元素插入java数组时采用负索引值?

为什么在将新元素插入java数组时采用负索引值?,java,arrays,indexing,Java,Arrays,Indexing,我试着用java代码将新元素插入数组,除了一行代码:“int newindex=-index-1;”之外,我了解大部分程序。为什么在索引前面使用负号 以下是完整的程序: public class ArrayManipulation2 { public static void main(String[] args) { int[] array = {6,3,5,2,-9,-5,-1,0}; Arrays.sort(array); prin

我试着用java代码将新元素插入数组,除了一行代码:“int newindex=-index-1;”之外,我了解大部分程序。为什么在索引前面使用负号

以下是完整的程序:

public class ArrayManipulation2 {

    public static void main(String[] args) {

        int[] array = {6,3,5,2,-9,-5,-1,0};
        Arrays.sort(array);
        printArray(array);

        int index= Arrays.binarySearch(array, 1);
        int newindex = -index-1;

        array = insertElement(array, 1, newindex);
        printArray(array);
    }


    public static void printArray(int[] array){

        for(int i=0; i<array.length; i++){
            if(i!=0){
                System.out.print(", ");
            }
            System.out.print(array[i]);
        }
        System.out.println();

    }

    public static int[] insertElement(int[] orginal, int element, int index){
        int length = orginal.length;
        int[] destination = new int[length+1];
        System.arraycopy(orginal, 0, destination, 0, index);
        destination[index]=element;
        System.arraycopy(orginal, index, destination, index+1, length-index);

        return destination;

    }
} 
公共类数组操作2{
公共静态void main(字符串[]args){
int[]数组={6,3,5,2,-9,-5,-1,0};
数组。排序(数组);
打印阵列(数组);
int index=Arrays.binarySearch(数组,1);
int newindex=-index-1;
数组=插入元素(数组,1,newindex);
打印阵列(数组);
}
公共静态void打印数组(int[]数组){
for(int i=0;i如果该项不在数组中,则返回一个负值,这样它就可以区分该项是否在数组中以及该项是否在数组中

如果不考虑结果为正的情况,则代码不正确。

背景:

该方法返回

搜索键的索引(如果它包含在数组中);否则,((插入点)–1)。插入点定义为将键插入数组的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定的键,则定义为a.length。请注意,这保证了当且仅当找到键时,返回值将>=0

因此,建议在排序数组中使用此API,否则它可能返回意外的返回值

那么,让我澄清一下守则:
如果找不到元素,该方法将返回值“((插入点)–1”,然后获取其“相反的编号”,因此值可以是插入+1,然后是负1,我们可以得到它正确的插入位置,这看起来很奇怪。你确定代码有效吗?如果有效,应该对任何巧妙的索引技巧进行评论。我认为这只起作用,因为
1
不在数组中,所以“索引”将为-1,
newindex
变为
0
。可能只是(坏)示例代码。根据搜索键的javadocs索引,如果它包含在数组中,则为(((插入点)-1)。插入点定义为将键插入数组的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定的键,则定义为a.length。请注意,这保证了当且仅当找到键时返回值将>=0。当我删除负索引时x值,我得到了“索引越界异常”。遗憾的是,没有解释代码的注释。对引用的文本使用引号格式,并引用您的来源。仍然不完整,因为您仍然没有引用您的答案。完成您的答案真的需要20分钟吗?@EJP,您是对的,这是我的错,但不是因为我需要20分钟完成我的答案,而是因为我不应该在完全检查之前发布我的答案!