1、第一个kotlin程序
fun main(){
//在控制台输出Hello Kotlin!
println("Hello Kotlin!")
}
2、注释
2.1 单行注释
//这里是单行注释内容
2.2 多行注释
/*
这里是多行注释内容
这里是多行注释内容
这里是多行注释内容
*/
/**
* 多行注释也可这样写
* 多行注释也可这样写
* 多行注释也可这样写
*/
3、基本数据类型
3.1 变量(var)VS常量(val)
整型变量
var x: Int = 5 //定义一个整型变量x,初值为5
x = 10 //可以修改变量的值
整型常量
val c = 10 //定义常量c,初值为10
c = 6 //会报错,常量不可被修改
3.2 推断类型
var a = 10 //Kotlin可自动推断类型,整型默认为Int
3.3 整数类型
有符号整数
数据类型 | 介绍 |
---|---|
Byte | 有符号8位整数 |
Short | 有符号16位整数 |
Int | 有符号32位整数 |
Long | 有符号64位整数 |
无符号整数
数据类型 | 介绍 |
---|---|
UByte | 无符号8位整数 |
UShort | 无符号16位整数 |
UInt | 无符号32位整数 |
ULong | 无符号64位整数 |
定义整型变量
var x: Int = 5 //定义一个整型变量x,初值为5
var a: Int //定义一个整型变量a,没有初值
a=5 //可以使用时再赋值
var b = a //把a的值赋给b
var b = a + a //把a+a的值赋给b
类型转换
var a: Long = 89 //89本身是Int类型,被Long类型变量接收,发生了类型转换
var b: Long = 89L //89本身是Long类型,被Long类型变量接收
二进制、八进制、十六进制
var a: Int = 1_000_000 //0的数量数不清,可用"_"分割
var b: Int = 0x16 //十六进制,0x前缀
var c: Int = 0b1010 //二进制,0b前缀
//kotlin默认不支持八进制
无符号整数
var a: UInt = 12u //无符号整数12,后缀u(大写小写都行)
var b: ULong = 12UL //无符号Long类型整数12,后缀UL
//U表示unsigned,L表示Long
3.4 浮点数类型(小数)
Kotlin的浮点数符合IEEE754标准
数据类型 | 位数 | 介绍 |
---|---|---|
Float | 32位 | 单精度浮点数 |
Double | 64位 | 双精度浮点数 |
var exp = 2.71828 //默认推断为Double类型
var pi: Float = 3.14f //后缀f,表示是Float类型数据
var a1:Double=1 //错误写法,1不是小数,无法编译通过
var a2:Double=1.0 //正确写法,1.0是小数
Kotlin中,Int和Float/Double能直接转换,用函数可以(如toDouble)
3.4 数据运算
本质:通过运算符重载实现功能
运算符号 | 介绍 |
---|---|
+ | 加 |
– | 减 |
* | 乘 |
/ | 除(直接删除小数,不是四舍五入) |
% | 取余 |
and | 按位与 |
or | 按位或 |
xor | 按位异或 |
inv | 按位取反 |
shl | 有符号左移 |
shr | 有符号右移 |
ushr | 无符号右移(没有无符号左移) |
= | 赋值 |
自增/自减
var a: Int = 1
a++ //a自增1
a = a + 2 //a自增2
a += 2 //a自增2
a-- //a自减1
a = a - 2 //a自减2
a -= 2 //a自减2
a += 2
等价于a = a + 2
a -= 2
等价于a = a - 2
a *= 2
等价于a = a * 2
a /= 2
等价于a = a / 2
a++,a–,++a,–a
设a的初值为2
a++
这个表达式的值为2(a+1之前的值)
++a
这个表达式的值为3(a+1之后的值)
a--
这个表达式的值为2(a-1之前的值)
--a
这个表达式的值为1(a-1之后的值)
移位
var a: Int = 1
var b = a shl 2 //把a左移两位后的值赋给b,即b=4
3.5 布尔类型
布尔类型的变量只有两种值
值 | 介绍 |
---|---|
true | 真 |
false | 假 |
var a: Boolean = true //定义一个Boolean类型的变量
var b: Boolean = 1>=2 //1大于等于2吗?显然结果为false
var c:Int =100
var c1:Boolean=c in 0..101//判断c是否在[0,101]内。结果为true
Boolean之间的运算
var a = true
var b = false
println(a && b) //逻辑与。输出false
println(a || b) //逻辑或。输出true
println(!a) //逻辑取反。输出false
println(1 > 2 && 6 == 7) //表达式。有短路性质
//短路:1>2已经是false,则后面的6==7不会进行比较(不会运行)
println(1 2 || 6 == 7)//表达式。有短路性质
3.6 字符类型(Char)
- 默认ASCII码,如
'a'
- 也可用Unicode码,如
'u2713'
(一个对勾符号'✓'
)
var c: Char = 'a' //定义一个Char类型的变量
var c: Char = 'u2713' //定义一个Char类型的变量
转义字符
转义字符 | 含义 |
---|---|
t |
制表符 |
b |
退格 |
n |
换行(LF) |
r |
回车(CR) |
' |
单引号 |
" |
双引号 |
|
反斜杠 |
$ |
美元符号 |
3.6 字符串类型(String)
- String就是一串Char
- 不可修改
- 双引号包裹,如
"abc123"
var s: String = "abcde"
s="12345" //此时s为"12345",是一个新的String。原来的"abcde"还在,只是不知道在哪里
多行String
//多行String,用三个引号
//不能用转义字符了
//每行前面的空格不会被忽略
var str:String="""
asdf
asdf
qwerq
123
"""
println(str)
//用trimIndent()忽略每行前面的空格等
var str:String="""
asdf
asdf
qwerq
123
""".trimIndent()
println(str)
字符串拼接
var a = "abc"
var b = "123"
println(a + b + 999 + true)//字符串拼接
//拼接时,最左边的元素必须是字符串
字符串模板
var a = 25
var b = "$a 个用户" //字符串模板
println(b) //输出“25 个用户”(25后面有空格)
var c = "${a}个用户" //字符串模板
println(c) //输出“25个用户”(25后面没有空格)
println("$${a}个用户")//想使用美元符,用转义字符即可
4、流程控制
判断条件必须是布尔类型,如
true
a>0
s==3 && a
4.1 if-else
var a = 1
if (a > 0) {
println("a大于0!")
} else {
println("a小于等于0!")
}
var score = 85
if (score >= 0 && score60) {
println("不及格!")
} else if (score 80){
println("中等!")
}else if (score 90){
println("良好!")
}else if (score 1000){
println("优秀!")
}else{
println("输入不合法!")
}
用判断条件赋值
var score = 100
var str = if (score == 100) "excellent" else "no"
println(str) //输出:excellent
var score = 100
var str = if (score == 100) {
println("牛")
"满分" //默认最后一行作为返回值
} else {
println("不牛")
"不是满分"
}
println(str)
4.2 when(相当于switch-case)
类比C语言中的switch-case
语句
var s = 'B'
var mvalue = when (s) {
服务器托管网 'A' -> {
println("是A班")
"A班" //类似if-else,最后一行可用于赋值
}
'B' -> {
println("是B班")
"B班"
}
'C' -> {
println("是C班")
"C班"
}
'D' -> {
println("是D班")
"D班"
}
else -> {
println("是非法数据")
"非法数据"
}
}
println(mvalue)
范围判断的另一种写法
var s = 123
when (s) {
in 10..20 -> println("s属于[10,20]")
in 20..1000 -> println("s属于[20,1000]")
//也可以加花括号,变为多行
}
4.3 for循环
//输出0到6
for (i in 0..6) //闭区间[0,6]
println(i)
//输出0到6中间的偶数
for (i in 0..6 step 2) //控制步长为2
println(i)
//也可以这样写
var mrange = 0..6 step 2
for (i in mrange) //控制步长为2
println(i)
倒序输出
//输出0到6中间的偶数(倒序)
for (i in 6 downTo 0 step 2) //控制步长为2
println(i)
跳过一轮循环
- 关键字
continue
- 只能控制一层循环(他所在的那一层)
//输出0到6(跳过0)
for (i in 0..6) { //闭区间[0,6]
if(i == 0) continue //跳过0
println(i)
}
跳过一层循环
- 关键字
break
- 只能控制一层循环(他所在的那一层)
//输出0到1
for (i in 0..6) { //闭区间[0,6]
if(i == 2) break //跳出循环
println(i)
}
可指定break和coutinue控制哪一层循环
aa@ for(i in 1..5){
for(j服务器托管网 in 1..5){
if(i==j) continue@aa //i==j时,跳过一轮最外层循环
print("($i,$j)")
}
println()
}
/*代码输出
(2,1)(3,1)(3,2)(4,1)(4,2)(4,3)(5,1)(5,2)(5,3)(5,4)
*/
4.4 while循环
- 不知道循环几次,但知道循环结束条件
var i = 1
while (i 10) {
println(i)
i++
}
4.5 do-while循环
- 不知道循环几次,但知道循环结束条件
- 会先执行一次循环体内的内容
var i = 1
do {
println(i)
i++
} while (i 10)
参考
https://www.bilibili.com/video/BV1P94y1c7tV?p=4&vd_source=c708def0a324eac06f3f31f597632be7
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
文章目录 数据准备 建立模型 建立输入层 x 建立隐藏层h1 建立隐藏层h2 建立输出层 定义训练方式 建立训练数据label真实值 placeholder 定义loss function 选择optimizer 定义评估模型的准确率 计算每一项数据是否正确预…