当前位置:   article > 正文

Scala编程基础1:基本数据类型、变量、if、for、IO

Scala编程基础1:基本数据类型、变量、if、for、IO

注意:Scala系列的文章需要一定的java基础

Scala底层是用java语言编写的,scala是运行在Java虚拟机(JVM)上的编程语言,它兼容Java,可以直接调用Java的库和框架,并与Java代码无缝集成和互操作。

如果java没有基础的,可以看看在下java专栏的文章^_^,链接如下:

http://t.csdnimg.cn/FkJlt

一、HelloWorld

  1. /**
  2. * def:定义函数或者方法的关键字
  3. * main:函数名 main函数是被jvm(java虚拟机)所特有识别的程序入口
  4. * args:参数名
  5. * Array[String]:参数的数据类型
  6. * Unit:返回值类型 相当于java中的void
  7. *
  8. * scala:def main(args: Array[String]): Unit = {}
  9. * 等价于
  10. * java:public static void main(String[] args)
  11. */
  12. object HelloWorld {
  13. def main(args: Array[String]): Unit = {
  14. //在scalaz中也可以使用Java语法输出hello world
  15. System.out.println("hello world")
  16. //使用scala自己的语法输出hello world
  17. println("hello world")
  18. }
  19. }

 注意:

1、scala代码中可以使用Java的类和方法
 2、scala代码中一行语句的结束不需要加分号
 3、class是一个普通的类,不能直接编译运行,object相当于一个单例对象,object类中的方法相当于加上一个static关键字,意味着object类中的方法可以直接调用

参数理解:

def:定义函数或者方法的关键字
main:函数名 main函数是被jvm(java虚拟机)所特有识别的程序入口
args:参数名
Array[String]:参数的数据类型
Unit:返回值类型 相当于java中的void

二、Scala中基本数据类型:

三、Scala中变量的使用

在scala中,可以使用val或者var来定义变量
定义一个变量: var
定义一个常量: val  常量值无法被改变
定义一个变量或常量的标准语法:var/val 变量名:数据类型 = 值
scala提供一种自动数据类型推断机制,数据类型可以省略不写

  1. /**
  2. * scala与java中基本数据类型:
  3. * scala: java:
  4. * Byte byte
  5. * Short short
  6. * Int int
  7. * Long long
  8. * Float float
  9. * Double double
  10. * Boolean boolean
  11. * Char char
  12. */
  13. object DataTypes {
  14. def main(args: Array[String]): Unit = {
  15. /**
  16. * 定义一个变量: var
  17. * 定义一个常量: val 常量值无法被改变
  18. * 定义一个变量或常量的标准语法:var/val 变量名:数据类型 = 值
  19. * scala提供一种自动数据类型推断机制,数据类型可以省略不写
  20. */
  21. var a1: Int = 19
  22. a1 = 29
  23. println(a1)
  24. //获取数据类型
  25. println(a1.getClass) //int
  26. val a2: Double = 19.03
  27. //a2 = 29 报错原因:常量值无法被改变
  28. println(a2.getClass)
  29. /**
  30. * 字符串:String
  31. * 1.scala中的String与java中的String指的是同一个,java中String类的方法在scala中都可以使用
  32. * 2、scala和java是互相兼容的
  33. * */
  34. //字符串切分:
  35. val c2: String = "wo,xiang,qu,kan,xu,song,de,yan,chang,hui"
  36. val strings: Array[String] = c2.split(",")
  37. println(strings(0)) //wo 注意scala中使用索引取值用(),java中使用的是[],但它们的索引都是从0开始
  38. println(strings(4), strings(5)) //(xu,song)
  39. //字符串拼接:
  40. //方式1:使用+拼接
  41. val c3: String = strings(0) + "*" + strings(1) + "*" + strings(2)
  42. println(c3)
  43. //方式2:使用StringBuffer或StringBuilder加append方法
  44. val c4: StringBuffer = new StringBuffer()
  45. c4.append(strings(0))
  46. .append("*")
  47. .append(strings(1))
  48. .append("*")
  49. .append(strings(2))
  50. println(c4)
  51. //方式3:利用scala中的mkString方法
  52. val c5: String = strings.mkString("*") //底层还是使用StringBuilder拼接字符串
  53. println(c5) //wo*xiang*qu*kan*xu*song*de*yan*chang*hui
  54. //方式4:插值表达式
  55. /**
  56. * scala中, 可以使用插值表达式来定义字符串, 有效避免大量字符串的拼接
  57. * 格式:val/var 变量名[:String] = s"${变量/表达式}字符串"(s可以换成f,效果相同)
  58. */
  59. val c6 = s"${strings(0)}*${strings(1)}*${strings(2)}" //wo*xiang*qu 底层还是使用StringBuilder拼接字符串
  60. println(c6)
  61. }
  62. }

