数组元素的删除
删除第一个操作是排序,第二个操作是查找,你可以不排序,但一定要查找
如果不排序,只能用普通的查找,排序了可以用二分查找法
首先要先找到要删除数字的下标,在进行覆盖,后面一个赋给前面一个,总个数减1
8 16 19 25 29 35 48
deleteNum = 25
1.找到要删除元素的下标 deleteIndex = 3
2.从要删除下标开始,后面一个元素值给前面一个元素-覆盖
nums[i] = nums[i+1]
3.数组总长度减1
只是障眼法,并不是真正地删掉了,由于数组的特殊性,数组大小一旦确定就无法改变
import java.util.Arrays;
import java.util.Scanner;
public class DeleteDemo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
final int N = 10;
int[] nums = new int[N];
for (int i = 0; i < nums.length; i++) {
nums[i] = (int)(Math.random()*1000)%201;
}
System.out.println("排序前:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + "\t");
}
System.out.println();
Arrays.sort(nums);
System.out.println("排序后:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + "\t");
}
System.out.println();
System.out.println("请输入要删除的元素:");
int deleteNums = input.nextInt();
int deleteIndex = -1;
int low =0;
int high =nums.length - 1;
while(high >= low){
int mid =(high + low) / 2;
if(deleteNums < nums[mid]){
high = mid -1;
}else if(deleteNums > nums[mid]){
low = mid +1;
}else{
System.out.println("找到了要删除元素的下标为:" + mid);
deleteIndex = mid;
break;
}
}
if(deleteIndex == -1){
System.out.println("很抱歉,没有找到您要删除的元素");
System.exit(0);
}
System.out.println("删除后:");
int count = nums.length;
count--;
for (int i = deleteIndex; i < nums.length-1; i++) {
nums[i] = nums[i + 1];
}
for (int i = 0; i < count ; i++) {
System.out.print(nums[i] + "\t");
}
input.close();
}
}