Java初阶测试编程题目

news2024/10/24 19:15:00

文章目录

  • 1.大小写转换
  • 2.斐波那契数列
    • 2.1递归解决(不推荐)
    • 2.2递推公式(非递归)
  • 3.删除公共字符
    • 3.1题目说明
    • 3.2第一种方法
    • 3.3第二种方法
  • 4.字符串的加法
    • 4.1题目说明
    • 4.2题目核心方法
    • 4.3题目代码解析

Java初阶测试编程题目分析与总结:

1.大小写转换

QQ_1728791037054

  1. 我们这个转换就是每一行会把这个大写的转换为小写的,这个大小写之间的这个编码值相差的是32;
  2. in.next()对于这个大写字符内容进行读取操作;
  3. str.charAt(0)就是把这个读取的大写字符+32转换为小写的,因为这个一行就只有一个大写的字符,因此这个时候我们直接传递0下标就可以了;
  4. str.charAt(0)返回的是一个char类型的值,但是这个值是字符的unicode编码值,加上32之后依然是一个整数,这个时候我们需要进行强制类型转换为char类型的数据,这样才可以得到小写的字母;

QQ_1728791129799

2.斐波那契数列

QQ_1728791073170

2.1递归解决(不推荐)

这个关于斐波那契数列的问题,其实已经屡见不鲜了,但是这个题目确实值得我们反复琢磨

递归的写法就是前面的连个返回1,后面的从第三个开始就不断的进行递归计算,这个思路很简答,但是效率不行,不建议写这个;

QQ_1728793677119

2.2递推公式(非递归)

递推公式这个和递归相比,其实无论是时间和空间上面都是有提升的,因此这个才是我们推荐的写法;

这个是我在牛客上面看到的一个解法,确实很清晰,我们都知道这个递推公式需要不断的进行更新,但是这个实现的时候其实没有上面的递归那么无脑,因为这个中间的过程需要我们自己写出来,但是递归就是直接return前面的两项进行相加,这个其实很复杂,但是我们不需要自己实现;

QQ_1728791098728

这个就是ret1=1,ret2=1,如果是后面的这个,我们就进行这个ret1,ret2的更新:

1 1 2 3 5;

例如我们的这个过程,其实就是ret1指向第一个1,ret2指向第二个1,然后我们把这个ret1给了ret2,把这个第三个数据result给了这个ret1,依次进行下去,这个过程其实和我们的高中时期学习的数列很相似,不断地利用递推公式求解下一项;

3.删除公共字符

3.1题目说明

这个题目是一个公司的笔试题目,是让我们从两个单词里面进行比较,看看第一个单词去掉第二个单词里面的字符之后还剩下什么;

QQ_1728791009597

3.2第一种方法

  1. 首先我们使用这个nextLine读取两个单词,分别存储到这个str1,str2里面去,因为这个nextLine不是读取这一行的内容,因此会分别读取到两个单词;
  2. func里面先是创建一个对象,取出来这个str1里面的每一个字符,如果这个str2里面没有,我们就是用这个append方法把这个字符添加到我们的这个创建的对象里面去;
  3. contains这个方法就是进行查看我们的str1里面的字符是不是在这个str2里面,这个方法的参数是string类型的,但是我们的这个ret是字符类型的,我们在这个后面加上“”之后就可以把这个字符串转换为string类型的;
  4. 因为我们最后打印输出的还是一个单词,因此我们要使用这个toString的方法,把这个对象转换为String字符串类型数据,作为返回值;
  5. 我们在这个过程中使用的是对象,因为这个对象可以使用append对于这个对象的内容进行修改,但是我们最后还是要转换回去,达到了曲线救国的目的;

QQ_1728792257441

3.3第二种方法

  1. 我们核心思路就是判断这个第一个字符串里面的字符是不是第二个字符串里面出现了,因此,除了上面的这个contains方法,我们其实还是可以使用这个indexOf方法的;
  2. str2.indexOf(ch)就是返回这个ch(str1里面的字符),在str2里面的下标,如果存在就是返回下标,不存在返回-1,因此如果这个循环判断的过程中。如果这个indexof的返回值是-1,就说明我们的这个str1里面的这个元素没有在str2里面,这个时候我们还是使用append方法进行添加到对象里面去;
  3. 通过这个题目,我们可以发现其实这个全部一样,就是判断的方法使用的是不同的方式罢了,我在学习这个string的时候,总觉得老师讲了很多的方法,不知道孰轻孰重,相信很多的初学者都有这个体会,但是在这个刷题的过程中,我认为这个出现的方法例如这个contains,indexof这些就是值得我们归纳和总结的;

