【JAVA学习笔记】52 - 本章作业

news2025/1/11 5:57:06

1.字符反转

 注意String是final的不能改变需要toCharArray改成char数组

返回String需要将char改成valueOf改为String

public class HomeWork01 {
    public static void main(String[] args) {
        String str = "0123456789";
        //改变的是char,和str无关
        try {
            System.out.println(reverse(str,1,5));//0543216789
            System.out.println(reverse(str,4,5));//0123546789
            System.out.println(reverse(str,2,5));//0154326789
            System.out.println(reverse(str,7,5));//0154326789
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return;
        }

        //想改变str直接str = rever(str,start,end);即可
    }
    public static String reverse(String str,int start,int end){
        //需要对输入的参数做一个验证
        if(!(str.length() > end && end > start && start > 0 && str!=null)){
            throw new RuntimeException("参数不正确");
        }
        char[] chars = str.toCharArray();//返回的是new的
        char temp;
        for (int i = 0; i < (end - start) / 2 + 1; i++) {
            if(start + i == end + i){
                break;
            }
            temp = chars[start + i];
            chars[start + i]= chars[end - i];
            chars[end - i] = temp;
        }

        String str1 = String.valueOf(chars);
        return str1;
    }
}

 

和老师的代码原理大差不差

public class Homework01 {
    public static void main(String[] args) {
        //测试
        String str = "abcdef";
        System.out.println("===交换前===");
        System.out.println(str);
        try {
            str = reverse(str, 1, 4);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return;
        }
        System.out.println("===交换后===");
        System.out.println(str);
    }

    /**
     * (1) 将字符串中指定部分进行反转。比如将"abcdef"反转为"aedcbf"
     * (2) 编写方法 public static String reverse(String  str, int start , int end) 搞定
     * 思路分析
     * (1) 先把方法定义确定
     * (2) 把 String 转成 char[] ,因为char[] 的元素是可以交换的
     * (3) 画出分析示意图
     * (4) 代码实现
     */
    public static String reverse(String str, int start, int end) {


        //对输入的参数做一个验证
        //老韩重要的编程技巧分享!!!
        //(1) 写出正确的情况
        //(2) 然后取反即可
        //(3) 这样写,你的思路就不乱
        if(!(str != null && start >= 0 && end > start && end < str.length())) {
            throw new RuntimeException("参数不正确");
        }

        char[] chars = str.toCharArray();
        char temp = ' '; //交换辅助变量
        for (int i = start, j = end; i < j; i++, j--) {
            temp = chars[i];
            chars[i] = chars[j];
            chars[j] = temp;
        }
        //使用chars 重新构建一个String 返回即可
        return new String(chars);

    }
}

2.异常处理

public class HomeWork02 {
    public static void main(String[] args) {
        Person person = new Person();
        while (!person.enterInfo()) {}
    }
}

class Person {
    Scanner scanner = new Scanner(System.in);
    private String name;
    private String password;
    private String mail;

    public Person() {
    }

    public boolean enterInfo() {
        try {
            System.out.println("请输入名字长度为2 3 4");
            judeName(scanner.next());
            System.out.println("请输入六位密码");
            judePassword(scanner.next());
            System.out.println("请输入邮箱,带有@以及.且@在.之前");
            judeMail(scanner.next());

        } catch (Exception e) {
            System.out.println(e.getMessage());
            System.out.println("请重新尝试");
            return false;
        }
        System.out.println("注册成功");
        return true;
    }

    public void judeName(String name) {
        if (2 <= name.length() && name.length() <= 4) {
            this.name = name;
        } else {
            throw new RuntimeException("名字长度错误");
        }
    }

    public void judePassword(String password) {
        char[] chars = password.toCharArray();
            if (chars.length != 6) {
                throw new RuntimeException("密码长度错误");
            }
            for (int i = 0; i < chars.length; i++) {
                if (!(chars[i] < 58 && chars[i] > 47)){
                    throw new RuntimeException("密码包含非数字元素");
                }
            }
        this.password = String.valueOf(chars);
    }

