当前位置: 首页 > news >正文

Kotlin基础——枚举、When、in、for

枚举

声明只有值的枚举

enum class Color {RED, GREEN, BLUE
}

此外还可以增加属性和方法,如果需要在枚举类中定义方法,要使用分号把枚举常量列表和方法定义分开,这也是Kotlin唯一必须使用分号的地方

enum class Color(val r: Int, val g: Int, val b: Int) {RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255);fun rgb() = (r * 256 + g) * 256 + b
}

When

可使用多行表达式函数体

fun getRgb(color: Color) =when (color) {Color.RED -> "255,0,0"Color.GREEN -> "0, 255, 0"Color.BLUE -> "0, 0, 255"}

上面只会匹配对应分支,如果需要多个值合并,则使用逗号隔开

fun getRgb(color: Color) =when (color) {Color.RED, Color.GREEN -> "255,255,0"Color.BLUE -> "0, 0, 255"}

when可以使用任何对象,如下使用set进行判断(不分顺序)

fun getRgb(c1: Color, c2: Color) =when (setOf(c1, c2)) {setOf(Color.RED, Color.GREEN) -> "255,255,0"setOf(Color.GREEN, Color.BLUE) -> "0,255,255"else -> throw Exception("none")}

如果没有给when提供参数,则分支条件为布尔表达式

fun getRgb(c1: Color, c2: Color) =when {(c1 == Color.RED && c2 == Color.GREEN) || (c1 == Color.GREEN && c2 == Color.RED) -> "255,255,0"(c1 == Color.GREEN && c2 == Color.BLUE) || (c1 == Color.BLUE && c2 == Color.GREEN) -> "0,255,255"else -> throw Exception("none")}

使用When优化if

对于如下类结构

interface Expr
class Num(val value: Int) : Expr
class Sum(val left: Int, val right: Int) : Expr

计算加法时,使用if如下,代码块中的最后表达式即为返回值,但不适用于函数(需要显示return)

fun eval(e: Expr): Int =if (e is Num) {e.value} else if (e is Sum) {eval(e.left) + eval(e.right)} else {throw IllegalArgumentException("")}

可使用when对其进行优化

fun eval(e: Expr): Int =when (e) {is Num -> {e.value}is Sum -> {eval(e.left) + eval(e.right)}else -> {throw IllegalArgumentException("")}}

in

可使用in判断一个值是否在一个区间/集合内,反之使用 !in

fun isNum(c: Char) = c in '0'..'9'
fun isNotNum(c: Char) = c !in '0'..'9'println("Kotlin" in setOf("Java", "C"))

可用于when中进行判断

fun recognize(c: Char) = when (c) {in '0'..'9' -> "digit"in 'a'..'z' -> "letter"else -> "not know"
}

可用于比较任何实现了Comparable接口的对象,如下比较字符串将按照字母表顺序

println("Kotlin" in "Java".."Z")

for

如判断奇偶数的函数

fun isEven(i: Int) = when {i % 2 == 0 -> "偶数"else -> "奇数"
}

for循环可使用区间表示两个值之间的间隔,如下分别表示[1,10]、[1,10)

for (i in 1..10) {print(i)print("是")println(isEven(i))
}for (i in 1 until 10) {print(i)print("是")println(isEven(i))
}

如果需要反向,且设置步长(可为负数),可使用

for (i in 10 downTo 1 step 2) {print(i)print("是")println(isEven(i))
}

还可以用for遍历集合

val chartBinary = TreeMap<Char, String>()for (c in 'A'..'D') {val binary = Integer.toBinaryString(c.toInt())chartBinary[c] = binary;
}for ((chat, binary) in chartBinary) {println("$chat = $binary")
}

如果需要跟踪下标,可使用withIndex()

val list = arrayListOf("A", "B")
for ((index, element) in list.withIndex()) {println("$index: $element")
}

相关文章:

Kotlin基础——枚举、When、in、for

枚举 声明只有值的枚举 enum class Color {RED, GREEN, BLUE }此外还可以增加属性和方法&#xff0c;如果需要在枚举类中定义方法&#xff0c;要使用分号把枚举常量列表和方法定义分开&#xff0c;这也是Kotlin唯一必须使用分号的地方 enum class Color(val r: Int, val g: …...

