【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(); // 返回生成的验证码}
}

代码说明

  1. generateVerificationCode 方法

    • 使用 Random 类生成随机数。

    • 使用 StringBuilder 来构建验证码字符串。

    • 前四位是随机生成的大写字母或小写字母:

      • random.nextBoolean() 随机决定生成大写字母还是小写字母。

      • random.nextInt(26) 生成 0 到 25 的随机数,加上 'A' 或 'a' 的 ASCII 值,得到随机字母。

    • 最后一位是随机生成的数字:

      • random.nextInt(10) 生成 0 到 9 的随机数,加上 '0' 的 ASCII 值,得到数字字符。

  2. 主程序

    • 调用 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 类的对象 randomRandom 类是 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 类的对象 randomRandom 类是 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 后面表达式的值作为方法的返回值返回给调用该方法的地方。

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1-16 tortoiseGit分支与Git操作

1-1 创建分支 什么时候需要开分支&#xff1f; - 隔离线上版本和开发版本 - 大功能开发&#xff0c;不想影响到其他人&#xff0c;自己独立开个分支去开发 SVN经典目录结构&#xff1a; - trunk-------------------------开发中的文件 - bran…

4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享

引言&#xff1a; 最近&#xff0c;DeepSeek-R1在完全开源的背景下&#xff0c;与OpenAI的O1推理模型展开了激烈竞争&#xff0c;引发了广泛关注。为了让更多本地用户能够运行DeepSeek&#xff0c;我们成功将R1 671B参数模型从720GB压缩至131GB&#xff0c;减少了80%&#xff…

frp与云服务器内网穿透

最近想使用一个便宜的云服务器进行内网穿透&#xff0c;访问到本地电脑 之前使用ssh一直没成功&#xff0c;原因还没分析出来&#xff0c;后来换了一种方法&#xff0c;使用frp来进行内网穿透 frp内网穿透搭建 frp简介 frp 是一个专注于内网穿透的高性能的反向代理应用&…

题海拾贝:英语作文(map)

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

matlab欠驱动船舶模型预测控制

1、内容简介 matlab135-欠驱动船舶模型预测控制 可以交流、咨询、答疑 2、内容说明 略 针对在风 、 浪 、 流时变干扰下欠驱动水面船舶的轨迹跟踪控制问题 &#xff0c; 设计了一种基于模型 预测控制的轨迹跟踪控制器 &#xff0e; 考虑到欠驱动船舶在没有横向驱动力情况下…

2025年-数据库排名

2025年-数据库排名 https://db-engines.com/en/ranking RADB 完整排名 TOP 10 向量 DBMS 的 DB-Engines 排名 关系型 DBMS 的 DB-Engines 排名 搜索引擎的 DB-Engines 排名 键值存储的 DB-Engines 排名 文档存储的 DB-Engines 排名 图形 DBMS 的 DB-Engines 排名 时间序列 DBM…

sib报错:com.*.xctrunner is not in your device!

1、问题描述 在使用sonic集成IOS设备的时候,我们需要通过sonic-agent服务去识别IOS设备。但是在识别的时候提示如下问题: 本质就是在你这个设备中找不到这个设备也就是找不到WebDriverAgentRunner,但是确实安装了,甚至appium可以正常的调用。 或执行如下命令的时候报错:…

rabbitmq五种模式的总结——附java-se实现(详细)

rabbitmq五种模式的总结 完整项目地址&#xff1a;https://github.com/9lucifer/rabbitmq4j-learning 一、简单模式 &#xff08;一&#xff09;简单模式概述 RabbitMQ 的简单模式是最基础的消息队列模式&#xff0c;包含以下两个角色&#xff1a; 生产者&#xff1a;负责发…

LangChain大模型应用开发:提示词工程应用与实践

介绍 大家好&#xff0c;博主又来给大家分享知识了。今天给大家分享的内容是LangChain提示词工程应用与实践。 在如今火热的大语言模型应用领域里&#xff0c;LangChain可是一个相当强大且实用的工具。而其中的提示词(Prompt)&#xff0c;更是我们与语言模型进行有效沟通的关…

4.buuctf [SWPU2019]Web1及知识点