    public void judeMail(String mail) {
        int index1 = mail.lastIndexOf('@');
        int index2 = mail.lastIndexOf('.');
        if (index1 > index2) {
            throw new RuntimeException("格式错误 @必须在.之前");
        }
        if(index1 == -1){
            throw new RuntimeException("格式错误 必须含有@");
        }
        if(index2 == -1){
            throw new RuntimeException("格式错误 必须含有.");
        }

        this.mail = mail;
    }
}

 老师的代码

public class Homework02 {
    public static void main(String[] args) {

        String name = "abc";
        String pwd = "123456";
        String email = "ti@i@sohu.com";

        try {
            userRegister(name,pwd,email);
            System.out.println("恭喜你,注册成功~");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

    }

    /**
     * 输入用户名、密码、邮箱,如果信息录入正确,则提示注册成功,否则生成异常对象
     * 要求:
     * (1) 用户名长度为2或3或4
     * (2) 密码的长度为6,要求全是数字  isDigital
     * (3) 邮箱中包含@和.   并且@在.的前面
     * <p>
     * 思路分析
     * (1) 先编写方法 userRegister(String name, String pwd, String email) {}
     * (2) 针对 输入的内容进行校核,如果发现有问题,就抛出异常,给出提示
     * (3) 单独的写一个方法,判断 密码是否全部是数字字符 boolean
     */
    public static void userRegister(String name, String pwd, String email) {

        //再加入一些校验
        if(!(name != null && pwd != null && email != null)) {
            throw  new RuntimeException("参数不能为null");
        }

        //过关
        //第一关
        int userLength = name.length();
        if (!(userLength >= 2 && userLength <= 4)) {
            throw new RuntimeException("用户名长度为2或3或4");
        }

        //第二关
        if (!(pwd.length() == 6 && isDigital(pwd))) {
            throw new RuntimeException("密码的长度为6,要求全是数字");
        }

        //第三关
        int i = email.indexOf('@');
        int j = email.indexOf('.');
        if (!(i > 0 && j > i)) {
            throw new RuntimeException("邮箱中包含@和.   并且@在.的前面");
        }


    }

    //单独的写一个方法,判断 密码是否全部是数字字符 boolean
    public static boolean isDigital(String str) {
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] < '0' || chars[i] > '9') {
                return false;
            }
        }
        return true;
    }

}

3.字符串的方法使用

public class HomeWork03 {
    public static void main(String[] args) {
        String name = "Yin xiao Hai";
        printName(name);
    }
    public static void printName(String name){
        if(name == null){
            System.out.println("不能为空");
            return;
        }
        //对接受的字符串分割
        String[] str = name.split(" ");
        if (str.length != 3){
            System.out.println("输入的字符串格式不对");
            return;
        }
        System.out.println(String.format("%s,%s .%c" ,str[2],str[0],str[1].toUpperCase().charAt(0)));
    }
}

4. 判断大写小写数字个数

public class HomeWork04 {
    public static void main(String[] args) {
        int countA = 0;
        int counta = 0;
        int countNum = 0;
        //转成数组判断
        String name = "Yinhai#3612";
        //也可以用str.charAt(i)
        char[] names = name.toCharArray();
        for (int i = 0; i < names.length; i++) {
            if (names[i] <= 'Z' && names[i] >= 'A'){
                countA++;
            }
            if (names[i] <= 'z' && names[i] >= 'a'){
                counta++;
            }
            if (names[i] <= '9' && names[i] >= '0'){
                countNum++;
            }
        }
        System.out.println("该字符串共有" + countA + "个大写字母"
                + counta + "个小写字母" + countNum + "个数字");
    }
}

5.字符串的内存分布(多看看)

错了一个 没有重写,就是用Object的equals,判断的是地址相等,还错了一个s1==s4看错了,然后就是最后的那个,会使用Builder在常量池内创建新的hellohspedu然后用t1指向value指向该常量池,在前面的String类中有讲,多看看。然后t2直接指向已经有的