C++编程题目------平面上的最接近点对(分治算法)

题目描述 给定平面上n个点&#xff0c;找出其中的一对点的距离&#xff0c;使得在这n个点的所有点对中&#xff0c;该距离为所有点对中最小的。 输入格式 第一行一个整数 n&#xff0c;表示点的个数。 接下来 n 行&#xff0c;每行两个实数 x,y &#xff0c;表示一个点的行…...

Linux下的文件操作和文件管理

文章目录 应用编程文件操作文件描述符open函数write函数read函数close函数lseek函数文件操作例子 文件管理文件基本知识文件类型文件共享空洞文件错误处理退出程序原子操作fcntl和ioctl截断文件stat函数软链接和硬链接 应用编程 系统调用(system call)是Linux内核提供给应用层…...

设计模式之桥梁模式

什么是桥梁模式 桥梁模式&#xff08;Bridge Pattern&#xff09;也称为桥接模式&#xff0c;属于结构型模式&#xff0c;它主要目的是通过组合的方式建立两个类之间的联系&#xff0c;而不是继承。桥梁模式将抽象部分与它的具体实现部分分离&#xff0c;使它们都可以独立地变…...

“从部署到优化,打造高效会议管理系统“

目录 引言一、部署单机项目 - 会议OA1.1 硬件和软件环境准备1.2 检查项目1.3 系统部署1.后端部署 二、部署前后端分离项目 - SPA项目后端部署2.前端部署 总结 引言 在现代化办公环境中&#xff0c;会议是组织沟通、决策和合作的重要方式之一。为了提高会议的效率和质量&#x…...

Facebook广告效果数据获取

一、背景 公司每年在Facebook和Google上投放了大量的广告&#xff0c;我总不能让老板登录Facebook广告投放平台上去看广告效果&#xff0c;其实老板只关注每天花了多少钱引来了多少客户&#xff0c;每个客户平均花费多少钱&#xff0c;其它的他才不关心&#xff0c;有Facebook…...

nlp之文本转向量

文章目录 代码代码解读 代码 from tensorflow.keras.preprocessing.text import Tokenizer # 标记器(每一个词&#xff0c;以我们的数值做映射&#xff0c;)words [LaoWang has a Wechat account., He is not a nice person., Be careful.] # 把这句话中每一个单词&#xf…...

【luckfox】添加压力传感器hx711

文章目录 前言一、参考资料二、电路图三、驱动四、makefile——添加驱动五、dts——使能gpio5.1 参考5.2 改动1—— hx117节点5.3 改动2——引脚节点5.4 已经被定义的引脚5.5 gpio源码 六、改动总结——使能hx711七、验证驱动添加八、编写测试文件8.1 测试代码8.2 配置编译环境…...

C++11的lambda表达式

lambda来源于函数式编程的概念。C11这次终于把lambda加进来了。 lambda表达式有如下优点&#xff1a; 1、声明式编程风格&#xff1a;就地匿名定义目标函数或函数对象&#xff0c;不需要额外写一个命名函数或者函数对象。以更直接的方式去写程序&#xff0c;好的可读性和可维护…...

矩阵特征值与特征向量的理解

各位朋友大家好&#xff0c;我是小C哈哈哈&#xff0c;很高兴认识大家&#xff0c;在这里&#xff0c;我会将一些枯燥难懂的数学和算法知识以图片或动画的形式通俗易懂的展现给大家&#xff0c;希望大家喜欢。 线性代数中的矩阵特征值与特征向量这两个基本概念总是让很多人摸不…...

云原生安全:如何保护云上应用不受攻击

文章目录 云原生安全的概念1. 多层次的安全性2. 自动化安全3. 容器安全4. 持续监控5. 合规性 云原生安全的关键挑战1. 无边界的环境2. 动态性3. 多云环境4. 容器化应用程序5. API和微服务 如何保护云上应用不受攻击1. 身份验证和访问控制示例代码&#xff1a; 2. 数据加密示例代…...

