Scala---数据基础

news2024/11/26 1:55:37

一、数据类型

二、变量和常量的声明

  • 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10
  • 常量不可再赋值
1./**
2.  * 定义变量和常量
3.  * 变量 :用 var 定义 ,可修改 
4.  * 常量 :用 val 定义,不可修改
5.  */
6.  var name = "zhangsan"
7.  println(name)
8.  name ="lisi"
9.  println(name)
10.  val gender = "m"
11.  // gender = "m"//错误,不能给常量再赋值

三、类和对象

  • 创建类
1.class Person{
2.  val name = "zhangsan"
3.  val age = 18
4.  def sayName() = {
5.    "my name is "+ name
6.  }
7.}
  • 创建对象
1.	object Lesson_Class {
2.  def main(args: Array[String]): Unit = {
3.    val person = new Person()
4.    println(person.age);
5.    println(person.sayName())
6.  }
7.}

  • 对象中的apply方法

object中不可以传参,当创建一个object时,如果传入参数,那么会自动寻找object中的相应参数个数的apply方法。

1./**
2.* Object 相当于单例对象,不能传参
3.* 如果在创建Object时传入参数,那么运行代码时会自动寻找Object中相应参数个数的apply方法
4.*/
5.object LessonObj {
6.  def apply(name:String) = {
7.    println(s"name is $name")
8.  }
9.  def apply(name:String,age:Int) = {
10.    println(s"name is $name,age is $age")
11.  }
12.  def main(args: Array[String]): Unit = {
13.     LessonObj("zhangsan")
14.     LessonObj("zhangsan",18)
15.  }
16.}
  • 伴生类和伴生对象
1.class Person(xname :String , xage :Int){
2.  var name = Person.name
3.  val age = xage
4.  var gender = "m"
5.  def this(name:String,age:Int,g:String){
6.    this(name,age)
7.    gender = g
8.  }
9.
10.  def sayName() = {
11.     "my name is "+ name
12.  }
13.
14.}
15.
16.object Person {
17.  val name = "zhangsanfeng"
18.
19.  def main(args: Array[String]): Unit = {
20.    val person = new Person("wagnwu",10,"f")
21.    println(person.age);
22.    println(person.sayName())
23.    println(person.gender)
24.  }
25.}

注意点:

  1. 建议类名首字母大写 ,方法首字母小写,类和方法命名建议符合驼峰命名法。
  2. scala 中的object是单例对象,相当于java中的工具类,可以看成是定义静态的方法的类。object不可以传参数。另:Trait不可以传参数
  3. scala中的class类默认可以传参数,默认的传参数就是默认的构造函数。

重写构造函数的时候,必须要调用默认的构造函数。

  1. class 类属性自带getter ,setter方法。
  2. 使用object时,不用new,使用class时要new ,并且new的时候,class中除了方法不执行,其他都执行。
  3. 如果在同一个文件中,object对象和class类的名称相同,则这个对象就是这个类的伴生对象,这个类就是这个对象的伴生类。可以互相访问私有变量。

四、if else

1./**
2.* if else 
3.*/
4.val age =18 
5.if (age < 18 ){
6.println("no allow")
7.}else if (18<=age&&age<=20){
8.println("allow with other")
9.}else{
10.println("allow self")
11.}

五、for ,while,do…while

1、to和until 的用法(不带步长,带步长区别)

1./**
2.* to和until
3.* 例:
4.* 1 to 10 返回1到10的Range数组,包含10
5.* 1 until 10 返回1到10 Range数组 ,不包含10
6.*/
7.
8.println(1 to 10 )//打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
9.println(1.to(10))//与上面等价,打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
10.
11.println(1 to (10 ,2))//步长为2,从1开始打印 ,1,3,5,7,9
12.println(1.to(10, 2)) 
13.
14.println(1 until 10 ) //不包含最后一个数,打印 1,2,3,4,5,6,7,8,9
15.println(1.until(10))//与上面等价
16.
17.println(1 until (10 ,3 ))//步长为2,从1开始打印,打印1,4,7

创建for循环

1./**
2.* for 循环
3.* 
4.*/
5.for( i <- 1 to 10 ){
6. println(i)
7.}

  1. 创建多层for循环