public class HomeWork05 {
    public static void main(String[] args) {
        String s1 = "hspedu";
        Animal a = new Animal(s1);
        Animal b = new Animal(s1);
        System.out.println(a == b);
        System.out.println(a.equals(b));
        System.out.println(a.name == b.name);
        String s4 = new String("hspedu");
        String s5 = "hspedu";

        System.out.println(s1 == s4);
        System.out.println(s4 == s5);

        String t1 = "hello" + s1;
        String t2 = "hellohspedu";
        System.out.println(t1.intern() == t2);


    }
}

class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1147169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目|金额场景计算BigDecimal使用简记

前言 在实际项目开发中&#xff0c;我们经常会遇到一些金额计算&#xff0c;分摊等问题&#xff0c;通常我们都使用java.math.BigDecimal 来完成各种计算&#xff0c;避免使用浮点数float,double来计算金额&#xff0c;以免丢失精度&#xff0c;以下是博主部分使用场景和使用Bi…

element-plus走马灯不显示

问题描述 依赖正确&#xff0c;代码用法正确&#xff0c;但是element-plu走马灯就是不显示&#xff01;&#xff01; <div class"content"><el-carousel height"150px" width"200px"><el-carousel-item v-for"item in 4&qu…

联想电脑thinkpad x13摄像头打不开,史上最全的针对联想电脑摄像头的解决方案

前言 最近面试&#xff0c;临近面试的前30min&#xff0c;发现摄像头打不开。具体情况如下&#xff1a; 这可没把我吓坏&#xff0c;我可是要露脸的&#xff0c;最后在我的不屑努力下&#xff0c;我选择了手机视频面试&#xff0c;很干。未来的几天都在琢磨这玩意儿了&#…

Docker 部署spring-boot项目(超详细 包括Docker详解、Docker常用指令整理等)

文章目录 DockerDocker的定义Docker有哪些作用Docker有哪些好处使用docker部署springboot项目安装docker创建Dockerfile镜像文件执行镜像文件(Dockerfile文件)查看Docker镜像启动容器查看Docker中运行的容器查看服务容器日志 Docker常用指令查看docker安装目录启动Docker停止Do…

MGRE环境下的OSPF

实验拓扑 需求 1 R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2 R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c;R1为中心站点 3 所有私有网段可以互相通讯&#xff0c;私有网段使用OSPF完成。 IP规划 配置IP R1 # interface GigabitEt…

第三次ACM校队周赛考核题+生活随笔

本周ACM校队周赛考核题 1.简单数学&#xff08;签到题&#xff09; 题目&#xff1a; Joker想要买三张牌&#xff0c;但是三张牌太少了&#xff0c;老板不卖&#xff0c;除非Joker算出老板给出的数学题。 现在老板给出t组数据&#xff0c;每一组数据有三个数a,b,c&#xff0c…

【从0到1设计一个网关】整合Nacos-服务注册与服务订阅的实现

文章目录 Nacos定义服务注册与订阅方法服务信息加载与配置实现将网关注册到注册中心实现服务的订阅 Nacos Nacos提供了许多强大的功能&#xff1a; 比如服务发现、健康检测。 Nacos支持基于DNS和基于RPC的服务发现。 同时Nacos提供对服务的实时的健康检查&#xff0c;阻止向不…

【JavaSE】运算符详解及与C语言中的区别

在文章的最后&#xff0c;总结了Java与C语言的某些不同点 目录 一、什么是运算符 二、算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符/-- 三、关系运算符 四、逻辑运算符&#xff08;重点&#xff09; 1.逻辑与&& 2.逻辑或|| 3.逻辑非 4.补…

SQL Server 安装失败 服务“MSSQLServerOLAPService”启动请求失败 一定有效的解决方案

问题描述 首次安装 SQL Server 2022&#xff0c;在安装结束时出现弹窗“无法启动服务。原因&#xff1a;服务“MSSQLServerOLAPService”启动请求失败”。 点击“确定”按钮后&#xff0c;出现新弹窗。 问题原因 在Windows服务中手动启动“MSSQLServerOLAPService”&#x…