QQ_1728792600608

4.字符串的加法

4.1题目说明

这个题目也是相当有难度的,当然这个是对于初学者而言的,反正我自己是对于这个问题没有任何思路,之前也写过类似的这个大数乘法之类的这样的题目,但是使用觉得很困难,这个题目和之前也是很相似的;

QQ_1728793859814

4.2题目核心方法

对于两个二进制的字符串进行相加,我们的情况有以下的几种:

QQ_1728804017507

上面的是情况分类,我们的设计程序还是基于这个数位不相同的情况进行设计:

首先对于二进制字符串,我们首先需要进行数位对齐相加,然后是reverse操作,因为我们加的时候是从低到高的,但是我们为了我们的下标更好控制,进行逆置,这样的话,我们的加法就是从第一个开始加(实际上是最高位),然后是进行逆置回去即可;

下面的这个就是大致一个思路过程:

QQ_1728795127065

4.3题目代码解析

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
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();
            String ret = add(a,b);
            System.out.println(ret);
        }
    }

    private static String add(String a,String b){
        StringBuilder stringBuilder = new StringBuilder();
        int len1 = a.length();
        int len2 = b.length();
        int maxLen = Math.max(len1,len2);

        StringBuilder stringBuilderA = new StringBuilder(a).reverse();
        StringBuilder stringBuilderB = new StringBuilder(b).reverse();

        boolean isForward = false;//这个就是说:默认没有进位
        for(int i=0;i<maxLen;i++){
            char cha = i>=len1 ? '0':stringBuilderA.charAt(i);//这个是使用的三目进行判断是否需要添加0,因为这个添加0的操作只有两个数据的位数不一样的时候才会用到;
            //i>=len1的时候说明这两个的数位不一样,因此我们需要补上0;
            //例如1010
            //   10001  这个当i走到第四个的时候,因为有一个数据的第五位上面有数,因此我们两个都需要向后走,这个时候的i>=len1就起作用了,这个时候我们就需要补上0,因为这个要和10001进行add吗,否则无法进行下面的分支判断
            char chb = i>=len2 ? '0':stringBuilderB.charAt(i);//和上面类似
            if(cha == '1' && chb == '1'){
                stringBuilder.append(isForward ? '1':'0');
                isForward = true;//表示当前开始进位
            }else if(cha=='0' && chb == '0'){
                stringBuilder.append(isForward ? '1':'0');
                isForward = false;
            }else{
                stringBuilder.append(isForward ? '0':'1');
            }
        }
        if(isForward){
            stringBuilder.append('1');
        }
        return stringBuilder.reverse().toString();
    }
}

这个程序里面概括了所有情况:

  1. 首先分别求得nextLine得到的字符串的长度,求得最大值,这个最大值我们后面会用到的,然后这个三目的那个就是进行判断:是不是需要补上0,0补在什么位置上面;
  2. 三层if的分支是列举所有情况:1+1有进位就是1,1+1没有进位就是0,这个使用的是三目进行控制的,这个isForward就是判断这个时候是不是有进位,默认的这个false是没有进位的,1+1的话肯定有进位,这个时候我们就把这个改为true进行标记,如果是0+0这个时候肯定没有进位,这个时候再赶回去
  3. 也就是说这个过程里面的isForward是一直在更新的,因为这个和我们的实际的情况有关;
  4. 1+0或者0+1就是在这个else里面,这个里面没有对于这个isForward进行判断,主要就是因为这个没有必要,下面我来详细的说明一下这个位置为什么不进行判断:
  5. 如果原来是1+1总金额个时候经过判断,isforward就是true,这个时候是进位的买这个时候如果下一个是0+1/1+0的时候,我们的这个位置打印的就是0,这个时候进一位,还是true,和原来一样;
  6. 如果原来是0+0,isforward就是false,这个时候我们1+0还是0+1都是不需要进位的,还是false,这个也是不变的;
  7. 如果原来还是这个0+1或者1+0,这个时候原来的情况无非就是true或者false,我们上面已经分析了,无论是true还是false,我们的这个else里面执行之后都是不变的,因此,我们不用进行判断,否则,我们还要分情况进行判断,这个如果分析到了上面的4,5,6点,其实会发现我们完全没有必要进行判断,因为经过这个else,这个idforward是保持原样的;
  8. 在这个while循环之外的这个判断主要就是我们的这个111+101这样的情况,相加之后变成了四位数,这个时候我们进行额外的判断即可;
    则,我们还要分情况进行判断,这个如果分析到了上面的4,5,6点,其实会发现我们完全没有必要进行判断,因为经过这个else,这个idforward是保持原样的;
  9. 在这个while循环之外的这个判断主要就是我们的这个111+101这样的情况,相加之后变成了四位数,这个时候我们进行额外的判断即可;
  10. 经历上面的所有操作,最后还是需要把这个对象进行toString操作,并且进行逆置的,这样得到的就是我们的结果;

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

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

