“高级Java编程复习指南:深入理解并发编程、JVM优化与分布式系统架构“

news2024/12/24 9:05:56




 我的个人主页

接下来我将方享四道由易到难的编程题,进入我们的JavaSE复习之旅。

1:大小写转换------题目链接

解题思路:

 在ASCII码表中,⼤写字⺟A-Z的Ascii码值为65- 90,⼩写字⺟a-z的Ascii码值为97-122。每个字 ⺟⼤⼩写之间的关系为:⼩写字⺟的ascii码值 - 32 = ⼤写字⺟的ascii码值。因此可以利⽤这⼀ 特性,先判断字⺟为⼤写还是⼩写,之后根据 ⼤⼩写决定如何进⾏转换。

参考代码:

​
public class Main {
     public static void main(String[] args) {
          Scanner in = new Scanner(System.in);
          while(in.hasNextLine()){
              String line = in.nextLine();
               if (Character.isLowerCase(line.charAt(0))){
              //if (line.charAt(0) >= 97 && line.charAt(0) <= 122){
                     char c = (char) (line.charAt(0) - 32);
                         System.out.println(c);
              }else{
                 char c = (char) (line.charAt(0) + 32);
                 System.out.println(c);
          }

​

调试结果如图所示:

2. 斐波那契数列------题目链接
解题思路:
由题意可知,斐波那契数列的的第⼀项和第⼆项为1,后续项的⼤⼩为前⼀项和前两项的和,
第三项=第⼀项+第⼆项;
第四项=第⼆项+第三项;
以此类推。
故可以考虑使⽤递归的思路去求第n项的⼤⼩。
例如求第5项时,⼤致图解如下:

参考代码 :

public class Main2{
     public static void main(String[] args) {
         Scanner in = new Scanner(System.in);
         int ret = fib(in.nextInt());
         System.out.println(ret);
     }
         public static int fib(int i) {
         int arr[] = new int[i+1];
 //这⾥让的返回值为了⽅便理解,我们数组的0下标并不做任何有意义的计算(相当于舍弃
了),⽅便后续返回结果的时候直接返回i下标的值即可。
             arr[0] = 0;
             arr[1] = 1;
             arr[2] = 1;
             for (int j = 3; j <= i; j++) {
             arr[j] = arr[j - 1] + arr[j - 2];
         }
         return arr[i];
     }

调试结果如图所示: 

3. 删除公共字符 ------题目链接

解题思路:

这道题的意思是让我们在字符串1(暂记为str1)中删除字符串2(暂记为str2)中包含的字⺟
(注意:空格不会计算在内)此时同学们可能会疑惑⼀个问题,需要注意⼤⼩写问题嘛?再
仔细阅读题⽬的意思,单纯的只是让咱们把str1中包含的str2的字⺟删掉,并不涉及到不区分
⼤⼩写的问题,所以我们还是要区分⼤⼩写问题的。我们可以对str1中的字符串进⾏遍历,
借助⼀个StringBuilder对象进⾏结果的拼接,获取到每个字符后(空格不计,直接进⾏拼
接)去在str2当中去看看有没有相同的字⺟,如果没有,则表⽰不⽤删除,并将其拼接
StringBuilder对象中,如果有,则不进⾏拼接。

参考代码:

1 import java.util.Scanner;
2
3 
4 public class Main {
5     public static void main(String[] args) {
6      Scanner in = new Scanner(System.in);
7         // 注意 hasNext 和 hasNextLine 的区别
8         while (in.hasNextLine()) { // 注意 while 处理多个 case
9         String str1 = in.nextLine();
10         String str2 = in.nextLine();
11         System.out.println(func(str1,str2));
12         }
13     }
14
15     private static String func(String str1, String str2) {
16         StringBuilder stringBuilder = new StringBuilder();
17         for (int i = 0; i < str1.length(); i++) {
18         char c = str1.charAt(i);
19         boolean flag = true;
20         if (c != ' '){
21         for (int j = 0; j < str2.length(); j++) {
22         if (c == str2.charAt(j)){
23             flag = false;
24                 break;
25         }
26     }
27 }
28         if (flag == true){
29             stringBuilder.append(c);
30     }
31 }
32         return String.valueOf(stringBuilder);
33     }
34 }

调试结果:

 解题方法二:

我们可以遍历str1这个字符串,拿到每个字符,看str2当中是否包含当前字符,如果不包含,
难么就拼接到StringBuilder对象当中。直到拿到最后的结果。
难点:
1. String本⾝不包含,如何判断⼀个字符在不在当前字符串当中的⽅法。只有⼀个contains
⽅法。
该⽅法原型如下:
public boolean contains(CharSequence s) {
     return indexOf(s.toString()) >= 0;
 }
我们可以看到参数并不是char类型。那么如何处理呢?请看如下代码:
if(!str2.contains(ch+"")) {
     sb.append(ch);
 }
这⾥只要字符拼接上⼀个空的字符串即可达到⽬标.
参考代码:
public class Main {
 public static void main(String[] args) {
         Scanner in = new Scanner(System.in);
         // 注意 hasNext 和 hasNextLine 的区别
         while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str1 = in.nextLine();
             String str2 = in.nextLine();
             String ret = func(str1,str2);
             System.out.println(ret);
             }
         }
public static String func(String str1,String str2) {
         StringBuilder sb = new StringBuilder();
        for(int i = 0;i < str1.length();i++) {
             char ch = str1.charAt(i);
            if(!str2.contains(ch+"")) {
                sb.append(ch);
                 }
             }
        return sb.toString();
         }
 }
4. 输⼊两个字符串a和b,字符串内容为⼆进制数字,求两个字符串相加的结果, 加法计算⽅法以⼆进制⽅式计算,并返回对应的字符串结果。要求程序尽可能 的⾼效。
题目链接
输⼊描述:
输⼊两个字符串,如"1101", "1100"
输出描述: "11001"
解题思路:
1. 正常数字相加运算⽅式为:
124
456 +
------
580
从后往前进⾏计算,进位也是从后往前。所以,我们应该把输⼊的字符串进⾏逆序。
2. "124" + "456" 这两个字符串逆置后进⾏相加的进位
"421"
"654" +
---------
085 最后将结果字符串逆置即可
3. 进位只有⼀种情况,对应位上都是字符1.

参考代码:

import java.util.Scanner;
         public class Main{

         public static void main(String[] args) {
         Scanner in = new Scanner(System.in);
         // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String a = in.next();//
             String b = in.next();
             System.out.println(add(a, b));
             }
        }
 public static String add(String a, String b) {
         StringBuilder sb = new StringBuilder();
         int lenA = a.length();
         int lenB = b.length();
        int max = Math.max(lenA, lenB);
         StringBuilder stringBuilderA = new StringBuilder(a).reverse();
         StringBuilder stringBuilderB = new StringBuilder(b).reverse();
        // 0110 1111

       boolean isCarry = false;
         for (int i = 0; i < max; i++) {
             //这⾥没定义谁最⼤,可能字符串A先⾛完,也可能字符串B先⾛完
             //只需要补0就⾏
             char aChar = i >= lenA ? '0' : stringBuilderA.charAt(i);
             char bChar = i >= lenB ? '0' : stringBuilderB.charAt(i);
             if (aChar == '1' && bChar == '1') {
                 sb.append(isCarry ? '1' : '0');
                isCarry = true;
               } else if (aChar == '0' && bChar == '0') {
                 sb.append(isCarry ? '1' : '0');
               isCarry = false;
                } else {
                 sb.append(isCarry ? '0' : '1');
                 }
            }
        if (isCarry) sb.append("1");
         return sb.reverse().toString();
         }
}

调试结果:

