尚硅谷大数据技术Scala教程-笔记01【Scala课程简介、Scala入门、变量和数据类型、运算符、流程控制】
视频地址:尚硅谷大数据技术之Scala入门到精通教程(小白快速上手scala)_哔哩哔哩_bilibili
- 尚硅谷大数据技术Scala教程-笔记01【Scala课程简介、Scala入门、变量和数据类型、运算符、流程控制】
- 尚硅谷大数据技术Scala教程-笔记02【函数式编程】
- 尚硅谷大数据技术Scala教程-笔记03【面向对象】
- 尚硅谷大数据技术Scala教程-笔记04【集合】
- 尚硅谷大数据技术Scala教程-笔记05【模式匹配、异常】
目录
第00章-Scala课程简介
P001【001_尚硅谷_Scala_课程简介】09:32
第01章-Scala入门
P002【002_尚硅谷_Scala_Scala概述(一)_Scala发展历史】09:25
P003【003_尚硅谷_Scala_Scala概述(二)_Scala和Java的关系】06:57
P004【004_尚硅谷_Scala_Scala概述(三)_Scala特点总结】05:40
P005【005_尚硅谷_Scala_Scala环境搭建(一)_Scala安装和交互式命令行测试】09:44
P006【006_尚硅谷_Scala_Scala环境搭建(二)_Scala源文件编写和运行】10:21
P007【007_尚硅谷_Scala_Scala环境搭建(三)_Scala编译结果的反编译深入分析】15:46
P008【008_尚硅谷_Scala_在IDE中编写HelloWorld(一)_项目创建和环境配置】06:50
P009【009_尚硅谷_Scala_在IDE中编写HelloWorld(二)_编写代码】04:33
P010【010_尚硅谷_Scala_在IDE中编写HelloWorld(三)_代码中语法的简单说明】05:24
P011【011_尚硅谷_Scala_在IDE中编写HelloWorld(四)_伴生对象的扩展说明】22:58
P012【012_尚硅谷_Scala_在IDE中编写HelloWorld(五)_关联源码和查看官方指南】02:41
第02章-变量和数据类型
P013【013_尚硅谷_Scala_变量和数据类型(一)_注释和基本编程习惯】06:56
P014【014_尚硅谷_Scala_变量和数据类型(二)_变量和常量】16:48
P015【015_尚硅谷_Scala_变量和数据类型(三)_标识符】10:05
P016【016_尚硅谷_Scala_变量和数据类型(四)_字符串】21:04
P017【017_尚硅谷_Scala_变量和数据类型(五)_控制台标准输入】03:52
P018【018_尚硅谷_Scala_变量和数据类型(六)_读写文件】07:03
P019【019_尚硅谷_Scala_变量和数据类型(七)_数据类型系统】13:44
P020【020_尚硅谷_Scala_变量和数据类型(八)_整型和浮点类型】18:43
P021【021_尚硅谷_Scala_变量和数据类型(九)_字符和布尔类型】10:19
P022【022_尚硅谷_Scala_变量和数据类型(十)_空类型】14:33
P023【023_尚硅谷_Scala_变量和数据类型(十一)_Unit类型的源码实现】04:52
P024【024_尚硅谷_Scala_变量和数据类型(十二)_类型转换(一)_Java类型转换复习】07:21
P025【025_尚硅谷_Scala_变量和数据类型(十二)_类型转换(三)_Scala自动类型转换】13:07
P026【026_尚硅谷_Scala_变量和数据类型(十二)_类型转换(四)_Scala强制类型转换】12:03
P027【027_尚硅谷_Scala_变量和数据类型(十二)_类型转换(五)_强转溢出面试题】09:22
第03章-运算符
P028【028_尚硅谷_Scala_运算符(一)_算术运算符】09:04
P029【029_尚硅谷_Scala_运算符(二)_比较运算符】09:25
P030【030_尚硅谷_Scala_运算符(三)_逻辑运算符】14:36
P031【031_尚硅谷_Scala_运算符(四)_赋值运算符】15:13
P032【032_尚硅谷_Scala_运算符(五)_位运算符】18:03
P033【033_尚硅谷_Scala_运算符(六)_运算符的本质】09:03
第04章-流程控制
P034【034_尚硅谷_Scala_流程控制(一)_条件分支(一)_If-Else常规用法】12:06
P035【035_尚硅谷_Scala_流程控制(一)_条件分支(二)_If-Else的返回值】13:48
P036【036_尚硅谷_Scala_流程控制(一)_条件分支(三)_嵌套分支】04:45
P037【037_尚硅谷_Scala_流程控制(二)_For循环(一)_范围遍历】12:27
P038【038_尚硅谷_Scala_流程控制(二)_For循环(二)_不包含边界的范围遍历】07:38
P039【039_尚硅谷_Scala_流程控制(二)_For循环(三)_集合遍历】03:17
P040【040_尚硅谷_Scala_流程控制(二)_For循环(四)_循环守卫】04:41
P041【041_尚硅谷_Scala_流程控制(二)_For循环(五)_循环步长】14:10
P042【042_尚硅谷_Scala_流程控制(二)_For循环(六)_循环嵌套】10:34
P043【043_尚硅谷_Scala_流程控制(二)_For循环(七)_循环引入变量】04:57
P044【044_尚硅谷_Scala_流程控制(二)_For循环(八)_练习_输出九层妖塔】11:03
P045【045_尚硅谷_Scala_流程控制(二)_For循环(九)_for循环返回值】10:20
P046【046_尚硅谷_Scala_流程控制(三)_While循环】06:06
P047【047_尚硅谷_Scala_流程控制(四)_循环中断】12:04
第00章-Scala课程简介
P001【001_尚硅谷_Scala_课程简介】09:32
scala与java类似,基于jvm的静态类型高级编程语言。spark底层是用scala编写的。
为什么要学习Scala?
- Scala——Java++
- Scala基于JVM,和Java完全兼容,同样具有跨平台、可移植性好、方便的垃圾回收等特性
- Scala比Java更加面向对象
- Scala是一门函数式编程语言
- Scala更适合大数据的处理
- Scala对集合类型数据处理有非常好的支持
- Spark的底层用Scala编写
- scala官网: The Scala Programming Language
- spark官网: Apache Spark™ - Unified Engine for large-scale data analytics
The Scala Programming Language
Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.
- 1:入门
- 2、3、4:基本语法介绍
- 5、6、7:核心特性
- 8、9、10、11:其他特色综合讲解
本课程特色
- 内容详尽,重点放在后续项目的应用需要;
- 案例驱动,由浅入深,通俗易懂,编程小白也可以快速上手;
- Scala版本2.12,完全匹配最新版项目需要。
第01章-Scala入门
P002【002_尚硅谷_Scala_Scala概述(一)_Scala发展历史】09:25
1.1.2 Scala 发展历史
P003【003_尚硅谷_Scala_Scala概述(二)_Scala和Java的关系】06:57
Scala和Java及JVM关系图
P004【004_尚硅谷_Scala_Scala概述(三)_Scala特点总结】05:40
1、2、3、4
P005【005_尚硅谷_Scala_Scala环境搭建(一)_Scala安装和交互式命令行测试】09:44
P006【006_尚硅谷_Scala_Scala环境搭建(二)_Scala源文件编写和运行】10:21
public class HelloJava {
public static void main(String[] args) {
System.out.println("Hello, world !");
System.out.println("小黑子~");
}
}
object HelloScala {
def main(args : Array[String]) : Unit = {
println("hello, world!");
}
}
P007【007_尚硅谷_Scala_Scala环境搭建(三)_Scala编译结果的反编译深入分析】15:46
java -cp %SCALA_HOME%/lib/scala-library.jar; HelloScala
P008【008_尚硅谷_Scala_在IDE中编写HelloWorld(一)_项目创建和环境配置】06:50
P009【009_尚硅谷_Scala_在IDE中编写HelloWorld(二)_编写代码】04:33
- class:scala类
- object:单例对象,全局只有一份的对象,类似于java中的静态对象
P010【010_尚硅谷_Scala_在IDE中编写HelloWorld(三)_代码中语法的简单说明】05:24
package chapter01
/*
object: 关键字,声明一个单例对象(伴生对象)
*/
object HelloWorld {
/*
main方法:从外部可以直接调用执行的方法
def方法名称(参数名称: 参数类型): 返回值类型 = { 方法体 }
*/
def main(args: Array[String]): Unit = {//args参数实际上是一个string类型的数组。scala用[]表示泛型。
println("hello world !")
System.out.println("hello world !")
System.out.println("中文不乱码!")
System.out.println("hello scala from java !")
}
}
P011【011_尚硅谷_Scala_在IDE中编写HelloWorld(四)_伴生对象的扩展说明】22:58
package chapter01
class Student(name: String, var age: Int) {
def printInfo(): Unit = {
println(name + " " + age + " " + Student.school)
}
}
//引入伴生对象
object Student {
val school: String = "atguigu"
def main(args: Array[String]): Unit = {
val alice = new Student("alice", 222)
val bob = new Student("bob", 333)
alice.printInfo()
bob.printInfo()
}
}
P012【012_尚硅谷_Scala_在IDE中编写HelloWorld(五)_关联源码和查看官方指南】02:41
1.5 关联Scala源码
官方编程指南,在线查看:https://www.scala-lang.org/
第02章-变量和数据类型
P013【013_尚硅谷_Scala_变量和数据类型(一)_注释和基本编程习惯】06:56
package chapter02
import chapter01.Student
/*
这是一个简单的测试程序,测试注释!
*/
object Test01_Comment {
/**
* 程序的入口方法
*
* @param args 外部传入的参数
*/
def main(args: Array[String]): Unit = {
//打印输出
println("hello")
}
}
P014【014_尚硅谷_Scala_变量和数据类型(二)_变量和常量】16:48
variable value、
package chapter02
import chapter01.Student
object Test02_Variable {
def main(args: Array[String]): Unit = {
// 声明一个变量的通用语法
var a: Int = 10
//(1)声明变量时,类型可以省略,编译器自动推导,即类型推导
var a1 = 10
val b1 = 23
//(2)类型确定后,就不能修改,说明Scala是强数据类型语言。
var a2 = 15 // a2类型为Int
//a2 = "hello",报错!
//(3)变量声明时,必须要有初始值
//var a3: Int
//(4)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改。
a1 = 12
//b1 = 25
var alice = new Student("alice", 20)
alice = new Student("Alice", 20)
alice = null
val bob = new Student("bob", 23)
bob.age = 24
bob.printInfo()
//bob = new Student("bob", 24)
}
}
P015【015_尚硅谷_Scala_变量和数据类型(三)_标识符】10:05
package chapter02
object Test03_Identifier {
def main(args: Array[String]): Unit = {
//(1)以字母或者下划线开头,后接字母、数字、下划线
val hello: String = ""
var Hello123 = ""
val _abc = 123
//错误的定义方式
//val h-b = ""
//val 123abc = 234
//(2)以操作符开头,且只包含操作符(+ - * / # !等)
val -+/% = "hello"
println(-+/%) // hello
//(3)用反引号`....`包括的任意字符串,即使是Scala关键字(39个)也可以
val `if` = "if"
println(`if`) // if
}
}
P016【016_尚硅谷_Scala_变量和数据类型(四)_字符串】21:04
模板字符串:
- s"":前缀
s
模板字符串,前缀f
格式化模板字符串,通过$
获取变量值,%
后跟格式化字符串。- f"":前缀
s
模板字符串,前缀f
格式化模板字符串,通过$
获取变量值,%
后跟格式化字符串。- raw"":不作格式化处理,按照原始样子输出。
package chapter02
object Test04_String {
def main(args: Array[String]): Unit = {
//(1)字符串,通过+号连接
val name: String = "alice"
val age: Int = 18
println(age + "岁的" + name + "在尚硅谷学习")
// *用于将一个字符串复制多次并拼接
println(name * 3)
//(2)printf用法:字符串,通过%传值。
printf("%d岁的%s在尚硅谷学习", age, name)
println()
println()
//(3)字符串模板(插值字符串):通过$获取变量值
println(s"${age}岁的${name}在尚硅谷学习")
val num: Double = 2.3456
println(f"The num is ${num}%2.2f") //格式化模板字符串
println(raw"The num is ${num}%2.2f")//raw不作格式化处理
//三引号表示字符串,保持多行字符串的原格式输出
val sql =
s"""
|select *
|from
| student
|where
| name = ${name}
|and
| age > ${age}
|""".stripMargin
println(sql)
}
}
P017【017_尚硅谷_Scala_变量和数据类型(五)_控制台标准输入】03:52
package chapter02
import scala.io.StdIn
object Test05_StdIn {
def main(args: Array[String]): Unit = {
//输入信息
println("请输入您的大名:")
val name: String = StdIn.readLine()
println("请输入您的芳龄:")
val age: Int = StdIn.readInt()
//控制台打印输出
println(s"欢迎${age}岁的${name}来到尚硅谷学习!")
}
}
P018【018_尚硅谷_Scala_变量和数据类型(六)_读写文件】07:03
package chapter02
import java.io.{File, PrintWriter}
import scala.io.Source
object Test06_FileIO {
def main(args: Array[String]): Unit = {
//1、从文件中读取数据
Source.fromFile("src/main/resources/test.txt").foreach(print)//Source.fromFile()读文件、foreach()遍历操作
//2、将数据写入文件
val writer = new PrintWriter(new File("src/main/resources/output.txt"))
writer.write("hello scala from java writer!!!")
writer.close()
}
}
P019【019_尚硅谷_Scala_变量和数据类型(七)_数据类型系统】13:44
回顾:Java数据类型
Java基本类型:char、byte、short、int、long、float、double、boolean。
Java引用类型:(对象类型)
由于Java有基本类型,而且基本类型不是真正意义的对象,即使后面产生了基本类型的包装类,但是仍然存在基本数据类型,所以Java语言并不是真正意思的面向对象。
Java基本类型的包装类:Character、Byte、Short、Integer、Long、Float、Double、Boolean。
注意:Java中基本类型和引用类型没有共同的祖先。
Scala数据类型
P020【020_尚硅谷_Scala_变量和数据类型(八)_整型和浮点类型】18:43
package chapter02
import chapter01.Student
object Test07_DataType {
def main(args: Array[String]): Unit = {
//1、整数类型
val a1: Byte = 127
val a2: Byte = -128
//val a2: Byte = 128 //error
val a3 = 12 //整数默认类型为Int
val a4: Long = 1324135436436L //长整型数值定义
val b1: Byte = 10
val b2: Byte = 10 + 20
println(b2)
//val b3: Byte = b1 + 20
val b3: Byte = (b1 + 20).toByte
println(b3)
//2、浮点类型
val f1: Float = 1.2345f
val d1 = 34.2245
}
}
P021【021_尚硅谷_Scala_变量和数据类型(九)_字符和布尔类型】10:19
package chapter02
import chapter01.Student
object Test07_DataType {
def main(args: Array[String]): Unit = {
//3、字符类型
val c1: Char = 'a'
println(c1)
val c2: Char = '9'
println(c2)
//控制字符
val c3: Char = '\t' //制表符
val c4: Char = '\n' //换行符
println("abc" + c3 + "def")
println("abc" + c4 + "def")
//转义字符
val c5 = '\\' //表示\自身
val c6 = '\"' //表示"
println("abc" + c5 + "def")
println("abc" + c6 + "def")
//字符变量底层保存ASCII码
val i1: Int = c1
println("i1: " + i1)
val i2: Int = c2
println("i2: " + i2)
val c7: Char = (i1 + 1).toChar
println(c7)
val c8: Char = (i2 - 1).toChar
println(c8)
//4、布尔类型
val isTrue: Boolean = true
println(isTrue)
}
}
P022【022_尚硅谷_Scala_变量和数据类型(十)_空类型】14:33
package chapter02
import chapter01.Student
object Test07_DataType {
def main(args: Array[String]): Unit = {
//5、空类型
//5.1、空值Unit
def m1(): Unit = {
println("m1被调用执行")
}
val a: Unit = m1()
println("a: " + a)
//5.2、空引用Null
//val n: Int = null //error
var student: Student = new Student("alice", 20)
student = null
println(student)
//5.3、Nothing,nothing不会正常返回
def m2(n: Int): Int = {
if (n == 0)
throw new NullPointerException
else
return n
}
val b: Int = m2(2)
println("b: " + b)
}
}
P023【023_尚硅谷_Scala_变量和数据类型(十一)_Unit类型的源码实现】04:52
/*
* Scala (https://www.scala-lang.org)
*
* Copyright EPFL and Lightbend, Inc.
*
* Licensed under Apache License 2.0
* (http://www.apache.org/licenses/LICENSE-2.0).
*
* See the NOTICE file distributed with this work for
* additional information regarding copyright ownership.
*/
// DO NOT EDIT, CHANGES WILL BE LOST
// This auto-generated code can be modified in "project/GenerateAnyVals.scala".
// Afterwards, running "sbt generateSources" regenerates this source file.
package scala
/** `Unit` is a subtype of [[scala.AnyVal]]. There is only one value of type
* `Unit`, `()`, and it is not represented by any object in the underlying
* runtime system. A method with return type `Unit` is analogous to a Java
* method which is declared `void`.
*/
final abstract class Unit private extends AnyVal {
// Provide a more specific return type for Scaladoc
override def getClass(): Class[Unit] = ???
}
object Unit extends AnyValCompanion {
/** Transform a value type into a boxed reference type.
*
* @param x the Unit to be boxed
* @return a scala.runtime.BoxedUnit offering `x` as its underlying value.
*/
def box(x: Unit): scala.runtime.BoxedUnit = scala.runtime.BoxedUnit.UNIT
/** Transform a boxed type into a value type. Note that this
* method is not typesafe: it accepts any Object, but will throw
* an exception if the argument is not a scala.runtime.BoxedUnit.
*
* @param x the scala.runtime.BoxedUnit to be unboxed.
* @throws ClassCastException if the argument is not a scala.runtime.BoxedUnit
* @return the Unit value ()
*/
def unbox(x: java.lang.Object): Unit = x.asInstanceOf[scala.runtime.BoxedUnit]
/** The String representation of the scala.Unit companion object. */
override def toString = "object scala.Unit"
}
P024【024_尚硅谷_Scala_变量和数据类型(十二)_类型转换(一)_Java类型转换复习】07:21
public class TestDataTypeConversion {
public static void main(String[] args) {
byte b = 10;
test(b);//bbbb
char c = 'a';
//short c2 = (short) c;
test(c);//ssss
}
public static void test(byte b) {
System.out.println("bbbb");
}
public static void test(short s) {
System.out.println("ssss");
}
public static void test(char c) {
System.out.println("cccc");
}
public static void test(int i) {
System.out.println("iiii");
}
}
P025【025_尚硅谷_Scala_变量和数据类型(十二)_类型转换(三)_Scala自动类型转换】13:07
当 Scala 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:
package chapter02
object Test08_DataTypeConversion {
def main(args: Array[String]): Unit = {
//1、自动类型转换
//(1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
val a1: Byte = 10
val b1: Long = 2353
val result1: Long = a1 + b1
val result11: Int = (a1 + b1.toInt) // 强转
//(2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
val a2: Byte = 10
val b2: Int = a2
//val c2: Byte = b2 // error
//(3)(byte,short)和char之间不会相互自动转换。
val a3: Byte = 10
val b3: Char = 'b'
//val c3: Byte = b3 // error
val c3: Int = b3
println(c3)
//(4)byte,short,char他们三者可以计算,在计算时首先转换为int类型。
val a4: Byte = 12
val b4: Short = 25
val c4: Char = 'c'
val result4: Int = a4 + b4
val result44: Int = a4 + b4 + c4
println(result44)
}
}
P026【026_尚硅谷_Scala_变量和数据类型(十二)_类型转换(四)_Scala强制类型转换】12:03
package chapter02
object Test08_DataTypeConversion {
def main(args: Array[String]): Unit = {
//2、强制类型转换
//(1)将数据由高精度转换为低精度,就需要使用到强制转换
val n1: Int = -2.9.toInt
println("n1: " + n1)
//(2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
val n2: Int = 2.6.toInt + 3.7.toInt
val n3: Int = (2.6 + 3.7).toInt
println("n2: " + n2)
println("n3: " + n3)
//3、数值类型和String类型的转换
// (1) 数值转String
val n: Int = 27
val s: String = n + ""
println(s)
// (2) String转数值
val m: Int = "12".toInt
val f: Float = "12.3".toFloat
val f2: Int = "12.3".toDouble.toInt
println(f2)
}
}
P027【027_尚硅谷_Scala_变量和数据类型(十二)_类型转换(五)_强转溢出面试题】09:22
package chapter02
/*
128: Int类型,占据4个字节,32位
原码 0000 0000 0000 0000 0000 0000 1000 0000
补码 0000 0000 0000 0000 0000 0000 1000 0000
截取最后一个字节,Byte
得到补码 1000 0000
表示最大负数 -128
130: Int类型,占据4个字节,32位
原码 0000 0000 0000 0000 0000 0000 1000 0010
补码 0000 0000 0000 0000 0000 0000 1000 0010
截取最后一个字节,Byte
得到补码 1000 0010
对应原码 1111 1110
-126
*/
object Test09_Problem_DataTypeConversion {
def main(args: Array[String]): Unit = {
var n: Int = 130
val b: Byte = n.toByte
println(b)
}
}
第03章-运算符
P028【028_尚硅谷_Scala_运算符(一)_算术运算符】09:04
package chapter03
import com.sun.javafx.scene.control.behavior.DatePickerBehavior
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
//1、算术运算符
println("===================1、算术运算符")
val result1: Int = 10 / 3
println(result1) //3
val result2: Double = 10 / 3
println(result2) //3.0
val result3: Double = 10.0 / 3
println(result3.formatted("%5.2f")) //3.33
val result4: Int = 10 % 3
println(result4) //1
}
}
P029【029_尚硅谷_Scala_运算符(二)_比较运算符】09:25
package chapter03
import com.sun.javafx.scene.control.behavior.DatePickerBehavior
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
//2、比较运算符
println("===================2、比较运算符")
val s1: String = "hello"
val s2: String = new String("hello")
println(s1 == s2) //true
println(s1.equals(s2)) //true
println(s1.eq(s2)) //false
}
}
P030【030_尚硅谷_Scala_运算符(三)_逻辑运算符】14:36
package chapter03
import com.sun.javafx.scene.control.behavior.DatePickerBehavior
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
//3、逻辑运算符
println("===================3、逻辑运算符")
def m(n: Int): Int = {
println("m被调用")
return n
}
val n = 1
println((4 > 5) && m(n) > 0) //false
//判断一个字符串是否为空
def isNotEmpty(str: String): Boolean = {
return str != null && !("".equals(str.trim))
}
println(isNotEmpty(null)) //false
}
}
P031【031_尚硅谷_Scala_运算符(四)_赋值运算符】15:13
package chapter03
import com.sun.javafx.scene.control.behavior.DatePickerBehavior
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
//4、赋值运算符
println("===================4、赋值运算符")
//var b: Byte = 10
var i: Int = 12
//b += 1
i += 1
println(i) //13
//i ++
}
}
P032【032_尚硅谷_Scala_运算符(五)_位运算符】18:03
package chapter03
import com.sun.javafx.scene.control.behavior.DatePickerBehavior
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
//5、位运算符
println("===================5、位运算符")
val a: Byte = 60
println(a << 3) //480
println(a >> 2) //15
val b: Short = -13
println(b << 2) //-52
println(b >> 2) //-4
println(b >>> 2) //1073741820
}
}
P033【033_尚硅谷_Scala_运算符(六)_运算符的本质】09:03
package chapter03
import com.sun.javafx.scene.control.behavior.DatePickerBehavior
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
//1、算术运算符
println("===================1、算术运算符")
val result1: Int = 10 / 3
println(result1) //3
val result2: Double = 10 / 3
println(result2) //3.0
val result3: Double = 10.0 / 3
println(result3.formatted("%5.2f")) //3.33
val result4: Int = 10 % 3
println(result4) //1
//2、比较运算符
println("===================2、比较运算符")
val s1: String = "hello"
val s2: String = new String("hello")
println(s1 == s2) //true
println(s1.equals(s2)) //true
println(s1.eq(s2)) //false
//3、逻辑运算符
println("===================3、逻辑运算符")
def m(n: Int): Int = {
println("m被调用")
return n
}
val n = 1
println((4 > 5) && m(n) > 0) //false
//判断一个字符串是否为空
def isNotEmpty(str: String): Boolean = {
return str != null && !("".equals(str.trim))
}
println(isNotEmpty(null)) //false
//4、赋值运算符
println("===================4、赋值运算符")
//var b: Byte = 10
var i: Int = 12
//b += 1
i += 1
println(i) //13
//i ++
//5、位运算符
println("===================5、位运算符")
val a: Byte = 60
println(a << 3)//480
println(a >> 2)//15
val b: Short = -13
println(b << 2)//-52
println(b >> 2)//-4
println(b >>> 2)//1073741820
//6、运算符的本质
println("===================6、运算符的本质")
val n1: Int = 12
val n2: Int = 37
println(n1.+(n2))//49
println(n1 + n2)//49
println(1.34.*(25))//33.5
println(1.34 * 25)//33.5
//println(7.5 toInt toString)
}
}
第04章-流程控制
P034【034_尚硅谷_Scala_流程控制(一)_条件分支(一)_If-Else常规用法】12:06
package chapter04
import scala.io.StdIn
object Test01_IfElse {
def main(args: Array[String]): Unit = {
println("请输入您的年龄:")
val age: Int = StdIn.readInt()
// 1. 单分支
if (age >= 18) {
println("成年")
}
println("===================")
// 2. 双分支
if (age >= 18) {
println("成年")
} else {
println("未成年")
}
println("===================")
// 3. 多分支
if (age <= 6) {
println("童年")
} else if (age < 18) {
println("青少年")
} else if (age < 35) {
println("青年")
} else if (age < 60) {
println("中年")
} else {
println("老年")
}
println("===================")
}
}
P035【035_尚硅谷_Scala_流程控制(一)_条件分支(二)_If-Else的返回值】13:48
package chapter04
import scala.io.StdIn
object Test01_IfElse {
def main(args: Array[String]): Unit = {
println("请输入您的年龄:")
val age: Int = StdIn.readInt()
// 4. 分支语句的返回值
val result: Any = if (age <= 6) {
println("童年")
"童年"
} else if (age < 18) {
println("青少年")
"青少年"
} else if (age < 35) {
println("青年")
age
} else if (age < 60) {
println("中年")
age
} else {
println("老年")
age
}
println("result: " + result)
// java中三元运算符 String res = (age >= 18)?"成年":"未成年"
val res: String = if (age >= 18) {
"成年"
} else {
"未成年"
}
val res2 = if (age >= 18) "成年" else "未成年"
}
}
P036【036_尚硅谷_Scala_流程控制(一)_条件分支(三)_嵌套分支】04:45
package chapter04
import scala.io.StdIn
object Test01_IfElse {
def main(args: Array[String]): Unit = {
println("请输入您的年龄:")
val age: Int = StdIn.readInt()
// 5. 嵌套分支
if (age >= 18) {
println("成年")
if (age >= 35) {
if (age >= 60) {
println("老年")
} else {
println("中年")
}
} else {
println("青年")
}
} else {
println("未成年")
if (age <= 6) {
println("童年")
} else {
println("青少年")
}
}
}
}
P037【037_尚硅谷_Scala_流程控制(二)_For循环(一)_范围遍历】12:27
package chapter04
import scala.collection.immutable
object Test02_ForLoop {
def main(args: Array[String]): Unit = {
// java for语法: for(int i = 0; i < 10; i++){ System.out.println(i + ". hello world") }
// 1. 范围遍历
for (i <- 1 to 10) {
println(i + ". hello world")
}
for (i: Int <- 1.to(10)) {
println(i + ". hello world")
}
}
}
P038【038_尚硅谷_Scala_流程控制(二)_For循环(二)_不包含边界的范围遍历】07:38
package chapter04
import scala.collection.immutable
object Test02_ForLoop {
def main(args: Array[String]): Unit = {
for (i <- Range(1, 10)) {
println(i + ". hello world")
}
for (i <- 1 until 10) {
println(i + ". hello world")
}
}
}
P039【039_尚硅谷_Scala_流程控制(二)_For循环(三)_集合遍历】03:17
package chapter04
import scala.collection.immutable
object Test02_ForLoop {
def main(args: Array[String]): Unit = {
// 2. 集合遍历
for (i <- Array(12, 34, 53)) {
println(i)
}
for (i <- List(12, 34, 53)) {
println(i)
}
for (i <- Set(12, 34, 53)) {
println(i)
}
}
}
P040【040_尚硅谷_Scala_流程控制(二)_For循环(四)_循环守卫】04:41
// 3. 循环守卫
for (i <- 1 to 10) {
if (i != 5) {
println(i)
}
}
for (i <- 1 to 10 if i != 5) {
println(i)
}
P041【041_尚硅谷_Scala_流程控制(二)_For循环(五)_循环步长】14:10
// 4. 循环步长
for (i <- 1 to 10 by 2) {
println(i)
}
println("-------------------")
for (i <- 13 to 30 by 3) {
println(i)
}
println("-------------------")
for (i <- 30 to 13 by -2) {
println(i)
}
for (i <- 10 to 1 by -1) {
println(i)
}
println("-------------------")
for (i <- 1 to 10 reverse) {
println(i)
}
println("-------------------")
//for (i <- 30 to 13 by 0) {
// println(i)
//} // error,step不能为0
for (data <- 1.0 to 10.0 by 0.3) {//0.3精度会出现问题
println(data)
}
P042【042_尚硅谷_Scala_流程控制(二)_For循环(六)_循环嵌套】10:34
// 5. 循环嵌套
for (i <- 1 to 3) {
for (j <- 1 to 3) {
println("i = " + i + ", j = " + j)
}
}
println("-------------------")
for (i <- 1 to 4; j <- 1 to 5) {
println("i = " + i + ", j = " + j)
}
println("======================")
package chapter04
//输出九九乘法表
object Test03_Practice_MulTable {
def main(args: Array[String]): Unit = {
for (i <- 1 to 9) {
for (j <- 1 to i) {
print(s"$j * $i = ${i * j} \t")
}
println()
}
//简写
for (i <- 1 to 9; j <- 1 to i) {
print(s"$j * $i = ${i * j} \t")
if (j == i) println()
}
}
}
P043【043_尚硅谷_Scala_流程控制(二)_For循环(七)_循环引入变量】04:57
// 6. 循环引入变量
for (i <- 1 to 10) {
val j = 10 - i
println("i = " + i + ", j = " + j)
}
for (i <- 1 to 10; j = 10 - i) {
println("i = " + i + ", j = " + j)
}
for {
i <- 1 to 10
j = 10 - i
} {
println("i = " + i + ", j = " + j)
}
P044【044_尚硅谷_Scala_流程控制(二)_For循环(八)_练习_输出九层妖塔】11:03
package chapter04
//打印输出一个九层妖塔
object Test04_Practice_Pyramid {
def main(args: Array[String]): Unit = {
for (i <- 1 to 9) {
val stars = 2 * i - 1
val spaces = 9 - i
println(" " * spaces + "*" * stars)
}
for (i <- 1 to 9; stars = 2 * i - 1; spaces = 9 - i) {
println(" " * spaces + "*" * stars)
}
for (stars <- 1 to 17 by 2; spaces = (17 - stars) / 2) {
println(" " * spaces + "*" * stars)
}
}
}
P045【045_尚硅谷_Scala_流程控制(二)_For循环(九)_for循环返回值】10:20
// 7. 循环返回值
val a = for (i <- 1 to 10) {
i
}
println("a = " + a)//a = (),for循环默认返回值为空
val b: immutable.IndexedSeq[Int] = for (i <- 1 to 10) yield i * i
println("b = " + b)//b = Vector(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)
P046【046_尚硅谷_Scala_流程控制(三)_While循环】06:06
package chapter04
object Test05_WhileLoop {
def main(args: Array[String]): Unit = {
// while
var a: Int = 10
while (a >= 1) {
println("this is a while loop: " + a)
a -= 1
}
var b: Int = 0
do {
println("this is a do-while loop: " + b)
b -= 1
} while (b > 0)
}
}
P047【047_尚硅谷_Scala_流程控制(四)_循环中断】12:04
public class TestBreak {
public static void main(String[] args) {
try {
for (int i = 0; i < 5; i++) {
if (i == 3)
//break;
throw new RuntimeException();
System.out.println(i);
}
} catch (Exception e) {
//什么都不做,只是退出循环
}
System.out.println("这是循环外的代码!");
}
}
package chapter04
import scala.util.control.Breaks
import scala.util.control.Breaks._
object Test06_Break {
def main(args: Array[String]): Unit = {
//1.采用抛出异常的方式,退出循环
try {
for (i <- 0 until 5) {
if (i == 3)
throw new RuntimeException
println(i)
}
} catch {
case e: Exception => //什么都不做,只是退出循环
}
//2.使用Scala中的Breaks类的break方法,实现异常的抛出和捕捉
Breaks.breakable(
for (i <- 0 until 5) {
if (i == 3)
Breaks.break()
println(i)
}
)
breakable(
for (i <- 0 until 5) {
if (i == 3)
break()
println(i)
}
)
println("这是循环外的代码!")
}
}
征途黯然.: The depth of knowledge about 尚硅谷大数据Flink117实战教程笔记04FlinkDataStreamAPI is astonishing. With a deeper understanding, thanks for sharing!
旷世奇才李先生: 尚硅谷大数据Flink1.17实战教程-笔记04【Flink DataStream API】,这篇文章很好,值得一读。
叶子...: 求问 画的括号是怎么看的?
十倍。455: ping请求还是超时
genghongsheng: 提交任务报错org.apache.flink.runtime.client.JobSubmissionException: Failed to submit JobGraph