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

项目代码

https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter13/src/com/yinhai/wrapper_/homework_

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;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ学习01

四大核心概念 生产者 产生数据发送消息的程序是生产者 交换机 交换机是 RabbitMQ 非常重要的一个部件&#xff0c;一方面它接收来自生产者的消息&#xff0c;另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息&#xff0c;是将这些消息推送到特定队…

ZooKeeper中节点的操作命令(查看、创建、删除节点)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

分治法求解棋盘覆盖问题

分治法求解棋盘覆盖问题 如何应用分治法求解棋盘覆盖问题呢&#xff1f;分治的技巧在于如何划分棋盘&#xff0c;使划分后的子棋盘的大小相同&#xff0c;并且每个子棋盘均包含一个特殊方格&#xff0c;从而将原问题分解为规模较小的棋盘覆盖问题。 基本思路 棋盘覆盖问题是…

【音视频|wav】wav音频文件格式详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

BLIP2中Q-former详解

简介 Querying Transformer&#xff0c;在冻结的视觉模型和大语言模型间进行视觉-语言对齐。 为了使Q-Former的学习达到两个目标&#xff1a; 学习到和文本最相关的视觉表示。 这种表示能够为大语言模型所解释。 需要在Q-Former结构设计和训练策略上下功夫。具体来说&…

零资源的大语言模型幻觉预防

零资源的大语言模型幻觉预防 摘要1 引言2 相关工作2.1 幻觉检测和纠正方法2.2 幻觉检测数据集 3 方法论3.1 概念提取3.2 概念猜测3.2.1 概念解释3.2.2 概念推理 3.3 聚合3.3.1 概念频率分数3.3.2 加权聚合 4 实验5 总结 摘要 大语言模型&#xff08;LLMs&#xff09;在各个领域…

Redis(windows+Linux)安装及入门

一、概述 Redis是什么&#xff1f; Redis(Remote Dictionary Server)&#xff0c;即远程字典服务 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数…

Android 主题 vs 样式

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、相关知识3.1 theme&#xff01; st…

取石子

每一堆数量都>1的话可以把合并操作和取石子看成一种操作&#xff0c;总操作数就是sumn-1&#xff0c;为奇数就是Alice先手必胜&#xff0c;哪怕有一堆是2&#xff0c;Bob取后变为1&#xff0c;Alice也可以通过合并操作让1变成>1的数 可以分成两大板块a、b, a中方石子个数…

【Vue】初步认识<script setup>语法糖和组合式 API

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境 1️⃣ &#x1f6eb; 导读 需求 最近写代码的时候&#xff0c;发现<script setup>这样的代码&#xff0c;没见过&#xff0c;好奇&#xff0c;想知道。 所以就有了这篇文章。 很多文章都说setup是vue3的特权。但是&#xff…

图纸管理制度《六》

为建立健全机运系统技术档案管理工作&#xff0c;完整的保存和科学地管理机运系统的技术档案&#xff0c;充分发挥技术档案在我矿建设发展中的作用&#xff0c;更好地为我矿个生产技术部门服务&#xff0c;特制定本管理制度. 1、要把图纸、技术档案管理工作纳入技术业务工作中…

BSTree二叉树讲解

二叉搜索树的概念&#xff1a; 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值…

【MATLAB】安装Psychtoolbox

目录 一、下载Psychtoolbox工具包 1. 一个是这个ZTP文件 2. 分别下载 Subversion 1.7.x command-line client 和 gstreamer.freedesktop.org 二、解压工具包&#xff0c;保存至同一文件 三、安装到matlab 1. 安装psychtoolbox 2. 检查是否安装成功 一、下载Psychtoolbox…

k8s statefulSet 学习笔记

文章目录 缩写: sts创建sts扩缩容金丝雀发布OnDelete 删除时更新 缩写: sts 通过 kubectl api-resources 可以查到&#xff1a; NAMESHORTNAMESAPIVERSIONNAMESPACEDKINDstatefulsetsstsapps/v1trueStatefulSetweb-sts.yaml apiVersion: v1 kind: Service metadata:name: ng…

[UDS] --- CommunicationControl 0x28

1 0x28功能描述 根据ISO14119-1标准中所述&#xff0c;诊断服务28服务主要用于网络中的报文发送与接受&#xff0c;比如控制应用报文的发送与接收&#xff0c;又或是控制网络管理报文的发送与接收&#xff0c;以便满足一定场景下的应用需求。 2 0x28应用场景 一般而言&#…

MAC安装stable diffusion

电脑配置 基本安装 1. 安装python 2. 安装git 3. 下载stable diffusion的代码&#xff0c;地址&#xff1a; git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui 执行命令 ./webui.sh --precision full --no-half-vae --disable-nan-check --api Command…

2023年阿里云双11优惠来了,单笔最高可省2400元!

2023年阿里云双11活动终于来了&#xff0c;阿里云推出了金秋云创季活动&#xff0c;新用户、老用户、企业用户均可领取金秋上云礼包&#xff0c;单笔最高立减2400元&#xff01; 一、活动时间 满减券领取时间&#xff1a;2023年10月27日0点0分0秒-2023年11月30日23点59分59秒 …

商业模式画布的9大模块全解读,产品经理不可不知!

“商场如战场”&#xff0c;在当今瞬息万变的商业环境中&#xff0c;创造出独特且创新的商业模式是每个企业家、策略家和决策者的首要任务。为了在激烈的市场竞争中取得优势&#xff0c;我们需要一个强大且直观的工具来帮助我们规划和塑造公司的商业模式&#xff0c;这个经常被…

Websocket传递JWT令牌

在访问带有[Authorize]的方法的时候&#xff0c;需要前端通过自定义报文头的形式将JWT令牌传递给后端进行验证&#xff0c;否则是不能访问带有[Authorize]的方法。 [Authorize]是用于限制对web应用程序中某些操作或控制器的访问。当[授权]属性应用于操作或控制器时&#xff0c;…

生物信息学分析-blast序列比对及结果详细说明

1. 软件说明 Blast是一种基于序列比对的分析工具&#xff0c;可以用于寻找生物序列之间的同源性&#xff0c;它的全称是Basic Local Alignment Search Tool。 Blast有多种版本和用途&#xff0c;最常见的是基于Web的Blast和本地安装的Blast程序。Web版Blast可以直接在NCBI网站…