相关文章

C++第六讲:STL--vector的使用及模拟实现

C第六讲&#xff1a;STL--vector的使用及模拟实现 1.vector简介2.vector的常见接口介绍2.1constructor -- 构造2.2destructor -- 析构2.3begin、end2.3.1vector和string的区别、vector<string> 2.4rbegin、rend2.5cbegin、cend2.6crbegin、crend2.7size、max_size、resiz…

C++AVL树的介绍和实现

目录 1.AVL树的概念 2.AVL树的实现 2.1AVL树的结构 2.2AVL树的插入 2.2.1AVL树插入一个值的大概过程 2.2.2平衡因子的更新 2.2.3插入节点及更新平衡因子的代码实现(暂未实现旋转逻辑) 2.3旋转 2.3.1旋转的原则 2.3.2右单旋(处理parent->_bf -2 && cur-&g…

简易入门:使用Docke 部署一个tomcat服务

简易入门&#xff1a;使用Docke 部署一个tomcat服务 # 拉取 >docker pull tomcat:9.0# 后台运行容器&#xff0c;端口映射为8080. -p 宿主机端口:容器端口 >docker run -d --name tomcat-c-01 -p 8080:8080 tomcat:9.0# 查看容器id >docker ps CONTAINER ID IMAG…

Qt-系统线程安全(63)

目录 描述 使用 线程不安全 线程安全 释放锁问题 其他的锁 条件变量和信号量 描述 多线程程序太复杂了 在C/C 和 Linux中&#xff0c;我们为了保证线程安全&#xff0c;简单的方式就是加锁 为此 Qt 也封装了自己的一套锁管理 使用 线程不安全 我们先测验一下线程不安…

七、程序流程控制

一、三种执行顺序 执行顺序说明顺序结构自上而下的执行代码分支结构根据条件&#xff0c;选择对应代码执行循环结构控制某段代码重复执行 二、分支结构 1、if 分支 根据条件&#xff08;真或假&#xff09;来决定执行某段代码if 分支有三种形式 //第一种形式 if(条件表达式…

Qt学习(一)——win10系统下Qt安装(Qt5.15.2+QtCreator5.0.3+MSVC2019)

win10平台下&#xff0c;Qt Creator 5.0.3 软件About Qt Creator界面如下&#xff1a; 其基于Qt 5.15.2 MSVC2019&#xff0c;64bit,故在用Qt4 设计师自定义控件所设计的控件能够被Qt Creator加载到&#xff0c;就要安装相应版本的Qt和MSVC。此安装便可支持win10系统下的自定义…

Java项目实战II基于Java+Spring Boot+MySQL的足球青训俱乐部管理后台系统的设计与开发(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 足球作为世…

【hot100-java】排序链表

链表题。 使用归并排序法。 一图解决。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; thi…

(刷题记录6)三数之和

三数之和 题目信息&#xff1a;题目思路(环境来自力扣OJ的C)&#xff1a;暴力枚举&#xff1a;双指针&#xff1a;在三数之和上&#xff1a;转化成的两数之和&#xff1a;两数之和小优化&#xff1a; 复杂度&#xff1a;代码和解释&#xff1a;暴力枚举&#xff1a;双指针&…

【C语言】深入理解指针(三)(上)

本篇博客将讲解以下知识&#xff1a; 1、字符指针变量 2、数组指针变量 1、字符指针变量 在指针的类型中&#xff0c;有一种指针类型为字符指针&#xff1a;char* 一般使用&#xff1a; 注意&#xff1a;%s打印字符串的时候&#xff0c;需要提供字符串首元素的起始地址。 易错…

tensorflow + pygame 手写数字识别的小游戏

起因&#xff0c; 目的: 很久之前&#xff0c;一个客户的作业&#xff0c;我帮忙写的。 今天删项目&#xff0c;觉得比较简洁&#xff0c;发出来给大家看看。 效果图: 1. 训练模型的代码 import sys import tensorflow as tf# Use MNIST handwriting dataset mnist tf.kera…

C# 中循环的应用说明

一循环的概念说明 在C#编程中&#xff0c;循环结构是一种非常重要的控制流语句&#xff0c;它允许我们重复执行一段代码&#xff0c;直到满足某个特定条件为止。C#提供了几种不同类型的循环结构&#xff0c;包括for循环、while循环、do-while循环和foreach循环。 循环语句允许…

树莓派应用--AI项目实战篇来啦-7.OpenCV脸部和眼睛检测

1. 介绍 在深度学习时代&#xff0c;人脸识别一般是利用卷积神经网络进行监督式学习&#xff0c;也就是通过让算法&#xff08;神经网络&#xff09;自己去发现规律的方式&#xff0c;创造出有用的卷积核&#xff0c;然后利用其进行寻找图片和视频中的人脸&#xff0c;而在这之…

【Mac苹果电脑安装】DBeaverEE for Mac 数据库管理工具软件教程【保姆级教程】

Mac分享吧 文章目录 DBeaverEE 数据库管理工具 软件安装完成&#xff0c;打开效果图片Mac电脑 DBeaverEE 数据库管理工具 软件安装——v24.21️⃣&#xff1a;下载软件2️⃣&#xff1a;安装JDK&#xff0c;根据下图操作步骤提示完成安装3️⃣&#xff1a;安装DBeaverEE&#…

【ESP32】ESP-IDF开发 | LED PWM控制器+呼吸灯例程

1. 简介 LED PWM控制器&#xff0c;简称LEDC&#xff0c;主要用于控制LED的亮度和颜色&#xff0c;当然也可以当作普通的PWM进行使用。 LEDC有16路通道&#xff0c;8路高速通道和8路低速通道&#xff0c;16路通道都能够产生独立的数字波形来驱动LED设备。高速和低速通道分别有8…

C++:模拟stack、queue

目录 容器适配器 定义 特点 deque deque的优势与缺点 选择deque作为stack和queue的底层默认容器的原因 模拟实现stack 模拟实现queue 容器适配器 定义 在C标准模板库&#xff08;STL&#xff09;中&#xff0c;容器适配器&#xff08;Container Adapters&#xff09;是…

Harmony开发基础

背景介绍 鸿蒙系统的开发一来是为了打破国外垄断&#xff0c;实现操作系统的国产化&#xff0c;另一方面是针对目前市场上出现大量新的移动设备&#xff0c;手表&#xff0c;折叠屏等&#xff0c;移动端程序要适配不同设备&#xff0c;需要维护一套代码下的多个版本&#xff0…

U盘直接拔掉之后数据丢失怎么恢复 U盘数据丢失了怎么恢复

U盘作为一种存储设备&#xff0c;可以帮助人们存储很多资料文件&#xff0c;无论是办公文件&#xff0c;亦或是生活中的照片&#xff0c;所以在存储数据文件时&#xff0c;人们是比较依赖U盘。不过&#xff0c;U盘也存在很多的不确定性&#xff0c;比如数据容易丢失、或者损坏。…

NirCmd-sendkeysendkeypress

引入script [Script File] This command allows you to execute a sequence of commands stored inside the file specified in [Script File] parameter. Example: script "c:\temp\msg.ncl" Example for a script:infobox "Hello !" "This is the …

微知-如何查看服务器CPU当前运行主频?(cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq)

关键命令 cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq背景 首先lscpu可以查看到有多个cpu&#xff0c;里面也会显示cpu的频率&#xff0c;但是这里显示仅仅是规格&#xff0c;不是实际值。为了查看实际值&#xff0c;需要到/sys文件系统中查看&#xff0c;也…