 "今日JavaSE复习圆满收官,编程之路再启新程!" 

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

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

相关文章

SQL面试题——飞猪SQL面试 重点用户

飞猪SQL面试题—重点用户 在一些场景中我们经常听到这样的一些描述&#xff0c;例如20%的用户贡献了80%的销售额&#xff0c;或者是20%的人拥有着80%的财富&#xff0c;你知道这样的数据是怎么算出来的吗 数据如下,uid 是用户的id ,amount是用户的消费金额 |uid|amount| ---…

操作系统OS--进程

目录 操作系统是什么 进程 进程的状态 1.并行和并发 2.时间片 进程优先级 进程切换 task_struct内容分类&#xff1a; 操作系统是什么 操作系统本质上是一款纯正的“搞管理”的软件 你的程序不能直接写入硬件&#xff0c;都必须通过操作系统 对软硬件之间进行交互&…

Spring——容器:IoC

容器&#xff1a;IoC IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来…

全自动火腿肉馅斩拌机:

全自动火腿肉馅斩拌机通过斩切作用提高产品的细密度和弹性&#xff0c;广泛应用于肉制品的深加工制作&#xff0c;如制作肉丸、香肠等。其工作原理是利用斩刀高速旋转的斩切作用&#xff0c;将原料进行斩切和乳化处理&#xff0c;从而提高产品的细腻度和弹性。斩拌机具有以下特…

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注&#xff1a;本文有部分内容引用了维基百科&#xff1a;https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前&#xff0c;请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…

NCC前端调用查询弹框

系统自带的查询模板 弹框 调启使用默认的 查询模板 是在 单据模板的 列表模板中&#xff0c;有个查询区域 &#xff0c;查询区域就是查询模板内容如果在列表页做客开 新增按钮 调启查询模板 无问题&#xff0c;但是目前需求是需要再卡片页面下调启系统标准的调启模板代码 //调…

第8章 利用CSS制作导航菜单

8.1 水平顶部导航栏 水平菜单导航栏是网站设计中应用范围最广的导航设计&#xff0c;一般放置在页面的顶部。水平导航适用性强&#xff0c;几乎所有类型的网站都可以使用&#xff0c;设计难度较低。 8.1.1 简单水平导航栏的设计与实现 8.1.1.1导航栏的创建 <nav>标签…

labview拆解日期字符串

今天在写测试时&#xff0c;发现有些时候需要把日期和时间拆分开来&#xff0c;由于项目采集到的日期是一个数字字符串&#xff0c;需要把他们转换成带日期格式的字符串分别显示&#xff0c;这里还是用到了数组到电子表格字符串转换的函数。 下面示例如下&#xff0c;首先我们…

Kafka - 启用安全通信和认证机制_SSL + SASL

文章目录 官方资料概述制作kakfa证书1.1 openssl 生成CA1.2 生成server端秘钥对以及证书仓库1.3 CA 签名证书1.4 服务端秘钥库导入签名证书以及CA根证书1.5 生成服务端信任库并导入CA根数据1.6 生成客户端信任库并导入CA根证书 2 配置zookeeper SASL认证2.1 编写zk_server_jass…

Ubuntu22.04安装DataEase

看到DataEase的驾驶舱&#xff0c;感觉比PowerBI要好用一点&#xff0c;于是搭建起来玩玩。Dataease推荐的操作系统是Ubuntu22.04/Centos 7。 下载了Ubuntu22.04和DataEase 最新版本的离线安装包 一.安装ubuntu22.04 在安装的时候&#xff0c;没有顺手设置IP地址信息&#xff…

使用iviewui组件库的坑

背景 使用view-design组件库的Input组件的时候&#xff0c;按照产品的要求&#xff0c;输入框中只能键入正整数。 使用效果 如果直接使用组件的type属性&#xff0c;设置类型为number时&#xff0c;乍一看没啥问题&#xff0c;但是当我们键入 小数点(.) 或者 e/E 后面没有跟任…

AI绘图最强软件stable diffusion,一文带你迅速了解!

有需要stable diffusion整合包可以扫描下方&#xff0c;免费获取 01 — 什么是 SD ​ Stable Difusion(简称 SD) 其三种概念。 1.用来指代稳定扩散(Stable Diffusion) 技术,如 Midjourney是基于Stable Difusion技术实现的就是指它运用了 Stable Diffusion 的技术原理。 …

Unity3D实现视频和模型融合效果

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示如下👉二、VideoPlayer播放视频(一)👉2-1、Hieraechy面板右键创建videoPlayer👉2-2、Assets面板右键创建RenderTexture👉2-3、把设置好的RenderTexture拖到videoPlayer里面还有本地视频视频�…

stm32 ADC实例解析(3)-多通道采集互相干扰的问题

文章目录 一、问题现象&#xff1a;二、原因分析&#xff1a;1、测量值不准问题分析&#xff1a;2、采样干扰问题分析 三、解决办法&#xff1a;1、硬件&#xff1a;&#xff08;1&#xff09;、电源供电&#xff08;2&#xff09;、引脚电容&#xff08;3&#xff09;、减少采…

springboot 医院住院管理系统,计算机毕业设计项目源码035,计算机毕设程序(LW+开题报告、中期报告、任务书等全套方案)

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医院当然也不例外。医院住院管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;采用J…

Redis集群模式之Redis Sentinel vs. Redis Cluster

在分布式系统环境中&#xff0c;Redis以其高性能、低延迟和丰富的数据结构而广受青睐。随着数据量的增长和访问需求的增加&#xff0c;单一Redis实例往往难以满足高可用性和扩展性的要求。为此&#xff0c;Redis提供了两种主要的集群模式&#xff1a;Redis Sentinel和Redis Clu…

谷歌浏览器的自动翻译功能如何开启

在当今全球化的网络环境中&#xff0c;能够流畅地浏览不同语言的网页是至关重要的。谷歌浏览器&#xff08;Google Chrome&#xff09;提供了一项强大的自动翻译功能&#xff0c;可以帮助用户轻松跨越语言障碍。本文将详细介绍如何开启和使用谷歌浏览器的自动翻译功能&#xff…

中文书籍对《人月神话》的引用(161-210本):微软的秘密

中文书籍对《人月神话》的引用&#xff08;第001到160本&#xff09;>> 《人月神话》于1975年出版&#xff0c;1995年出二十周年版。自出版以来&#xff0c;该书被大量的书籍和文章引用&#xff0c;直到现在热潮不退。 2023年&#xff0c;清华大学出版社推出《人月神话》…

Docker了解

Docker是一种容器化技术&#xff0c;它可以将应用程序和其依赖项打包到一个独立的、可移植的容器中&#xff0c;以便在不同的环境中运行。Docker基于Linux操作系统的容器化技术&#xff0c;可以提供更轻量、更快速、更灵活、更一致的应用部署和管理方式。 Docker的基本概念包括…

【LLM Agents体验 3】利用Open-WebUI+Ollama本地部署Qwen2.5:7B大模型的安装指南

Open WebUI是一种基于 Web 的用户界面&#xff0c;用于管理和操作各种本地和云端的人工智能模型。它提供了一个直观的图形化界面&#xff0c;使用户可以方便地加载、配置、运行和监控各种 AI 模型&#xff0c;而无需编写代码或使用命令行界面。 Open-WebUI 是一款功能强大且易于…