一、代码书写习惯
Student stu = arr[i]; if(stu != null){ } /*if(arr [i] != null){ }*/两者有什么区别
这两段代码的功能都是判断数组中的元素是否为null。
在第一段代码中,将数组中的元素赋值给了一个临时变量stu,然后通过判断stu是否为null来进行处理。这样做的好处是可以在后续的代码中直接使用stu变量,避免多次访问数组元素。此外,如果需要对stu进行其他操作,也可以方便地进行扩展。
而在第二段代码中,则直接通过arr[i] != null来判断数组元素是否为null。这样做的好处是简洁明了,不需要额外的变量来存储数组元素,节省了内存空间。
总的说来,第一段代码相对于第二段代码,在可读性和扩展性方面更好一些;而第二段代码则更加简洁。具体选择哪种方式取决于具体的使用场景和个人喜好。
/*double sum = 0; for (int i = 0; i < arr.length; i++) { double price = arr[i].getPrice(); sum += price; }*/ double sum = 0; for (int i = 0; i < arr.length; i++) { Goods goods= arr[i]; sum += goods.getPrice(); }
在第二段中,代码 Goods goods = arr[i]; 表示将数组 arr 中的第 i 个元素赋值给了一个名为goods 的变量。
假设 arr 是一个类型为 Goods 的数组,那么 Goods goods = arr[i]; 的含义是将 arr[i] 这个元素的值赋给 goods 变量。这样,我们就可以通过 goods 变量来引用和操作 arr[i] 所代表的对象。
这种赋值操作经常用于循环遍历数组或集合的场景中,通过将数组或集合中的元素赋值给一个临时变量,我们可以对其进行进一步的处理、访问或修改。
需要注意的是,Goods 是一个类(或数据类型)的名称,可以根据实际情况替换为其他类的名称。arr 是一个数组对象,i 是一个索引值,表示数组中的第 i 个元素。
/*int index1 = getIndex(arr, stu2.getId()); 传递的值id直接写要删除的id也可以,使用stu2.getId()也可以*/ int index1 = getIndex(arr, 002);
对于 int index1 = getIndex(arr, stu2.getId());和 int index1 = getIndex(arr, 002); 这两行代码,其实在计算结果上是没有区别的。
在第一行代码中,stu2.getId()获取了一个值,假设为 002,然后将该值作为参数传递给 getIndex 方法。
而在第二行代码中,直接使用数字 002作为参数传递给 getIndex 方法。
无论是通过变量 stu2.getId()获取的值,还是直接使用数字 002,最终都会被当作参数传递给 getIndex 方法进行处理。
因此,在计算结果上,这两行代码是等价的。但需要注意的是,如果 getIndex方法要求的参数类型是字符串类型,那么第二行代码应该改为 int index1 = getIndex(arr, "002");,以将数字 002 转换为字符串类型的参数传递给方法。
二、对应题目代码
定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同 学生的属性:学号,姓名,年龄。 要求1: 再次添加一个学生对象,并在添加的时候进行学号的唯一性判断 要求2:添加完毕之后,遍历所有学生信息。 要求3:通过id删除学生信息 如果存在,则删除,如果不存在,则提示删除失败。 要求4:删除完毕之后,遍历所有学生信息。 要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁
//Tset 测试类
public class Test {
public static void main(String[] args) {
/*定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同
学生的属性:学号,姓名,年龄。
要求1: 再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
要求2:添加完毕之后,遍历所有学生信息。
要求3:通过id删除学生信息 如果存在,则删除,如果不存在,则提示删除失败。
要求4:删除完毕之后,遍历所有学生信息。
要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁*/
//1.创建数组来存储学生对象
// 首先要有一个学生类创建好后回来new一个数组(学生的属性也就是成员变量,学生的行为也就是成员方法)
Student[] arr = new Student[3];//定义数组得给数组的长度
//2.创建学生对象并添加到数组当中
Student stu1 = new Student(001,"张三",21);//有全参就得将属性添加进去ctrl+p可以显示
Student stu2 = new Student(002,"李四",22);
//Student stu3 = new Student(003,"王五",23);
//3.把学生对象添加到数组当中
arr[0] = stu1;
arr[1] = stu2;
//arr[2] = stu3;
//要求1: 再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
//读题拆解1.添加一个学生对象2.学生对象到数组中3.存的时候要判断4.唯一性判断(方法)想想应该添加在数组的前面
Student stu4 = new Student(004,"赵六",24);
//添加学生对象1.数组存满--再创建一个数组,新数组=老数组长度+1
//2.没存满--直接添加
//唯一性判断:目的是为了id不重复(id已存在不添加反之添加) 可以用一个方法去做
boolean flag = ifContains(arr, stu4.getId());//方法会返回一个结果将其传给flag
//对flag做一个判断 对一个Boolean类型的做判断不要写== 可能会写成一个=就成了赋值
if (flag){
//id已存在
System.out.println("当前id存在,请重新输入id");
}else {
//不添加反之添加
//1.数组存满--再创建一个数组,新数组=老数组长度+1
//2.没存满--直接添加 有没有存满也需要判断一下(也可以写一个方法)
int count = getCount(arr);
if (count == arr.length){
//说明已经存满了 要添加一个新数组
//使用一个方法创建一个新数组 要把老数组的元素拷贝到新数组中
Student[] newArr = creatNewArr(arr);
//添加stu4
newArr[count] = stu4;
//要求2:添加完毕之后,遍历所有学生信息。
// 切记这里因为新创建数组添加的元素参数一定要传递newArr
System.out.println("-------添加后的-------");
printArr(newArr);
}else {
//反之没有存满直接存
//[stu1, stu2,nul1]
// getCount获取到的是2,表示数组当中已经有了2个元素
// 还有一层意思:如果下一次要添加数据,就是添加到2索引的位置
arr[count] = stu4;
//要求2:添加完毕之后,遍历所有学生信息。
System.out.println("-------添加后的-------");
printArr(arr);
}
}
//要求2:添加完毕之后,遍历所有学生信息。
//分两种情况一、在老数组里面添加学生对象二、在新数组 (分别写在新老数组里面代码重复,所以再一个方法)
//要求3:通过id删除学生信息 如果存在,则删除,如果不存在,则提示删除失败。
//想要删除就首先得找到id在数组中对应的索引(创建一个方法)
int index = getIndex(arr, stu1.getId());//传递的值id直接写要删除的id也可以,使用stu2.getId()也可以
//System.out.println(index);//此时找到了对应的索引如果存在(index>=0)则删除
//通过id删除学生信息
if(index >= 0){
//[stu1, null ,stu3]删除也就是把index对应的元素置为null
arr[index] = null;
System.out.println("-------删除后的-------");
printArr(arr);
}else {
//如果不存在,则提示删除失败。
System.out.println("当前id不存在,删除失败。");
}
//要求4:删除完毕之后,遍历所有学生信息。 代码放在删除学生信息的后面就好
//此时遍历直接调用printArr方法就好了
//要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁
//首先也得找到id为2的索引在哪
/*int index1 = getIndex(arr, stu2.getId());
传递的值id直接写要删除的id也可以,使用stu2.getId()也可以*/
int index1 = getIndex(arr, 002);
//判断索引
if(index1 >= 0){
Student stu = arr[index1];//将新找到的index1传给stu对象 这样子把这个位置上的元素拿出来也好传回去
int newAge = stu.getAge() + 1;
//拿出来对应人的age之后还要将+1放回去 要用setAge放回去也就是新获取
stu.setAge(newAge);
//遍历数组
System.out.println("-------更改后的-------");
printArr(arr);
}else {
System.out.println("当前id不存在,修改失败");
}
}
//写一个方法找到id在数组中对应的索引
public static int getIndex(Student[] arr,int id){
for (int i = 0; i < arr.length; i++) {
//可以依次得到学生对象
Student stu = arr[i];
//对元素也就是stu做一个非空判断
if(stu != null){
//得到这个sid
int sid = stu.getId();
//得到之后和要查找的id进行比较
if(sid == id){//两个相同才将i索引返回(要查找的id不为空且相等才返回)
return i;
}//不同就i++去查找下一个元素
}
}//当循环结束还没有找到就表示不存在
//那就return一个-1就好了因为没有-1索引存在
return -1;
}
//定义一个方法遍历学生信息
public static void printArr(Student[] arr){//方法不需要返回了直接写void就行
for (int i = 0; i < arr.length; i++) {
//对arr做一个非空判断 因为arr有可能是空的?为什么 因为遍历每一个元素都要进行判断
Student stu = arr[i];
if(stu != null){
System.out.println(stu.getId()+","+stu.getName()+","+ stu.getAge());
}
/*if(arr [i] != null){
}*/
}
}
//定义一个方法创建一个新数组
public static Student[] creatNewArr(Student[] arr){
Student[] newArr = new Student[arr.length + 1];
//将老数组的元素甜添加到新数组当中
//循环遍历得到老数组的每一个元素
for (int i = 0; i < arr.length; i++) {
newArr[i] = arr[i];
}
//把新数组返回
return newArr;
}
//定义一个方法判断数组中已经存了几个元素
public static int getCount(Student[] arr){
//定义一个计数器
int count = 0;
for (int i = 0; i < arr.length; i++) {
//数组中没存的地方就是null
if (arr[i] != null){
//统计 不是null count++
count ++;
}
}
//当循环结束后我就知道了数组中一共有几个元素
return count;
}
//1.我要干嘛 唯一性判断
//2.我干这件事需要什么 才能完成? 数组 id
//3.调用处是否需要继续使用方法的结果 需要--必须返回(√) 不需要--可返可不返
public static boolean ifContains(Student[] arr, int id){
//判断的前提 依次获取到学生对象
for (int i = 0; i < arr.length; i++) {
//这里有个小细节不能直接遍历数组,要判断数组中的每一个元素是否为 null,
// 因为数组如果没装满获取的是null,代码中null是不能直接使用的null调用方法就会报错
//所以在获取元素后需要进行一个非空判断
//有了学生对象之后需要把id拿出来才能进行比较
Student stu = arr[i];
if(stu != null){//元素不是null才做下面的判断
//获取id
int sid = stu.getId();
//比较
if(sid == id){
return true;
}
}
}
//当循环结束之后,还没有找到一样的,那么就表示数组中要查找的id是不存在的。
return false;
}
}
//Student学生类
public class Student {
private int id;//后面也可以是字符串类型
private String name;
private int age;
public Student() {
}
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}