scala笔记第一天(windows) (变量,循环)

本文深入浅出地介绍了Scala语言的基础知识,包括Scala与Java的关系、REPL环境的使用、变量声明、数据类型、函数调用、if表达式及循环语句等核心概念。通过丰富的实例演示了如何在Scala中进行数学运算、条件判断和循环控制。

java与scala的关系

Scala是基于Java虚拟机,也就是JVM的一门编程语言。所有Scala的代码,都需要经过编译为字节码,然后交给Java虚拟机运行。

Scala解释器的使用

REPL(scala解释器)
在这里插入图片描述

声明变量

在这里插入图片描述

数据类型与操作符

在这里插入图片描述

函数调用与apply()函数

函数调用方式
调用函数首先需要导包

scala> import scala.math._
import scala.math._

列几个函数

scala> sqrt(2)
res11: Double = 1.4142135623730951

scala> sqrt(3)
res12: Double = 1.7320508075688772

scala> pow(2,2)
res13: Double = 4.0

scala> min(2,Pi)
res16: Double = 2.0

scala> min(4,Pi)
res17: Double = 3.141592653589793

注意在Scala中调用函数时,如果不需要传递参数,则scala调用函数可省略括号例:

scala> "Hello Word".distinct
res14: String = Helo Wrd

apply函数
Scala中的apply函数是非常特殊的一种函数,在Scala的object中,可以声明apply函数。而使用“类名()”的形式,其实就是“类名.apply()”的一种缩写。通常使用这种方法来构造类的对象,而不是使用“new 类名()”的方式。

scala> "Hello Word"(6)
res18: Char = W

scala> "Hello Word"(4)
res19: Char = o

上面是apply()的缩写

scala> "Hello Word".apply(6)
res20: Char = W

scala> "Hello Word".apply(4)
res21: Char = o

if表达式

定义
在scala中,if或else最后一行语句返回的值,可以赋值给一个变量。

scala> val age = 30;if(age>18) 1 else 0
age: Int = 30
res22: Int = 1

scala> val isage = if(age<18) 1 else 0
isage: Int = 0

scala> isage
res23: Int = 0

if表达式的类型推断
如果if和else子句的值类型可能不同,scala会自动进行推断,取两个类型的公共父类(Any )。

scala> if(age>18 ) 1 else 0
res24: Int = 1

scala> if(age>18 ) "aaa" else 0
res25: Any = aaa

如果if后面没有写else,则默认else的值是Unit,也用()表示,类似于Java中的void或者null。

scala> if(age<18)"qqq" else()
res27: Any = ()

scala> if(age<18)"qqq"
res28: Any = ()