进入题目页面如下 猜测是二次注入 先注册一个账号 再登录&#xff0c;页面如下 点击申请发布广告 页面如上&#xff0c;存在注入点&#xff0c;尝试 判读是整数型注入还是字符型注入 猜解字段数&#xff0c;尝试发现or,#,空格等被过滤了&#xff0c;只能一个一个试 使用联合…

Lua笔记

Lua语法 --注释 #字符串长度、table从1开始连续元素的长度 ..字符串拼接 逻辑运算符 and or not 条件语句 if xxx then elseif yyy then else end 循环语句 for i1,xxx do end xLua AppDomain does not contain a definition for DefineDynamicAssembly&#xff…

开业盛典活动策划方案拆解

道叔来给大家详细剖析咱们方案库里刚收录的这份《蜀大侠火锅店武侠风开业盛典活动策划方案》了&#xff0c;保证让你看完直呼过瘾&#xff0c;收获满满&#xff01; 一、主题创意&#xff1a;武侠风&#xff0c;直击人心 首先&#xff0c;咱们得夸一下这活动的主题——“XXX‘…

三、Unity基础(主要框架)

一、Unity场景概念 如果把游戏运行过程理解成表演&#xff0c;那么场景就是舞台&#xff1b; 场景本质上是一个配置文件&#xff0c;这个配置文件决定了场景中有哪些东西&#xff1b; 二、Scene和Game窗口 1、Scene 滚轮缩放、拖动 单独选中也可以 最下面这个是全能工具…

微软官方出品GPT大模型编排工具:7个开源项目

今天一起盘点下&#xff0c;12月份推荐的7个.Net开源项目&#xff08;点击标题查看详情&#xff09;。 1、一个浏览器自动化操作的.Net开源库 这是一个基于 Google 开源的 Node.js 库 Puppeteer 的 .NET 开源库&#xff0c;方便开发人员使用无头 Web 浏览器抓取 Web、检索 Ja…

C++笔记之类型大小、变量大小,vector与string在栈上内存、堆上内存和总内存的关系

C++笔记之类型大小、变量大小,vector与string在栈上内存、堆上内存和总内存的关系 code review! 文章目录 C++笔记之类型大小、变量大小,vector与string在栈上内存、堆上内存和总内存的关系1.`std::vector<float>` 的内存占用2.`std::vector<float>` 的 `capaci…

华为昇腾920b服务器部署DeepSeek翻车现场

最近到祸一台HUAWEI Kunpeng 920 5250&#xff0c;先看看配置。之前是部署的讯飞大模型&#xff0c;发现资源利用率太低了。把5台减少到3台&#xff0c;就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘&#xff0c;500G的系统盘&#xff0c; 2块3T固态…

【工具变量】ZF引导基金合集(1900-2024年)

政府引导基金是以股权或债权等方式投资于创业风险投资机构或新设的创业风险投资基金&#xff0c;主要用于支持创业企业的发展。根据不同类型的基金&#xff0c;基金出资结构有所不同&#xff0c;可能由政府全额或部分出资&#xff0c;并吸引社会资本和金融机构的参与。 一、政府…

【Java 面试 八股文】常见集合篇

常见集合篇 1. 常见集合有哪些2. ArrayList底层实现的原理是什么&#xff1f;3. ArrayList listnew ArrayList(10)中的list扩容几次4. 如何实现数组和List之间的转换5. ArrayList和LinkedList的区别是什么&#xff1f;6. 说一下HashMap的实现原理&#xff1f;7. HashMap的jdk1.…

使用 DeepSeek 生成商城流程图

步骤 1.下载 mermaid 2.使用 DeepSeek 生成 mermaid 格式 3.复制内容到 4.保存备用。 结束。

STM32 Flash详解教程文章

目录 Flash基本概念理解 Flash编程接口FPEC Flash擦除/写入流程图 Flash选项字节基本概念理解 Flash电子签名 函数读取地址下存放的数据 Flash的数据处理限制部分 编写不易&#xff0c;请勿搬运&#xff0c;感谢理解&#xff01;&#xff01;&#xff01; Flash基本概念…