Java数组增删改查(CRUD)问题⼀篇解决
⼀、数组CURD是什么意思
数组是⼀个存储数据的容器,操作数据的⽅式: CRUD--增删改查
C: Create增加数据
R: Retrieve查询数据
U: Update修改数据
D: Delete删除数据
1、增加数据:通过索引/编号/⼲标,可以直接在指定位置增加数据
2、查询数据:通过索引/编号/下标,可以直接查询指定位置的数据
3、修改数据:通过索引/编号/下标,可以直接查询到指定位置的数据,使⽤新的数据替换原有的数据
4、删除数据:删除数据⽐较特殊,有逻辑删除及物理删除两种⽅式
逻辑删除--使⽤null替换数据,模拟表⽰数据已经被删除 (推荐使⽤)
物理删除--[不可能改变数组的长度,指定删除数据的位置空间不能修改]
删除指定位置的数据,后⾯所有位置的数据索引减少1
逻辑删除: java中使⽤null表⽰空、没有任何东西 例:names[0] = null; 逻辑删除了索引=0的数据
物理删除数据涉及到数组迁移问题。
数组迁移
⼀、数组添加数据:
注意:数组有定长特性,长度⼀旦指定,不可更改。因此在添加数据时判断是否⽤到数组迁移,若⽤到数组迁移则需要创建⼀个新数组将旧数组的值赋值给新数组。
⼆、数组删除数据:
物理删除:删除数组中索引位置的数据[索引位置都会删除]
①理论上的物理删除模式,不可以实现,数组长度不可以改变!
②删除索引位置的数据,后⾯所有数据索引-1
⼆、练习题
1、增加数据
⼀、不涉及数组迁移的增加数据
练习题1:游戏⼈物可以穿戴的装备数量为7个,有⼀个初始⼈物装备为{null, null, "破晓", "电⼑", null, "破军", "普通草鞋"},其中null表⽰该位置没有穿戴装备。现在要求给游戏⼈物添加3件装备,装备名字由控制台输⼊,只能装备在没有穿戴的位置。最后输出所有装。
import java.util.Arrays;
import java.util.Scanner;
public class Player {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[] array = {null, null, "破晓", "电⼑", null, "破军", "普通草鞋"};
/*
* 思路:
* 1、循环遍历数组,查出数组那个位置为null
* 2、如果为null,则在这个索引位置添加⼀件装备
* 3、最后输出添加装备后的数组保定风景
*/
for (int i = 0; i < array.length; i++) {
if (array[i] == null) {
System.out.print("请输⼊你的第" + (i + 1) + "件装备:");
array[i] = ();
}
}
System.out.String(array));
}
}
运⾏结果:
⼆、涉及数组迁移的增加数据
练习题2:已知班级⼩组中有五位学⽣{"⼩天","张三","李四","王五","⽼六"}其座位按该表顺序来坐,现在有⼀位学⽣“⼩玲”转校来到该班级并分配到该⼩组中,并分配其座位在⼩天后⾯张三前⾯,请输出该座位表。
import java.util.Arrays;
public class Demo11 {
public static void main(String[] args) {
String[] array = {"⼩天", "张三", "李四", "王五", "⽼六"};
String[] newArray = new String[array.length + 1];
int index = 0;
// 1、出“⼩天”的位置
for (int i = 0; i < array.length; i++) {
if (array[i].equals("⼩天")) {
index = i;
}
}
// 2、遍历原数组,将原数组的值赋值给新数组
for (int i = 0; i < array.length; i++) {
newArray[i] = array[i];
}
// 3、从检索index位置开始遍历原数组,将新数组的数据依次往后移动
for (int i = array.length; i > index; i--) {
newArray[i] = newArray[i - 1];
}
// index+1就是⼩玲的座位,需要给它赋值,不然这个座位输出index的信息
newArray[index + 1] = "⼩玲";
System.out.String(newArray));
}
爱转角遇见了谁歌词}
运⾏结果:
2、查询数据
思路:查询数据⼀般都会涉及到遍历数组查询,因此会⽤到循环,判断语句。
练习题1:已知数组:{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},编写程序实现猜数字:输⼊⼀个数字,输出该数字是否存在于该数组中,如果存在则输出其下标位置。
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输⼊⼀位整数:");
int num = Int();
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int index = 0; //索引,⽤来检查输⼊的数字是否存在于该数组中
for (int i = 0; i < array.length; i++) {
if (array[i] == num) {
index = i;
}
}
System.out.println("index=" + index);
}
}
运⾏结果:
3、修改数据
修改数据思路:通过索引/编号/下标,可以直接查询到指定位置的数据,使⽤新的数据替换原有的数
据
练习题1:定义⼀个长度为5的字符串数组。循环输⼊5个姓名。然后再输⼊⼀个⽤户的姓名,检查数组中是否有这个⼈的姓名,并输出所在下标,然后修改该姓名为⼀个新的名字,这个名字由控制台输⼊,最后打印所有姓名。
import java.util.Arrays;
import java.util.Scanner;
public class Example {
public static void main(String[] args) {
安徽名人Scanner scanner = new Scanner(System.in);
String[] array = new String[5];
boolean flag = true;
for (int i = 0; i < array.length; i++) {
System.out.print("请输⼊姓名:");
array[i] = ();
}
System.out.println("输⼊后的数组:" + String(array));
System.out.print("请录⼊需要查的姓名:");
String name = ();
for (int i = 0; i < array.length; i++) {
if (array[i].equals(name)) {
flag = false;
System.out.println("有这个⼈的姓名,其数组下标为:"+i);
刘楚恬爸爸妈妈System.out.print("请录⼊新姓名:");
name = ();
array[i] = name;
}
}
if (flag) {
System.out.println("没有该姓名");
}
System.out.println("数组为:" + String(array));
}
}
运⾏结果:
4、删除数据
删除数据数据要理解⼀个概念:数组的长度⼀旦被定义就不能改变。
⼀、不涉及数组迁移的删除数据---逻辑删除
练习题1:在歌唱⽐赛中,共有10位评委进⾏打分,在计算歌⼿得分时,去掉⼀个最⾼分,去掉⼀个最低分,然后剩余的8位评委的分数进⾏平均,就是该选⼿的最终得分。使⽤控制台输⼊每个评委的评分,最后计算输出该选⼿的得分。
import java.util.Arrays;
俏皮话public class Test {
public static void main(String[] args) {
int[] array = {80, 190, 78, 90, 90, 99, 100, 80, 30, 88};
int max = array[0];
int min = array[0];
int maxIndex = 0; //最⼤值索引
int minIndex = 0; //最⼩值索引
int sum = 0;
int average;
// 出最⼤值和最⼩值的下标
for (int i = 0; i < array.length; i++) {
if (max < array[i]) {
max = array[i];
maxIndex = i;
}
if (min > array[i]) {
min = array[i];
minIndex = i;
}
}
// 将最⼤值、最⼩值“删除”
for (int i = 0; i < array.length; i++) {
if (i == maxIndex || i == minIndex) {
array[i] = 0; //因为数组为整数型,因此将其赋值为0⽽不是null
} else {
sum += array[i];
廊坊市电子信息工程学校赵丽颖}
}
// 输出数组、平均分
average = sum / (array.length - 2);
System.out.String(array));
System.out.println("平均分average=" + average);
}
}
运⾏结果:
发布评论