建筑木模板现货供应,广东隧道地铁木模板批发。

我们是一家专业供应建筑木模板的公司&#xff0c;提供广东地区的现货供应服务。我们特别推荐我们的隧道地铁木模板&#xff0c;专为隧道和地铁工程而设计&#xff0c;为工程施工提供优质可靠的支撑材料。我们的隧道地铁木模板采用高品质的木材制造而成&#xff0c;具有卓越的强…

muduo源码剖析之Buffer缓冲区类

简介 Buffer封装了一个可变长的buffer&#xff0c;支持廉价的前插操作&#xff0c;以及内部挪腾操作避免额外申请空间 使用vector作为缓冲区(可自动调整扩容) 设计图 源码剖析 已经编写好注释 buffer.h // Copyright 2010, Shuo Chen. All rights reserved. // http://c…

msvcp140.dll丢失的正确解决方法

在使用电脑中我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的msvcp140.dll文件。本文将介绍6个不同的解决方法&#xff0c;帮助读者解决…

java lombok

Lombok是一个实用的Java类库&#xff0c;可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。 通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法&#xff0c;并可以自动化生成日志变量&#xff0c;简化java开发、提高效率&#…

AI:39-基于深度学习的车牌识别检测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

不用动脑子的技巧!已知二叉树的前序中序遍历,确定二叉树/求后序遍历

根据前&#xff08;后&#xff09;序、中序&#xff0c;确定二叉树&#xff0c;高妙的方法&#xff01;&#xff01;&#xff01; 二叉树的前中后序遍历⏩巧妙的方法&#xff01;根据前序遍历和中序遍历&#xff0c;确定二叉树例题1例题2 根据后序遍历和中序遍历&#xff0c;确…

CS224W3.2——随机游走(Random Walk)

上一文中说道定义节点相似度函数的时候使用Random Walk方法&#xff1a; CS224W3.1——节点Embedding 这节课来说一下Random Walk方法。在这篇中&#xff0c;我们来看一个更有效的相似函数——在图上随机游走的节点共现的概率。我们介绍随机游走背后的直觉&#xff0c;我们将…

中电文思海辉:塑造全球AI能力,持续强化诸多行业战略

【科技明说 &#xff5c; 重磅专题】 中电文思海辉以前就是叫文思海辉&#xff0c; 这是由之前两家上市软件外包公司文思信息和海辉软件合并而来&#xff0c;2018年当时各自股票以1:1的比例进行整合&#xff0c;双方股东各持有新公司50%的股权&#xff0c;合并后新公司名称为文…

私有云:【4】Esxi安装Server2012R2

私有云&#xff1a;【4】Esxi安装Server2012R2 1、使用Esxi安装虚拟机2、启动虚拟机3、安装必要服务及打补丁 1、使用Esxi安装虚拟机 选择esxi虚拟机挂在Win2012的镜像iso 使用Esxi客户端新建虚拟机 设置虚拟机名称及系统作为模板&#xff0c;如图所示 选择数据存储&#xff0…

mysql 增删改查基础命令

数据库是企业的重要信息资产&#xff0c;在使用数据库时&#xff0c;要注意(查和增,无所谓,但是删和改,要谨慎! ) 数据库管理系统(DBMS) :实现对数据的有效组织&#xff0c;管理和存取的系统软件 mysgl 数据库是一个系统&#xff0c; 是一个人机系统&#xff0c;硬件, gs,数据库…

软件设计师做题技巧(下午题)

第一题 数据流图 名词解释外部实体系统外部现实世界存在的物体 矩形表示数据存储一般都是数据库表名 矩形表示数据流数据如何在系统中流动和传输加工/数据处理系统的计算或者操作 圆角矩阵表示数据流图等级数据流图等级是指所涉及的数据项和处理的复杂程度 采用结构化语言对x…