1.//可以分号隔开,写入多个list赋值的变量,构成多层for循环
2.//scala中 不能写count++ count-- 只能写count+
3.var count = 0;
4.for(i <- 1 to 10; j <- 1 until 10){
5.  println("i="+ i +", j="+j)
6.  count += 1
7.}
8.println(count);
9.
10.//例子: 打印小九九
11.for(i <- 1 until 10 ;j <- 1 until 10){
12.  if(i>=j){
13.    print(i +" * " + j + " = "+ i*j+" ")
14.  }
15.  if(i==j ){
16.    println()
17.  }
18.
19.}
  1. for循环中可以加条件判断,可以使用分号隔开,也可以不使用分号

1.//可以在for循环中加入条件判断
2.for(i<- 1 to 10 ;if (i%2) == 0 ;if (i == 4) ){
3.  println(i)
4.}
  1. scala中不能使用count++,count—只能使用count = count+1 ,count += 1

  2. for循环用yield 关键字返回一个集合

  3. while循环,while(){},do {}while()

1.//将for中的符合条件的元素通过yield关键字返回成一个集合
2.val list = for(i <- 1 to 10 ; if(i > 5 )) yield i 
3.for( w <- list ){
4.  println(w)
5.}
6.
7./**
8.* while 循环
9.*/
10.var index = 0 
11.while(index < 100 ){
12.  println("第"+index+"次while 循环")
13.  index += 1 
14.}
15.index = 0 
16.do{
17.  index +=1 
18.  println("第"+index+"次do while 循环")
19.}while(index <100 )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1206431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文简单聊聊protobuf

目录 基本介绍 原理 同类对比 为什么要使用protobuf? 基本介绍 protobuf的全称是Protocol Buffer&#xff0c;是Google提供的一种数据序列化协议。Protocol Buffers 是一种轻便高效的结构化数据存储格式&#xff0c;可以用于结构化数据序列化&#xff0c;很适合做数据存储…

linux系统下文件操作常用的命令

一、是什么 Linux 是一个开源的操作系统&#xff08;OS&#xff09;&#xff0c;是一系列Linux内核基础上开发的操作系统的总称&#xff08;常见的有Ubuntu、centos&#xff09; 系统通常会包含以下4个主要部分 内核shell文件系统应用程序 文件系统是一个目录树的结构&…

出行平台采集机票价格信息

在上述Python代码中&#xff0c;首先引入了所需的模块&#xff0c;然后设置了代理信息和模拟浏览器访问的网页请求头。随后&#xff0c;使用requests库发送代理请求&#xff0c;并将返回的网页内容解析为HTML。接着&#xff0c;从HTML中提取所需的信息&#xff0c;比如机票价格…

实用篇-ES环境搭建

ES(elasticsearch) 是一个开源的分布式搜索引擎&#xff0c;可以用来实现搜索、日志统计、分析、系统监控等功能 elastic stack 是elasticsearch为核心的技术栈&#xff0c;包括beats、logstash(用作数据收集)、kibana(负责图形展示)、elasticsearch(负责数据搜索&#xff0c;…

mysq,数据库的综合查询

记录一下数据库综合查询&#xff0c;复习加深印象 创建教学数据库中包含四个基本表&#xff1a; 教师情况表Teacher&#xff08;Tno 教师号&#xff0c;TName 教师名&#xff0c;TDept 教师所在的院系&#xff09;&#xff1b;课程基本表Course&#xff08;Cno 课号&#xff…

Network(一)计算机网络介绍

一 计算机网络 1 概述 什么是计算机网络&#xff1f; 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统&#xff0c;应用软件&#xff0c;应用程序通过通信线路互连 实现资源共享、信息传递、增加可靠性、提高系统处理能力 2 网络与云计算 3 计算机网…

AI创作系统ChatGPT源码+AI绘画系统+支持OpenAI DALL-E3文生图,可直接对话文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。新增支…

UWB应用于金属工具管理

超宽带&#xff08;Ultra-Wideband&#xff0c;UWB&#xff09;技术在金属工具管理方面有许多应用案例&#xff0c;它可以帮助提高工具管理的效率、安全性和精确度。以下是一些UWB在金属工具管理中的应用案例&#xff1a; 工具定位和跟踪&#xff1a;UWB技术可以用于实时定位和…

网络运维Day15

文章目录 Prometheus简介环境准备配置模板机环境部署阿里镜像源实验环境准备 部署prometheus服务查看及测试 Promethues 被监控端Grafana简介部署 Grafana 服务器修改数据源 监控数据库安装部署Mariadb安装导出器修改 Prometheus服务端配置Grafana配置 总结 Prometheus简介 Pr…

