我正在尝试使用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;
}
}
我需要知道为什么新索引被指定为&#34; -index-1&#34; ?.
答案 0 :(得分:1)
Short Format会返回一个负值,以便它可以区分项目在哪里(如果项目在哪里)以及它应该在哪里(如果项目不在哪里)。那里。
代码不正确,不适用于结果为正的情况。
答案 1 :(得分:0)
背景:
搜索关键字的索引,如果它包含在数组中;否则,( - (插入点) - 1)。插入点定义为键将插入到数组中的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length。请注意,当且仅当找到密钥时,这可以保证返回值>> =。
因此,建议在已排序的数组中使用此API,否则可能会返回意外的返回值
然后,让我澄清一下代码: 如果找不到元素,该方法将返回值“( - (插入点) - 1)”,然后得到它的“相反数字”,所以值可以是插入+ 1,然后减去1,我们可以得到它右插入位置