四、if...else和for循环

  1. import java.util.Scanner
  2. /**
  3. * 流程控制:顺序结构 选择结构 循环结构
  4. */
  5. object FlowControl {
  6. def main(args: Array[String]): Unit = {
  7. //选择结构之if...else
  8. val sc: Scanner = new Scanner(System.in)
  9. println("请输入你的考试成绩:")
  10. val score: Int = sc.nextInt()
  11. if (score < 60) { //引用变量、方法等不需要再后面加数据类型
  12. println("真遗憾你挂科了!哭")
  13. } else {
  14. println("恭喜你没有挂科!笑")
  15. }
  16. /**
  17. * 注意:
  18. * 1、scala语法中没有++或--
  19. * 2、scala中for循环的格式与java有很大的区别
  20. * 3、scala中泛型使用的是[],java中使用的是<>
  21. */
  22. //创建一个数组
  23. val arr1: Array[String] = Array("java", "scala", "spark", "flink")
  24. //使用for循环遍历数组
  25. for (e <- arr1) {
  26. println(e)
  27. }
  28. //使用while循环
  29. var i: Int = 0
  30. while (i < arr1.length) {
  31. println(arr1(i))
  32. i += 1
  33. }
  34. //scala的for循环中to与unitl的区别
  35. //to:[]左闭右闭
  36. for (e <- 1 to 10) {
  37. println("hello world") //10个
  38. }
  39. println("*"*50)
  40. //until:[)左闭右开
  41. for (e <- 1 until 10) {
  42. println("hello world") //9个
  43. }
  44. }
  45. }

五、if与for

1、if

  1. /**
  2. * 在scala中,跟Java不同,条件表达式(if)是有返回值的,所以可以将它赋值给变量
  3. */
  4. val sc: Scanner = new Scanner(System.in)
  5. println("请输入你的考试成绩:")
  6. val score: Int = sc.nextInt()
  7. if (score < 60) { //引用变量、方法等不需要在后面加数据类型
  8. println("真遗憾你挂科了!哭")
  9. score
  10. } else {
  11. println("恭喜你没有挂科!笑")
  12. }
  13. println("你的成绩是:"+score)

注意:在scala中,跟java不同,条件表达式(if)可以有返回值

2、for

  1. /**
  2. * 注意:
  3. * 1、scala语法中没有++或--
  4. * 2、scala中for循环的格式与java有很大的区别
  5. * 3、scala中泛型使用的是[],java中使用的是<>
  6. */
  7. //创建一个数组
  8. val arr1: Array[String] = Array("java", "scala", "spark", "flink")
  9. //使用for循环遍历数组
  10. for (e <- arr1) {
  11. // println(e)
  12. }
  13. //使用while循环
  14. var i: Int = 0
  15. while (i < arr1.length) {
  16. // println(arr1(i))
  17. i += 1
  18. }
  19. //scala的for循环中to与unitl的区别
  20. //to:[]左闭右闭
  21. for (e <- 1 to 10) {
  22. // println("hello world") //10个
  23. }
  24. println("*" * 50)
  25. //until:[)左闭右开
  26. for (e <- 1 until 10) {
  27. // println("hello world") //9个
  28. }

六、IO

java读写文件和scala读文件的方式(scala没有写数据的方式)

  1. import java.io.{BufferedReader, BufferedWriter, FileReader, FileWriter}
  2. import scala.io.{BufferedSource, Source}
  3. /**
  4. * 读取文件:
  5. * 1、java方式
  6. * 2、scala方式
  7. */
  8. object IO {
  9. def main(args: Array[String]): Unit = {
  10. //1、java方式读取,写入数据
  11. //字符缓冲流读取文件
  12. val br = new BufferedReader(new FileReader("D:\\projects\\IdeaProjects\\bigdata29-maven\\scala\\src\\main\\scala\\com\\shujia\\day01\\data\\she_hui_zhu_yi"))
  13. //字符缓冲流写入新文件(默认是覆盖)
  14. val bw = new BufferedWriter(new FileWriter("D:\\projects\\IdeaProjects\\bigdata29-maven\\scala\\src\\main\\scala\\com\\shujia\\day01\\data\\she_hui_zhu_yi_new"))
  15. var line: String = br.readLine()
  16. while (line != null) {
  17. bw.write(line)
  18. bw.newLine() //写一个换行符
  19. line = br.readLine()
  20. bw.flush()
  21. }
  22. //释放资源
  23. bw.close()
  24. br.close()
  25. //2、scala方式读取数据,scala没有写数据的方式
  26. val reder: BufferedSource = Source.fromFile("D:\\projects\\IdeaProjects\\bigdata29-maven\\scala\\src\\main\\scala\\com\\shujia\\day01\\data\\she_hui_zhu_yi_new")
  27. val lines: Iterator[String] = reder.getLines() //获取该文件的所有数据
  28. for(e<-lines){
  29. println(e)
  30. }
  31. }
  32. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/606328
推荐阅读
相关标签
  

闽ICP备14008679号