如何在用pip配置文件设置HTTP爬虫IP

首先&#xff0c;定义问题&#xff1a;在 Pip 中设置HTTP爬虫IP服务器&#xff0c;以便在网络上进行访问和下载。 亲身经验&#xff1a;我曾经遇到过类似问题&#xff0c;通过设置HTTP爬虫IP服务器成功解决了网络访问问题。 数据和引证&#xff1a;根据 pip 官方文档&#xff…...

2023MathorCup高校数模挑战赛B题完整解题代码教程

赛道 B&#xff1a; 电商零售商家需求预测及库存优化问题 问题背景&#xff1a; 电商平台存在着上千个商家&#xff0c;他们会将商品货物放在电商配套的仓库&#xff0c; 电商平台会对这些货物进行统一管理。通过科学的管理手段和智能决策&#xff0c; 大数据智能驱动的供应链…...

《动手学深度学习 Pytorch版》 10.7 Transformer

自注意力同时具有并行计算和最短的最大路径长度这两个优势。Transformer 模型完全基于注意力机制&#xff0c;没有任何卷积层或循环神经网络层。尽管 Transformer 最初是应用于在文本数据上的序列到序列学习&#xff0c;但现在已经推广到各种现代的深度学习中&#xff0c;例如语…...

ORACLE-递归查询、树操作

