【java】作业1
1.需求:(1)机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、原价、月份和头等舱或经济舱;(2)按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折
import java.util.Scanner;public class demo {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 提示用户输入机票原价System.out.print("请输入机票原价:");double originalPrice = scanner.nextDouble();// 提示用户输入月份System.out.print("请输入出行月份(1 - 12):");int month = scanner.nextInt();// 提示用户输入舱位类型System.out.print("请输入舱位类型(头等舱/经济舱):");String cabinClass = scanner.next();// 调用 calculatePrice 方法计算最终机票价格double finalPrice = calculatePrice(originalPrice, month, cabinClass);// 输出最终机票价格System.out.println("最终机票价格为:" + finalPrice + " 元");scanner.close();}/*** 计算机票最终价格的方法* @param originalPrice 机票原价* @param month 出行月份* @param cabinClass 舱位类型* @return 最终机票价格*/public static double calculatePrice(double originalPrice, int month, String cabinClass) {double discount = 1.0;// 判断是否为旺季(5 - 10 月)if (month >= 5 && month <= 10) {if ("头等舱".equals(cabinClass)) {discount = 0.9; // 旺季头等舱 9 折} else if ("经济舱".equals(cabinClass)) {discount = 0.85; // 旺季经济舱 8.5 折}} else {if ("头等舱".equals(cabinClass)) {discount = 0.7; // 淡季头等舱 7 折} else if ("经济舱".equals(cabinClass)) {discount = 0.65; // 淡季经济舱 6.5 折}}// 计算最终价格return originalPrice * discount;}
}
2.判断101~200之间有多少个素数,并输出所有素数
public class demo {public static void main(String[] args) {int count = 0; // 用于统计素数的个数// 遍历 101 到 200 之间的所有数for (int i = 101; i <= 200; i++) {if (isPrime(i)) { // 判断当前数是否为素数System.out.print(i + " "); // 输出素数count++; // 素数个数加 1}}System.out.println("\n101~200 之间共有 " + count + " 个素数。");}// 判断一个数是否为素数public static boolean isPrime(int num) {if (num <= 1) {return false; // 小于等于 1 的数不是素数}else if (num == 2) {return false; // 等于 2 的数不是素数}else if (num % 2==0) {return false; // 偶数不是素数}// 判断是否能被 3 到 sqrt(num) 之间的数整除for (int i = 3; i <= Math.sqrt(num); i++) {if (num % i == 0) {return false; // 如果能被整除,则不是素数}}return true; // 否则是素数}
}
3.需求:(1)定义方法实现随机产生一个5位的验证码;(2)验证码格式:(a)长度为5;(b)前四位是大写字母或者小写字母;(c)最后一位是数字
import java.util.Random;public class demo {public static void main(String[] args) {String code = generateVerificationCode(); // 生成验证码System.out.println("生成的验证码是: " + code); // 输出验证码}// 生成验证码的方法public static String generateVerificationCode() {Random random = new Random();StringBuilder code = new StringBuilder();// 生成前四位字母for (int i = 0; i < 4; i++) {// 随机选择大写字母或小写字母boolean isUpperCase = random.nextBoolean(); // 随机决定是否大写char letter;if (isUpperCase) {letter = (char) (random.nextInt(26) + 'A'); // 生成大写字母} else {letter = (char) (random.nextInt(26) + 'a'); // 生成小写字母}code.append(letter); // 将字母添加到验证码中}// 生成最后一位数字char digit = (char) (random.nextInt(10) +'0'); // 生成数字字符code.append(digit); // 将数字添加到验证码中return code.toString(); // 返回生成的验证码}
}
代码说明
-
generateVerificationCode
方法:-
使用
Random
类生成随机数。 -
使用
StringBuilder
来构建验证码字符串。 -
前四位是随机生成的大写字母或小写字母:
-
random.nextBoolean()
随机决定生成大写字母还是小写字母。 -
random.nextInt(26)
生成 0 到 25 的随机数,加上'A'
或'a'
的 ASCII 值,得到随机字母。
-
-
最后一位是随机生成的数字:
-
random.nextInt(10)
生成 0 到 9 的随机数,加上'0'
的 ASCII 值,得到数字字符。
-
-
-
主程序:
-
调用
generateVerificationCode
方法生成验证码。 -
输出生成的验证码。
-
char digit = (char) (random.nextInt(10) + '0') 如果这一句不加'0',会怎么样
如果去掉 '0'
,代码会变成:
char digit = (char) (random.nextInt(10));
这行代码的作用是将 random.nextInt(10)
生成的随机整数(0 到 9)强制转换为 char
类型。但是,这样的转换会导致 数字字符 变成 ASCII 控制字符,而不是我们期望的 '0'
到 '9'
的数字字符。
为什么需要加 '0'
?
-
random.nextInt(10)
:生成一个 0 到 9 的随机整数。 -
'0'
:是字符'0'
的 ASCII 值(48)。 -
random.nextInt(10) + '0'
:-
将随机整数加上
'0'
的 ASCII 值,得到'0'
到'9'
的 ASCII 值。 -
例如:
-
如果
random.nextInt(10)
生成0
,则0 + '0'
等于48
,对应字符'0'
。 -
如果生成
5
,则5 + '0'
等于53
,对应字符'5'
。 -
如果生成
9
,则9 + '0'
等于57
,对应字符'9'
。
-
-
-
强制转换为
char
:将 ASCII 值转换为对应的字符。
如果不加 '0'
会发生什么?
如果不加 '0'
,代码会直接将 0 到 9 的整数转换为对应的 ASCII 字符。ASCII 表中,0 到 9 的整数值对应的是 控制字符,而不是数字字符。
-
ASCII 表部分内容:
整数值 字符 描述 0 '\u0000'
空字符(NULL) 1 '\u0001'
标题开始(SOH) 2 '\u0002'
文本开始(STX) ... ... ... 9 '\u0009'
水平制表符(TAB) -
结果:
-
如果
random.nextInt(10)
生成0
,则(char) 0
是空字符('\u0000'
)。 -
如果生成
5
,则(char) 5
是控制字符('\u0005'
)。 -
这些字符是不可见的,或者显示为乱码。
-
示例代码
import java.util.Random;public class Test {public static void main(String[] args) {Random random = new Random();// 不加 '0'char digit1 = (char) (random.nextInt(10));System.out.println("不加 '0' 的结果: " + digit1);// 加 '0'char digit2 = (char) (random.nextInt(10) + '0');System.out.println("加 '0' 的结果: " + digit2);} }
-
输出结果:
不加 '0' 的结果: (不可见字符或乱码) 加 '0' 的结果: 5
总结
-
加
'0'
:将 0 到 9 的整数转换为对应的数字字符('0'
到'9'
)。 -
不加
'0'
:将 0 到 9 的整数转换为 ASCII 控制字符,这些字符不可见或显示为乱码。
Random random = new Random();
在 Java 中,Random random = new Random();
这行代码的作用是创建一个 Random
类的对象,用于生成伪随机数。下面详细解释这行代码涉及的各个部分:
1. Random
类
Random
类是 Java 标准库中 java.util
包下的一个类,它提供了多种方法用于生成不同类型的伪随机数。所谓伪随机数,是指这些数看起来是随机的,但实际上是由一个确定的算法根据初始种子(seed)生成的,只要种子相同,生成的随机数序列就是相同的。
2. new Random()
new
是 Java 中用于创建对象的关键字。当使用new
时,Java 会在内存中为对象分配空间,并调用相应类的构造函数来初始化对象。Random()
是Random
类的一个构造函数。如果使用无参构造函数Random()
来创建Random
对象,Java 会使用当前系统时间的毫秒数作为种子来初始化随机数生成器,这样每次运行程序时,由于系统时间不同,生成的随机数序列通常也会不同。
3. Random random
这部分声明了一个名为 random
的变量,其类型为 Random
。变量就像是一个容器,用于存储对象的引用。通过这个变量 random
,我们可以调用 Random
类提供的各种方法来生成随机数。
总结
Random random = new Random();
这行代码创建了一个 Random
对象,通过这个对象可以方便地调用 Random
类的方法来生成各种类型的伪随机数,满足不同的编程需求,比如模拟随机事件、生成随机密码等。
boolean isUpperCase = random.nextBoolean();
在 Java 中,boolean isUpperCase = random.nextBoolean();
这行代码主要完成了两件事:一是调用 Random
类的 nextBoolean()
方法生成一个随机的布尔值;二是将这个随机布尔值存储到一个名为 isUpperCase
的布尔类型变量中。下面详细解释这行代码:
1. Random
对象
在执行这行代码之前,通常会有类似 Random random = new Random();
的代码,它创建了一个 Random
类的对象 random
。Random
类是 Java 标准库 java.util
包中的一个类,用于生成伪随机数。借助这个对象,可以调用 Random
类提供的各种方法来生成不同类型的随机数。
2. nextBoolean()
方法
nextBoolean()
是 Random
类中的一个方法,其作用是生成一个随机的布尔值。该方法会等概率地返回 true
或者 false
,也就是说,返回 true
和 false
的可能性均为 50%。
3. boolean isUpperCase
这部分声明了一个名为 isUpperCase
的变量,其类型为 boolean
。在 Java 里,boolean
类型的变量只能存储两个值:true
或者 false
。
4. 代码整体含义
整行代码 boolean isUpperCase = random.nextBoolean();
的意思是:调用 random
对象的 nextBoolean()
方法生成一个随机的布尔值,然后将这个布尔值赋值给变量 isUpperCase
。此后,就可以在代码中使用 isUpperCase
变量进行条件判断等操作。
letter = (char) (random.nextInt(26) + 'A');
letter = (char) (random.nextInt(26) + 'A');
这行代码的主要目的是生成一个随机的大写英文字母,并将其赋值给变量 letter
。下面我们逐步拆解这行代码,详细解释其具体含义:
1. random
对象
在执行这行代码之前,通常会有类似 Random random = new Random();
的代码,它创建了一个 Random
类的对象 random
。Random
类是 Java 标准库 java.util
包中的一个类,用于生成伪随机数。通过这个对象,我们可以调用 Random
类提供的各种方法来生成不同类型的随机数。
2. random.nextInt(26)
nextInt(int bound)
是 Random
类的一个方法,它的作用是生成一个大于等于 0 且小于指定边界 bound
的随机整数。在这行代码中,bound
的值为 26,所以 random.nextInt(26)
会生成一个范围在 0(包含)到 26(不包含)之间的随机整数,即可能的取值为 0、1、2、...、25。
3. 'A'
在 Java 中,字符类型 char
本质上是一个 16 位的无符号整数,它可以表示 Unicode 字符集中的字符。每个字符都对应一个唯一的 Unicode 码点。字符 'A'
的 Unicode 码点是 65,'B'
是 66,以此类推,'Z'
是 90。
4. random.nextInt(26) + 'A'
将 random.nextInt(26)
生成的随机整数(范围是 0 - 25)与字符 'A'
的 Unicode 码点(65)相加。这样得到的结果范围是 65(即 'A'
的码点)到 90(即 'Z'
的码点)之间的整数。例如,如果 random.nextInt(26)
生成的随机数是 0,那么 0 + 'A'
就等于 65;如果生成的随机数是 25,那么 25 + 'A'
就等于 90。
5. (char)
这是一个强制类型转换操作符。由于 random.nextInt(26) + 'A'
的结果是一个 int
类型的整数,而我们需要的是一个字符,所以使用 (char)
将这个整数强制转换为 char
类型。这样,得到的就是一个对应的大写英文字母。
StringBuilder code = new StringBuilder();
在 Java 中,StringBuilder code = new StringBuilder();
这行代码的作用是创建一个 StringBuilder
类的对象,并将其引用赋值给名为 code
的变量。下面详细解释这行代码涉及的各个部分:
1. StringBuilder
类
StringBuilder
是 Java 标准库中 java.lang
包下的一个类,用于处理可变的字符序列。与 String
类不同,String
对象是不可变的,一旦创建,其内容就不能被修改,如果对 String
进行拼接、删除等操作,实际上是创建了一个新的 String
对象;而 StringBuilder
对象的内容是可以动态改变的,在进行字符串拼接、插入、删除等操作时,不会创建新的对象,而是直接在原对象的基础上进行修改,因此在需要频繁修改字符串内容的场景下,使用 StringBuilder
效率更高。
2. new StringBuilder()
new
是 Java 中用于创建对象的关键字。当使用new
时,Java 会在内存中为对象分配空间,并调用相应类的构造函数来初始化对象。StringBuilder()
是StringBuilder
类的无参构造函数,使用这个构造函数创建的StringBuilder
对象初始容量为 16 个字符,初始内容为空。
3. StringBuilder code
这部分声明了一个名为 code
的变量,其类型为 StringBuilder
。变量就像是一个容器,用于存储对象的引用。通过这个变量 code
,我们可以调用 StringBuilder
类提供的各种方法来对其内部的字符序列进行操作,例如追加字符、插入字符、删除字符等。
return code.toString();
return code.toString();
这行代码在 Java 里是一个方法返回语句,它主要做了两件事:一是调用 code
对象的 toString()
方法,把 code
对象转换为字符串;二是将转换后的字符串作为方法的返回值返回。下面详细解释这行代码:
1. code
对象
从前面的代码可知,code
通常是一个 StringBuilder
类型的对象。StringBuilder
是 Java 标准库中用于处理可变字符序列的类,在需要频繁修改字符串内容(如拼接、插入、删除字符等)时,使用 StringBuilder
能比直接使用 String
类获得更高的性能。
2. toString()
方法
toString()
是 StringBuilder
类从 Object
类继承并进行了重写的方法。Object
类是 Java 中所有类的基类,每个类都有 toString()
方法,不过不同类对其有不同的实现。在 StringBuilder
类中,toString()
方法的作用是将 StringBuilder
对象内部存储的字符序列转换为一个不可变的 String
对象。这是因为在很多场景下,我们最终需要的是一个标准的 String
类型的数据,例如将结果输出、传递给其他只接受 String
类型参数的方法等。
3. return
语句
return
是 Java 中的一个关键字,用于从方法中返回一个值,并终止方法的执行。当程序执行到 return
语句时,会将 return
后面表达式的值作为方法的返回值返回给调用该方法的地方。
相关文章:
【java】作业1
1.需求:(1)机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、原价、月份和头等舱或经济舱;(2)按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济…...

2025有哪些关键词优化工具好用
越来越多的企业和个人开始意识到搜索引擎优化(SEO)对于网站曝光和业务增长的重要性。在SEO优化的过程中,关键词优化占据着至关重要的地位。关键词是用户在搜索引擎中输入的词语,优化关键词有助于提高网站在搜索结果中的排名&#…...

【WPSOffice】汇总
写在前面 PPT篇 幻灯片母版 通过母版功能统一幻灯片的样式、字体、颜色等,提高整体一致性。 统一设置模板样式 字体安装 查找到字体并安装。 在WPS PPT(WPS演示)中,以下是最常用的十个功能,能够帮助用户高效制作…...

海康摄像头IPV6模式,手动,自动,路由公告
海康摄像头DS-2DC7220IW-A 网络设置中的IPv6配置选项。IPv6是互联网协议(IP)的第六版,用于替代IPv4,提供更多的IP地址和改进的网络功能。图片中的选项允许用户选择如何配置设备的IPv6网络连接: 手动:用户可…...
Transformer(3): Add Norm
文章目录 残差连接层归一化作用和其它归一化的比较 dropout基本思想实现方式 残差连接 目的是解决深层网络中梯度消失的问题。 解决方法是进行跳跃连接,即多出一条输出链路,将输入X直接接到输出层上。 公式为 F(X) X。 这样每一层求导的时候至少能够…...

SpringBoot多数据源实践:基于场景的构建、实现和事务一体化研究
1. 多数据源应用场景剖析 1.1 业务驱动的多数据源需求 数据量与业务复杂度引发的分库分表:在现代企业级应用中,随着业务的不断拓展和用户量的持续增长,数据量呈爆炸式增长。例如,在大型电商平台中,用户数据、订单数据…...

SOCKET建立简单的tcp服务端与客户端通信
socket是什么 socket可以使两台机子建立连接,就像连接风扇与电源的插座一样,socket可以使服务端与客户端建立连接,服务端就像供电厂,而客户端就像用电器,而socket就是连接二者的插座。 建立简单的连接 如果我们想在客…...

C语言-章节 1:变量与数据类型 ——「未初始化的诅咒」
在那神秘且广袤无垠的「比特大陆」上,阳光奋力地穿过「内存森林」中错综复杂的代码枝叶缝隙,洒下一片片斑驳陆离、如梦似幻的光影。林间的空气里,弥漫着一股浓郁的十六进制锈蚀味,仿佛在诉说着这片森林中隐藏的古老秘密。 一位零基…...

【HarmonyOS Next】图片选择方案
背景 封装一个选择图片和调用拍照相机的按钮,展示api13下选择图片和调用相机,可以使用不申请用户权限的方式,进行图片的选择和修改。但是,目前方案并未包含上传图片保存的功能,仅提供图片选择或者拍照后,图…...
【C语言】移除元素
移除元素 给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后…...

Python----Python高级(网络编程:网络高级:多播和广播,C/S架构,TCP,UDP,网络编程)
一、多播和广播 1.1、多播 1.1.1、定义 多播(Multicast)也称为组播,是一种一对多的通信方式,将信息从单个源发送到 多个特定的接收者。这些接收者组成一个特定的多播组,只有加入该组的设备才会接 收和处理多播数据。…...

CES 2025 上的创新方案——无电池智能纸尿裤-AP4470
这款纸尿裤采用了可重复使用的组件,通过检测液体的存在来增强老年人和婴儿的护理,即使电极上滴了几滴液体也是如此。 其原理为尿液中的水分作为电解液,将尿布里安装的两种导电性材料作为正负极,充当电池,从而产生300m…...
Java 运算符
运算符用于对变量和值执行运算。 在下面的示例中,我们使用 运算符将两个值相加: int x 100 50;尽管经常使用运算符将两个值加在一起,例如在上面的示例中,但是它也可以用于将一个变量和一个值或一个变量和另一个变量加在一…...
【一文读懂】什么是MVVM?
MVVM Vue 是一个渐进式的 JavaScript 框架,它采用了 MVVM(Model-View-ViewModel)设计模式,这使得它能够高效地进行数据绑定和用户界面的更新。 概念 1. Model(模型) 含义:Model 代表应用程序…...

GCD of Subset
法1: const int N1e6; signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n,k; cin>>n>>k;vector<int>a(n1),cnt(N10);/*桶cnt不要用map实现!!!速度太慢*/vector<vector<int>>…...
BY组态:工业自动化的未来,触手可及
在工业4.0的浪潮下,智能化、数字化已成为制造业发展的核心驱动力。作为工业自动化领域的重要工具,组态软件在实现设备监控、数据采集、流程控制等方面发挥着不可替代的作用。然而,传统的组态软件往往存在开发周期长、学习成本高、灵活性不足等…...

DeepSeek在linux下的安装部署与应用测试
结合上一篇文章,本篇文章主要讲述在Redhat linux环境下如何部署和使用DeepSeek大模型,主要包括ollama的安装配置、大模型的加载和应用测试。关于Open WebUI在docker的安装部署,Open WebUI官网也提供了完整的docker部署说明,大家可…...

华为昇腾920b服务器部署DeepSeek翻车现场
最近到祸一台HUAWEI Kunpeng 920 5250,先看看配置。之前是部署的讯飞大模型,发现资源利用率太低了。把5台减少到3台,就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘,500G的系统盘, 2块3T固态…...
JavaScript 内置对象-数组对象
在JavaScript中,数组(Array)是一种非常重要的数据结构,它允许我们以列表的形式存储多个值,并提供了丰富的内置方法来操作这些值。无论是处理简单的数值集合还是复杂的对象数组,数组对象都能提供强大的支持。…...
Qt——连接MySQL数据库之ODBC的方法详细总结(各版本大同小异,看这一篇就够了)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》 《实用硬件方案设计》 《结构建模设…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...