if语句在多行中
默认情况下,REPL只能解释一行语句,但是if表达式通常需要放在多行。可使用(:paste和ctrl+ D 的方式

scala> :paste
// Entering paste mode (ctrl-D to finish)

var age=21
if(age<18){
"about"
}else if(age<20)"teenager" else "haha"

// Exiting paste mode, now interpreting.

age: Int = 21
res33: String = haha

语句终结符,快表达式
默认情况下,scala不需要语句的终结符,默认将每一行作为一个,
一行放多条语句必须使用分号分割。

scala> var a,b,c = 0; if(a<10){b=b+1;c=c+1}
a: Int = 0
b: Int = 1
c: Int = 1

还可以使用花括号的方式

scala> var a,b,c = 0; if(a<10){
     | b = b+4
     | c = c+5}
a: Int = 0
b: Int = 4
c: Int = 5

还可以使用(:paste和ctrl+ D 的方式

scala> :paste
// Entering paste mode (ctrl-D to finish)

var a,b,c=1
if(a<10){
b= b +7
c= c +7
}

// Exiting paste mode, now interpreting.

a: Int = 1
b: Int = 8
c: Int = 8

输入和输出

scala> println("Hello Woreda");print("Hello Tyler")
Hello Woreda
Hello Tyler

在这里插入图片描述

scala> printf("Hi, my name is %s, I'm %d years old.\n", "Leo", 30)
Hi, my name is Leo, I'm 30 years old.

综合案例

scala> :paste
// Entering paste mode (ctrl-D to finish)

val name = readLine("Welcome to Game House. Please tell me your name: ")
print("Thanks. Then please tell me your age: ")
val age = readInt()
if(age > 18) {
  printf("Hi, %s, you are %d years old, so you are legel to come here!", name, age)
} else {
  printf("Sorry, boy, %s, you are only %d years old. you are illegal to come here!", name, age)
}

// Exiting paste mode, now interpreting.

循环

while循环

scala> :paste
// Entering paste mode (ctrl-D to finish)

var n =10
while(n>0){
println(n)
n-=1
}

// Exiting paste mode, now interpreting.

10
9
8
7
6
5
4
3
2
1
n: Int = 0

for循环
简易for

scala> var n=10;for(i <-1 to n)println(i)
1
2
3
4
5
6
7
8
9
10
n: Int = 10

使用until代替to (to包含最后一个函数,until不包含)

scala> var n=10;for(i <-1 until n)println(i)
1
2
3
4
5
6
7
8
9
n: Int = 10

对字符串遍历

scala> for(c <- "Hello ad")print(c)
Hello ad
scala> for(c <- "Hello ad")println(c)
H
e
l
l
o

a
d

跳出循环语句

scala> import scala.util.control.Breaks._
import scala.util.control.Breaks._

scala> :paste
// Entering paste mode (ctrl-D to finish)

breakable{
var n=10
for(c <- "Hello WORD"){
if(n==5) break;
print(c)
n-=1
}
}

// Exiting paste mode, now interpreting.

Hello

多重for循环

scala> :paste
// Entering paste mode (ctrl-D to finish)

for(i <- 1 to 9;j <- 1 to 9){
if(j==9){
println(i + "*"+ j + "=" +i*j)
}else{
print(i + "*"+ j + "=" +i*j + "  " )
}
}

// Exiting paste mode, now interpreting.

1*1=1  1*2=2  1*3=3  1*4=4  1*5=5  1*6=6  1*7=7  1*8=8  1*9=9
2*1=2  2*2=4  2*3=6  2*4=8  2*5=10  2*6=12  2*7=14  2*8=16  2*9=18
3*1=3  3*2=6  3*3=9  3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27
4*1=4  4*2=8  4*3=12  4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36
5*1=5  5*2=10  5*3=15  5*4=20  5*5=25  5*6=30  5*7=35  5*8=40  5*9=45
6*1=6  6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  6*7=42  6*8=48  6*9=54
7*1=7  7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  7*8=56  7*9=63
8*1=8  8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  8*9=72
9*1=9  9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81

if守卫,取偶数

scala> for(i <- 1 to 10 if i % 2 ==0)println(i)
2
4
6
8
10

for推导式:构造集合

scala> for(i <- 1 to 10) yield i
res70: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

基于蒙特卡洛法的规模化电动车有序充放电及负荷预测(Python&Matlab实现)内容概要:本文围绕“基于蒙特卡洛法的规模化电动车有序充放电及负荷预测”展开,结合Python和Matlab编程实现,重点研究大规模电动汽车在电网中的充放电行为建模与负荷预测方法。通过蒙特卡洛模拟技术,对电动车用户的出行规律、充电需求、接入时间与电量消耗等不确定性因素进行统计建模,进而实现有序充放电策略的优化设计与未来负荷曲线的精准预测。文中提供了完整的算法流程与代码实现,涵盖数据采样、概率分布拟合、充电负荷聚合、场景仿真及结果可视化等关键环节,有效支撑电网侧对电动车负荷的科学管理与调度决策。; 适合人群:具备一定电力系统基础知识和编程能力(Python/Matlab),从事新能源、智能电网、交通电气化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究大规模电动车接入对配电网负荷特性的影响;②设计有序充电策略以平抑负荷波动;③实现基于概率模拟的短期或长期负荷预测;④为电网规划、储能配置与需求响应提供数据支持和技术方案。; 阅读建议:建议结合文中提供的代码实例,逐步运行并理解蒙特卡洛模拟的实现逻辑,重点关注输入参数的概率分布设定与多场景仿真的聚合方法,同时可扩展加入分时电价、用户行为偏好等实际约束条件以提升模型实用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值