1. 数据准备 -- 测试数据准备 DROP TABLE untifa_test;CREATE TABLE untifa_test(child_id NUMBER(10) NOT NULL, --子idtitle VARCHAR2(50), --标题relation_type VARCHAR(10) --关系,parent_id NUMBER(10) --父id );insert into untifa_test (CHILD_ID, TITLE, RELATION_TYP…...

MySQL篇---第四篇

系列文章目录 文章目录 系列文章目录一、并发事务带来哪些问题?二、事务隔离级别有哪些?MySQL的默认隔离级别是?三、大表如何优化?一、并发事务带来哪些问题? 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对 同一数据进行操作…...

em/px/rem/vh/vw单位的区别

一、绝对长度单位 1.px 表示像素&#xff0c;显示器上每个像素点大小都是相同的 二、相对长度单位 2.em 相对于当前对象内文本的字体尺寸&#xff0c;如未设置对行内文本字体的尺寸&#xff0c;则相对于浏览器的默认字体&#xff08;1em16px&#xff09; em值不是固定的&…...

【C++】多态 ③ ( “ 多态 “ 实现需要满足的三个条件 | “ 多态 “ 的应用场景 | “ 多态 “ 的思想 | “ 多态 “ 代码示例 )

文章目录 一、" 多态 " 实现条件1、" 多态 " 实现需要满足的三个条件2、" 多态 " 的应用场景3、" 多态 " 的思想 二、" 多态 " 代码示例 一、" 多态 " 实现条件 1、" 多态 " 实现需要满足的三个条件 &q…...

创建一个Keil项目

1、创建项目 2、选择存放的文件夹&#xff0c;还有设置项目名 3、选择型号&#xff08;因为没有STC,用下面这个替代&#xff0c;功能差不多&#xff09; 4、选择不用启动文件 5、就会得到下面这个&#xff0c;可以在Source Group 1下面编写代码了 6、右键source Group 1,添加c语…...

Xray的简单使用

xray 简介 xray 是一款功能强大的安全评估工具&#xff0c;由多名经验丰富的一线安全从业者呕心打造而成&#xff0c;主要特性有: 检测速度快。发包速度快; 漏洞检测算法效率高。支持范围广。大至 OWASP Top 10 通用漏洞检测&#xff0c;小至各种 CMS 框架 POC&#xff0c;均…...

Ollama调用translategemma-27b-it部署指南:Kubernetes集群水平扩展实践

Ollama调用translategemma-27b-it部署指南&#xff1a;Kubernetes集群水平扩展实践 1. 项目简介与核心价值 translategemma-27b-it是Google基于Gemma 3模型系列构建的先进翻译模型&#xff0c;专门处理55种语言之间的翻译任务。这个模型最大的特点是既能处理文本翻译&#xf…...

初学者如何自学SEO优化

初学者如何自学SEO优化 在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了网站推广的核心手段。对于初学者来说&#xff0c;如何自学SEO优化可能看起来有些复杂&#xff0c;但只要掌握几个关键点&#xff0c;就能迅速上手。本文将带你深入了解如…...

GLM-4.1V-9B-Bate在Multisim电路仿真中的创新结合:视觉检测电路板故障

GLM-4.1V-9B-Bate在Multisim电路仿真中的创新结合&#xff1a;视觉检测电路板故障 1. 引言&#xff1a;当AI视觉遇上电路设计 想象一下这样的场景&#xff1a;你刚完成一块电路板的设计&#xff0c;正准备在Multisim中进行仿真验证。突然发现某个元器件似乎焊接不良&#xff…...

Pixel Dimension Fissioner 社交媒体内容生成:自动化生产像素风格营销图片

Pixel Dimension Fissioner 社交媒体内容生成&#xff1a;自动化生产像素风格营销图片 1. 社交媒体运营的视觉内容困境 每天打开社交媒体后台&#xff0c;运营团队最头疼的问题总是惊人的一致&#xff1a;内容不够发。特别是需要大量视觉素材的节日营销期&#xff0c;设计师加…...

实测雪女-斗罗大陆-造相Z-Turbo:简单几步,让文字描述变成精美动漫图

实测雪女-斗罗大陆-造相Z-Turbo&#xff1a;简单几步&#xff0c;让文字描述变成精美动漫图 1. 模型介绍与准备工作 1.1 什么是雪女-斗罗大陆-造相Z-Turbo 雪女-斗罗大陆-造相Z-Turbo是一款基于Xinference部署的文生图模型服务&#xff0c;专门用于生成斗罗大陆中雪女角色的…...

Wan2.2-I2V-A14B开源大模型:支持ONNX导出与边缘设备轻量化部署

Wan2.2-I2V-A14B开源大模型&#xff1a;支持ONNX导出与边缘设备轻量化部署 1. 开箱即用的文生视频解决方案 Wan2.2-I2V-A14B是一款强大的文生视频开源大模型&#xff0c;能够将文本描述直接转化为高质量视频内容。这个专为RTX 4090D 24GB显卡优化的私有部署镜像&#xff0c;让…...

Steam美区支付实战:巧用虚拟VISA与PayPal组合策略,解锁游戏购买与礼品卡赠送

1. Steam美区支付的核心痛点与解决方案 很多玩家都遇到过这样的问题&#xff1a;好不容易注册了美区Steam账号&#xff0c;却发现国内的信用卡根本无法完成支付。我自己刚开始折腾美区账号时&#xff0c;也在这个环节卡了整整两周。Steam的风控机制确实严格得令人头疼&#xff…...

Obsidian-skills安全测试完整指南:识别和修复5大关键安全漏洞

Obsidian-skills安全测试完整指南&#xff1a;识别和修复5大关键安全漏洞 【免费下载链接】obsidian-skills Agent skills for Obsidian. Teach your agent to use Markdown, Bases, JSON Canvas, and use the CLI. 项目地址: https://gitcode.com/GitHub_Trending/ob/obsidi…...

Unity3D RPG游戏开发:从零构建角色扮演游戏的核心系统

1. 环境准备与项目初始化 第一次打开Unity Hub时&#xff0c;新手常会被各种版本和选项搞得晕头转向。我建议直接安装最新的LTS版本&#xff08;比如2022.3&#xff09;&#xff0c;这个版本就像游戏界的"稳定版安卓系统"&#xff0c;既不会太老缺少功能&#xff0c;…...

SEO网络推广费用高吗_需要多少年才能收回成本

SEO网络推广费用高吗?需要多少年才能收回成本 在当今数字化经济时代&#xff0c;SEO网络推广已经成为企业提升在线可见度和吸引客户的关键手段。不少企业在决定投资SEO推广时&#xff0c;常常会对“SEO网络推广费用高吗&#xff1f;需要多少年才能收回成本”这一问题感到困惑…...