删除数组的常见几种用法

来源:互联网 发布:如何做一名程序员 编辑:程序博客网 时间:2024/06/05 05:11
package com.yjl.am;
*author 作者:岳建立
import java.util.*;
public class DeleteDemo1 {
public static void main(String[] args) {
System.out.println("这是一个插入数据的具体操作程序");
//定义一个原数组
int []arr=new int[]{1,2,3,4,5,6,7,8,9};
System.out.println("输出原数组为:"+Arrays.toString(arr));
//删除时与添加差不多,但添加只能添加一个元素。而删除却可以删除很多个。
//现利用添加一个元素的思想删除元素。
//1.定义一个删除之后的数组,长度为原数组-1.
int []arrNew=new int[arr.length-1];
Scanner scan=new Scanner(System.in);
System.out.println("请输入想要删除的元素");
//2 .保存要删除的元素
int num=scan.nextInt();
//3 .找到删除元素的下标.
int index=-1;//写在上面.
for(int i=0;i<arr.length;i++){
if(num==arr[i]){
index=i;
break;
}
}
//如果仍为-1,说明没有找到这个元素.
if(index==-1){
System.out.println("查无此数");
//必须退出。否则如果输入不存在的值会产生数组下标越界异常.
System.exit(0);
}
System.out.println("输出索引为:"+index);
//为最后一个元素。直接将前面的元素进行赋值.
if(index==arr.length-1){
for(int i=0;i<arrNew.length;i++){
arrNew[i]=arr[i];
}
}else{
//如果不是,按照index的位置进行赋值.
for(int i=0;i<index;i++){
arrNew[i]=arr[i];
}
for(int j=index+1;j<arr.length;j++){
arrNew[j-1]=arr[j];
}
}
System.out.println("输出删除之后的数组为:"+Arrays.toString(arrNew));
scan.close();


}

}

-----------------------------第二种

package com.yjl.am;
*author 作者:岳建立
import java.util.*;
public class DeleteDemo1Reset {
public static void main(String[] args) {
System.out.println("这是一个插入数据的具体操作程序");
//定义一个原数组
int []arr=new int[]{1,2,3,4,5,6,7,8,9};
System.out.println("输出原数组为:"+Arrays.toString(arr));
//删除时与添加差不多,但添加只能添加一个元素。而删除却可以删除很多个。
//现利用添加一个元素的思想删除元素。
//1.定义一个删除之后的数组,长度为原数组-1.
int []arrNew=new int[arr.length-1];
Scanner scan=new Scanner(System.in);
System.out.println("请输入想要删除的元素");
//2 .保存要删除的元素
int num=scan.nextInt();
//3 .找到删除元素的下标.
int index=-1;//写在上面.
for(int i=0;i<arr.length;i++){
if(num==arr[i]){
index=i;
break;
}
}
//如果仍为-1,说明没有找到这个元素.
if(index==-1){
System.out.println("查无此数");
}
//System.out.println("输出索引为:"+index);
//这里先进行替换,然后再给新数组赋值. 如果为最后一个,这里将不进行循环替换。直接交给下一步截取
for(int i=index;i<arr.length-1;i++){
arr[i]=arr[i+1];
}
//这里进行截取0~length-2的数据。如果上一步是最后一个,正好截取。
//for(int i=0;i<arr.length-1;i++){
// arrNew[i]=arr[i];
// }
//进行数组的复制
arrNew=Arrays.copyOf(arr,arrNew.length);
System.out.println("输出删除之后的数组为:"+Arrays.toString(arrNew));
scan.close();
/**
* 可是有一个很大的弊端,如果一个数组中存在多个相同值,而删除的是相同值,那么又该怎么办呢?
* 可以先进行排序,找到所有的下标。然后进行赋值就可以了。
*/
}
}

--------------------------第有三种

package com.yjl.am;
*author 作者:岳建立
import java.util.*;
public class DeleteDemoReset1 {
public static void main(String[] args) {
System.out.println("这是一个插入数据的具体操作程序");
//定义一个原数组
int []arr=new int[]{1,2,4,4,4,5,6,7,8,9};
System.out.println("输出原数组为:"+Arrays.toString(arr));
//int []arrNew=new int[arr.length-1]; 无法在刚开始时就定义数组.
//1.先将数组进行排序,利用排序得到.
Arrays.sort(arr);
Scanner scan=new Scanner(System.in);
System.out.println("请输入想要删除的元素");
//2 .保存要删除的元素
int num=scan.nextInt();
//用查询的思想,具体见ArraySearchDemo1Reset.java程序。
//因为存储的值要比较大小,所以不能用ArrayList,应该用TreeSet
SortedSet <Integer> list=new TreeSet<Integer>();
//3 .找到删除元素的下标.放在list列表里
for(int i=0;i<arr.length;i++){
if(num==arr[i]){
list.add(i);
}
}
//如果仍为-1,说明没有找到这个元素.
if(list.isEmpty()){
System.out.println("查无此数");
}
else if(list.size()==1){
for(int i=list.first();i<arr.length-1;i++){
arr[i]=arr[i+1];
}
int arrNew[]=new int[arr.length-1];
arrNew=Arrays.copyOf(arr,arrNew.length);
//System.out.println("长度为1");
System.out.println("输出删除之后的数组为:"+Arrays.toString(arrNew));
}else{
//说明至少有两个或者两者以上。则上面有大小.
//得到第一个最小索引
int minIndex=list.first();
//得到最大索引
int maxIndex=list.last();
//也可以将list中元素取出来。然后组成list.size()长度的数组。利用数组得到最大最小值.
int arrNew[]=new int[arr.length-list.size()];
//System.out.println("输出索引为:"+index);
//如果maxIndex==arr.length说明到了最后,直接截取到minIndex就行了.
if(maxIndex==arr.length){
arrNew=Arrays.copyOf(arr,arrNew.length);
}else{
//System.out.println("数组值不是最大:"+minIndex+maxIndex);
for(int i=0;i<minIndex;i++){
arrNew[i]=arr[i];
}
//System.out.println("输出此刻的值:"+Arrays.toString(arrNew));
for(int i=minIndex,j=maxIndex+1;j<arr.length;j++,i++){
arrNew[i]=arr[j];
}
}
// System.out.println("长度为2");
System.out.println("输出删除之后的数组为:"+Arrays.toString(arrNew));
}
scan.close();
//然而发现还有一个问题,那就是改变了数组的顺序。则怎么办呢?
}
}

原创粉丝点击