MobileSAM论文笔记

摘要 自Meta研究团队发布SAM&#xff08;Segment Anything Model&#xff09;项目依赖&#xff0c;因其令人惊艳的零样本迁移特性和与其他视觉应用兼容的高通用性&#xff0c;引起了极大的关注。由于大多数类似的应用都需要运行在资源限制的边缘设备&#xff0c;如手机&#x…

苹果独占鳌头,国产手机围攻,双十一“照妖镜”显露谁有真实力

随着双十一购物节的结束&#xff0c;电商平台也给出了各手机品牌的销量数据&#xff0c;苹果毫无疑问成为双十一的赢家&#xff0c;不过两家国产手机品牌也显露了他们的实力&#xff0c;已具有与苹果一战之力。 与去年双十一和今年618类似&#xff0c;苹果仍然占据热销榜前列&a…

YOLOv8-Seg改进:SPPF系列改进篇 | 大核分离卷积注意力模块( Large Separable Kernel Attention)

🚀🚀🚀本文改进:大核分离卷积注意力模块( Large Separable Kernel Attention),实现涨点的目标并且降低计算复杂度和显存,引入到YOLOv8,与SPPF结合实现二次创新; 🚀🚀🚀Large Separable Kernel Attention 亲测在多个数据集能够实现涨点,同样适用于小目标分…

自己动手重装电脑Win10系统方法教程

如果我们自己电脑系统出现问题了&#xff0c;无法通过简单的操作解决&#xff0c;这时候最佳的解决方法&#xff0c;就是给电脑重装安装操作系统。有用户想给电脑重装Win10系统&#xff0c;但不清楚具体的重装步骤方法&#xff0c;下面小编就给大家详细介绍自己手动重新安装Win…

win下oracle安装与navicat远程连接配置

oracle安装 navicat远程连接配置 1、打开navicat&#xff0c;工具>选项>环境 2、配置 找到oracle安装目录 3、连接

7.jvm对象内存布局

目录 概述对象里的三个区对象头验证代码控制台输出分析 验证2代码控制台输出 实例数据对其填充 访问对象结束 概述 jvm对象内存布局详解。 相关文章在此总结如下&#xff1a; 文章地址jvm基本知识地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址运行时数…

【C/PTA——8.数组2(课外实践)】

C/PTA——8.数组2&#xff08;课外实践&#xff09; 7-4 矩阵运算7-2 方阵循环右移7-3 螺旋方阵7-4 数组-杨辉三角7-5 数组-对角线求和7-6 数组-矩阵最小值 7-4 矩阵运算 #include<stdio.h> int main() {int n, i, j;int a[10][10] { 0 };scanf("%d", &n)…

CodeEase标准化的低代码平台

目录 一、引言二、网站简介三、网站特色四、为什么推荐这个网站&#xff1f;五、总结 一、引言 随着互联网的快速发展&#xff0c;我们每天都会浏览各种各样的网站。今天&#xff0c;我想向大家推荐一个独特而出色的网站——CodeEase&#xff0c;这是一个致力于为用户提供便捷…

LLM App ≈ 数据ETL管线

虽然现有的 LLM 应用程序工具&#xff08;例如 LangChain 和 LlamaIndex&#xff09;对于构建 LLM 应用程序非常有用&#xff0c;但在初始实验之外不建议使用它们的数据加载功能。 当我构建和测试我的LLM应用程序管道时&#xff0c;我能够感受到一些尚未开发和破解的方面的痛苦…

TrOCR模型微调【基于transformer的光学字符识别】

TrOCR&#xff08;基于 Transformer 的光学字符识别&#xff09;模型是性能最佳的 OCR 模型之一。 在我们之前的文章中&#xff0c;我们分析了它们在单行打印和手写文本上的表现。 然而&#xff0c;与任何其他深度学习模型一样&#xff0c;它们也有其局限性。 TrOCR 在处理开箱…

任正非说:要提高合同质量,使我们从广种薄收转向有效益的扩张。

你好&#xff01;这是华研荟【任正非说】系列的第38篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 华研荟注&#xff1a;前两天为大家分享了任正非先生讲话中关于IPD、ISC、LTC流程的一些内容。今天来看看任正非对于合同的要求…