方法一:
package delete;
import java.util.Scanner;
public class delete {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int[] num = new int[]{3,6,9,13};
System.out.print("请输入要删除的数:");
int number = input.nextInt();
boolean isFind =false;
int i;
for (i = 0; i < num.length; i++) {
if(number==num[i]){
isFind=true;
break;//找到了
}
}
if(isFind){
System.out.println("数组中有要删除的数字"+number+",在数组num的第"+(i+1)+"项,下标为"+i);
int[] nums=new int[num.length-1];//后续操作
if(i==num.length-1){
for (int j = 0; j < nums.length; j++) {
nums[j]=num[j];
}
}
else{
for (int j2 = i; j2 < num.length-1; j2++) {
num[j2]=num[j2+1];
}
for (int k = 0; k < nums.length; k++) {
nums[k]=num[k];
}
}
for (int j = 0; j < nums.length; j++) {
System.out.print(nums[j]+"\t");
}
}
else{
System.out.print("数组num中没有要删除的数"+number);//没找到
}
}
}
方法二:
package Delete;
import java.util.Scanner;
public class AnotherMethod {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int[] num={3,6,9,12,15};
System.out.println("请输入您要删除的数:");
int number =input.nextInt();
boolean isFind =false;
int i;
for (i = 0; i < num.length; i++) {
if(number==num[i]){
isFind=true;
break;
//找到了要删除的数
}
}
if(isFind){
System.out.println("您输入的要删除的数"+number+",在数组num的第"+(i+1)+"项,下标为"+i);
int[] nums=new int[num.length-1];
for (int j = 0; j < nums.length; j++) {
nums[j]=num[j];
if(j==i){
nums[j]=num[j+1];
i++;
}
}
for (int k = 0; k < nums.length; k++) {
System.out.print(nums[k]+"\t");
}
}
else{
System.out.println("您输入的数在数组num中不存在,无法删除");//没找到要删除的数
}
input.close();
}
}
总结:删除数组中某一项并输出删除后的数组这个问题需要考虑到数组的定长性,不能用集合删除某一项的方法。删除数组中某一项,分为几步:
1.输入要删除的项;
2.遍历数组查找是否存在要删除的项;
3.方法一分两种情况①:要删除的项是最后一项,将原数组中的每一项依次赋值给新数组然后输出;②:要删除的项不是最后一项,从要删除的那一项开始将后面的项依次赋值给该数组的前一项,然后把赋值后的数组每一项赋值给新数组并输出。
方法二将删除后的数组直接赋值给新数组中的每一项并输出,省去了方法一中情况②的步骤。方法二的思路是先依次赋值给新数组,等到遇到要删除的那一项通过之前找到的下标将后一项赋值给新数组的前一项就可以了,省去了代码的数量。
第一种方法思路直接容易想到,第二种方法稍微有点绕但能减少代码数量,提高执行效率。