Java - null 和空字符串的区别,数组的增删改查

5.4、null 和空字符串的区别 (面试题)了解

null :表示没有在内存中开辟任何空间

注意:

  1. 不要使用 null 对象去调用任何的方法和属性!!
  2. 如果你认为对象可能会是 null 的,那么就要进行非 null 判断 if(对象 != null)
  3. null 可以参与比较,但是不能调用方法和属性:if (对象 . equals(null))

空字符串:表示开辟了内存空间,但是没有任何内容,是空的

  1. 可以调用任何的方法和属性
//一般在进行非空判断时,进行两种空判断
String userName = "";
if (str != null && !str.equals("")){
    System.out.println("用户名合法!");
}else {
    System.out.println("用户名不能为空!");
}

注意:数组中有 null ,在判断学生位置时需要注意判断条件

错误写法:if (stuNames[i].equals(studentName))

正确方法:if (stuNames[i] != null && stuNames[i].equals(studentName))

或者:if(studentName.equals(stuName[i])) //null 可以作为被比较对象

5.5、数组的高级应用

数据查找

//编写一个main方法
public static void main(String[] args) {
    //教室有5个位置只坐了四个人,输入要查找的学生姓名,
    //如果找到了这个同学,则输出该同学的座位号
    //如果没有找到,则显示查无此人

    //定义一个变量接收用户输入
    Scanner input = new Scanner(System.in);
    System.out.print("请输入需要查找的学生姓名:");
    String studentName = input.next();

    int flagIndex = -1; //定义一个变量用来存储学生的位置
    //创建存放学生姓名的数组
    String[] stuNames = {"张三","李四","赵强","王五",null};
    for (int i = 0; i < stuNames.length; i++) {
        if (studentName.equals(stuNames[i])){
            flagIndex = i + 1;
            break;
        }
    }
    if (flagIndex == -1){
        System.out.println("查无此人!!");
    }else {
        System.out.println(studentName + "同学的位置是:" + flagIndex);
    }
}

注意:数组中有 null ,在判断学生位置时需要注意判断条件

错误写法:if (stuNames[i].equals(studentName))

正确方法:if (stuNames[i] != null && stuNames[i].equals(studentName))

或者:if(studentName.equals(stuName[i])) //null 可以作为被比较对象

数据新增

//教室有5个位置只坐了四个人,输入要新增的学生姓名,
//1)如果找到了空位置,就把该同学安排到该位置上
//2)如果没有空位置,提示班级已满,没有空位置!
//3)最后输出本班的学生座位表。
//思路
// if for 找到空,把名字给空
//else 没有空

//输入新增同学名字
Scanner input = new Scanner(System.in);
System.out.print("输入新增学生姓名:");
String newStudentName = input.next();

//原本的数组
String[] stuNames = {"tom","jack",null,"rose","brown"};
int findIndex = -1; //存储新同学的位置

//循环遍历找到空位置
for (int i = 0; i < stuNames.length; i++) {
    if (stuNames[i] == null){
        stuNames[i] = newStudentName; //把新学生姓名赋给空位置
        findIndex = i;
        break;
    }

}
if(findIndex == -1){
    System.out.println("坐满了,没有空位置");
}else {
    for (String stuName : stuNames) {
        System.out.print(stuName + "\t");
    }
}

删除数据

//  教室里有5个位置,目前只坐了4个同学,然后输入要删除同学的名字
//        1)如果要删除的同学不存在,提示查无此人,无法删除!
//      2)删除之后输出本班的学生座位表。

//输入删除同学名字
Scanner input = new Scanner(System.in);
System.out.print("输入被删除学生姓名:");
String delStudentName = input.next();

//原本的数组
String[] stuNames = {"tom","jack","rose","brown",null};
int findIndex = -1; //存储删除同学的位置

//for 找到删除的同学
for (int i = 0; i < stuNames.length; i++) {
    if (delStudentName.equals(stuNames[i])){
        findIndex = i;
        for (int j = findIndex; j < stuNames.length - 1; j++) {
            stuNames[j] = stuNames[j+1];
        }
        stuNames[stuNames.length - 1] = null;
        break;
    }
}

//判断有无此人
if (findIndex == -1){
    System.out.println("查无此人");
}else {
    for (String stuName : stuNames) {
        System.out.print(stuName + "\t");
    }
}

任意位置插入数据

/*
* 教室里有5个位置,目前只坐了4个同学,然后输入要插入新同学的名字
*     1)输入在哪个同学前面插入新同学
*     2)如果该同学不存在,提示查无此人,插入失败!
*     3)最后输出本班的学生座位表。
* */
//思路
//旧同学的位置为 fiindIndex ,赋给新同学
//减序,从后往前,把前一个给后一个

Scanner input = new Scanner(System.in);
System.out.print("输入新学生姓名:");
String newStudentName = input.next();
System.out.print("输入旧学生姓名:");
String oldStudentName = input.next();

//原本的数组
String[] stuNames = {"tom","jack","rose","brown",null};
int findIndex = -1; //存储旧同学的位置

//把名字排好位置
for (int i = 0; i < stuNames.length; i++) {
    if (stuNames[i] != null && stuNames[i].equals(oldStudentName)){ //字符串的比较一定要用 equals !!!
        findIndex = i;
        for (int j = stuNames.length - 1; j - 1 >= findIndex; j--) {
            stuNames[j] = stuNames[j - 1];
        }
        break; //找到了旧同学的位置就不需要再进行外层循环了。
    }
}

//输出
if (findIndex == -1){
    System.out.println("不存在" + oldStudentName + "这个同学");
}else {
    stuNames[findIndex] = newStudentName;
    for (String stuName : stuNames) {
        System.out.print(stuName + "\t");
    }
}

修改数据

//教室有5个位置,目前只有了4个同学,然后输入新同学的名字
// 1)输入被替换同学的名字
// 2)如果被替换同学不存在,提示查无此人,替换失败!
// 3)最后输出本班的学生座位表。
Scanner input = new Scanner(System.in);
System.out.print("输入新学生姓名:");
String newStudentName = input.next();
System.out.print("输入被替换的学生姓名:");
String oldStudentName = input.next();

//原本的数组
String[] stuNames = {"tom","jack","rose","brown",null};
int findIndex = -1; //存储被替换的同学的位置

for (int i = 0; i < stuNames.length; i++){
    if (oldStudentName.equals(stuNames[i])){
        stuNames[i] =newStudentName;
        findIndex = i;
        break;
    }
}

if (findIndex == -1){
    System.out.println("查无此人,替换失败!");
}else {
    System.out.println(Arrays.toString(stuNames));

}

5.7、冒泡排序

规则:

把数组中前后2个元素进行比较,(升序排序的话),把大的数往后排,把小的数往前排;交换元素的位置,然后再把后面的元素前后

再依次比较。

案例

int[] arr = {47,89,56,34,98,23};
System.out.println(Arrays.toString(arr)); //把数组中的元素打印出来
for (int i = 0; i < arr.length-1; i++) {
    for (int j = 0; j < arr.length-1-i; j++) {
        if (arr[j] > arr[j+1]) {
            int temp = arr[j+1];
            arr[j+1] = arr[j];
            arr[j] = temp;
        }
    }
    System.out.println(Arrays.toString(arr));
}

posted @   Thecong  阅读(259)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示