Scala作业(3):类/包和引入

news/2024/11/7 10:46:50/

1、编写一个Time类,加入只读属性hours和minutes,和一个检查某一时刻是否早于另一时刻的方法before(other:Time):Boolean。Time对象应该以new Time(hrs,min)方式构建。

以下是一个示例的 Time 类的实现,包括只读属性 hoursminutes,以及用于比较时间的方法 before

class Time(val hours: Int, val minutes: Int) {def before(other: Time): Boolean = {if (hours < other.hours) {true} else if (hours == other.hours && minutes < other.minutes) {true} else {false}}override def toString: String = f"$hours%02d:$minutes%02d"
}// 测试
val t1 = new Time(9, 30)
val t2 = new Time(10, 15)println(t1)  // 输出: 09:30
println(t2)  // 输出: 10:15println(t1.before(t2))  // 输出: true
println(t2.before(t1))  // 输出: false

在上面的代码中,我们定义了一个名为 Time 的类,它具有只读属性 hoursminutes,它们分别用于存储小时和分钟。我们还实现了一个 before 方法,它接受另一个 Time 对象作为参数,并返回一个布尔值,指示当前时间是否早于给定的时间。

before 方法中,我们首先比较小时部分 hours,如果当前时间的小时部分小于给定时间的小时部分,则返回 true。如果小时部分相等,则比较分钟部分 minutes,如果当前时间的分钟部分小于给定时间的分钟部分,则返回 true。否则,返回 false

我们还重写了 toString 方法,用于以字符串形式表示时间对象。

最后,我们进行了一些测试,创建了两个 Time 对象 t1t2,并打印了它们的字符串表示形式,以及调用了 before 方法进行比较。

运行上述代码将输出以下结果:

09:30
10:15
true
false

这样,你就成功地编写了一个包含只读属性和比较方法的 Time 类。

2、创建一个Student类,加入可读写的JavaBeans属性name(类型为String)和id(类型为Long)。有哪些方法被生产?(用javap查看。)你可以在Scala中调用JavaBeans的getter和setter方法吗?

在 Scala 中,我们可以创建一个 Student 类,具有可读写的 JavaBeans 属性 nameid。编译后,可以使用 javap 命令查看生成的字节码文件,以了解生成的方法。

以下是示例的 Student 类的实现:

class Student {private var _name: String = ""private var _id: Long = 0Ldef getName: String = _namedef setName(name: String): Unit = _name = namedef getId: Long = _iddef setId(id: Long): Unit = _id = id
}

编译 Student 类后,可以使用 javap 命令查看生成的字节码文件。打开终端并执行以下命令:

javap -private Student

这将显示生成的方法列表,其中包括 getter 和 setter 方法。例如,对于 name 属性,生成的方法包括 getNamesetName。对于 id 属性,生成的方法包括 getIdsetId

在 Scala 中,我们可以直接调用 JavaBeans 的 getter 和 setter 方法。例如:

val student = new Student()
student.setName("John")
println(student.getName)  // 输出: Johnstudent.setId(12345)
println(student.getId)  // 输出: 12345

在上面的示例中,我们创建了一个 Student 对象 student,并使用 setName 方法设置 name 属性的值为 “John”。然后,我们使用 getName 方法获取 name 属性的值并打印出来。类似地,我们使用 setId 方法设置 id 属性的值为 12345,并使用 getId 方法获取 id 属性的值并打印出来。

因此,我们可以在 Scala 中调用 JavaBeans 的 getter 和 setter 方法来访问可读写的属性。

包和引入

1、练习使用包的各种声明方式,并查看他们的不同

在 Scala 中,我们可以使用不同的方式声明和引用包。以下是几种常见的包声明和引用方式以及它们的区别:

  1. 使用简单的包名引用:
import mypackage.MyClass

这种方式只引用了指定包中的一个类,可以直接使用该类名进行访问。

  1. 使用包名引用所有成员:
import mypackage._

这种方式引用了指定包中的所有成员,包括类、对象、方法等。可以直接使用成员的名称进行访问。

  1. 使用特定成员引用:
import mypackage.{MyClass, myFunction}

这种方式只引用了指定包中的特定成员,可以通过它们的名称直接访问。

  1. 使用重命名引用:
import mypackage.{MyClass => RenamedClass}

这种方式引用了指定包中的一个类,并将其重命名为 RenamedClass。可以使用新的名称进行访问。

这些方式的区别在于引用的范围和可见性。简单的包名引用只引用一个特定的类,其他成员需要使用完整的包名进行访问。引用所有成员可以方便地访问包中的所有成员,但可能会导入不需要的成员。使用特定成员引用可以只引用需要的成员,减少了不必要的导入。重命名引用可以将成员重命名为其他名称,以便更方便地使用。

需要注意的是,不同的引用方式可能会导致名称冲突或歧义,因此需要谨慎使用。

请根据你的实际需要选择适合的包引用方式,并根据实际情况查看它们的不同效果。

2、编写一段程序,将Java哈希映射中的所有元素拷贝到Scala哈希映射。用引入语句重命名这两个类。

在 Scala 中,可以使用引入语句重命名类来简化类的使用。下面是一个示例程序,将 Java 哈希映射中的所有元素拷贝到 Scala 哈希映射,并使用引入语句重命名这两个类:

import java.util.{HashMap => JavaHashMap}
import scala.collection.mutable.{HashMap => ScalaHashMap}object HashMapCopyExample {def main(args: Array[String]): Unit = {// 创建一个 Java 哈希映射并添加元素val javaMap = new JavaHashMap[Int, String]()javaMap.put(1, "One")javaMap.put(2, "Two")javaMap.put(3, "Three")// 创建一个 Scala 哈希映射val scalaMap = new ScalaHashMap[Int, String]()// 将 Java 哈希映射的元素拷贝到 Scala 哈希映射val iterator = javaMap.entrySet().iterator()while (iterator.hasNext) {val entry = iterator.next()scalaMap.put(entry.getKey, entry.getValue)}// 打印 Scala 哈希映射中的元素scalaMap.foreach { case (key, value) =>println(s"Key: $key, Value: $value")}}
}

在上面的示例中,我们使用 import 语句重命名了 java.util.HashMapJavaHashMap,以及 scala.collection.mutable.HashMapScalaHashMap。这样就可以使用简化的名称来引用这两个类。

我们创建了一个 Java 哈希映射 javaMap 并向其中添加一些元素。然后,我们创建了一个空的 Scala 哈希映射 scalaMap。接下来,我们通过迭代 Java 哈希映射的条目,并将每个条目的键值对拷贝到 Scala 哈希映射中。

最后,我们遍历 Scala 哈希映射,并打印出其中的元素。

运行上述代码将输出以下结果:

Key: 1, Value: One
Key: 2, Value: Two
Key: 3, Value: Three

这样,我们成功地将 Java 哈希映射中的元素拷贝到了 Scala 哈希映射,并使用了引入语句重命名这两个类,使代码更加简洁。


http://www.ppmy.cn/news/732013.html

相关文章

【linux】chmod 755 ,750,777的区别

chmod是Linux下设置文件夹权限的命令&#xff0c;后面一般跟三个数字&#xff0c;代表不同用户群体在该文件夹上的权限设置。具体解释如下&#xff1a; 第一个数字表示文件所有者的权限。 第二个数字表示与文件所有者同属一个用户组的其他用户在该文件夹上的权限。 第三个数字…

格力电器闹“乌龙”:董明珠持股由“冻结”改为“质押”

雷递网 乐天 5月6日 格力电器日前更正2023年第一季财报信息&#xff0c;修改了之前的一个大“乌龙”。 之前格力电器财报显示&#xff0c;董事长兼总裁董明珠所持格力电器1150万股被冻结。此次更新后&#xff0c;格力电器称&#xff0c;经核查&#xff0c;因个别信息存在录入错…

董明珠直播带货过百亿,难掩格力连续两个季度净利大跌的颓势

格力电器董事长董明珠可谓企业家中最为特立独行的&#xff0c;随着直播带货的兴起&#xff0c;她又迅速进入了这个行业&#xff0c;直播带货销售金额不断创下新高&#xff0c;近期618直播带货更冲破百亿&#xff0c;在直播行业恐怕再也没人能超越她了&#xff0c;然而火热的现象…

C#核心知识回顾——7.递归、冒泡排序、选择排序

1.递归 private void Start(){Fun(0);}/// <summary>/// 递归函数&#xff0c;自己调用自己/// </summary>void Fun(int a){//4.结束条件if (a > 10){return;}//2.完成要求&#xff0c;打印Debug.Log(a);//3.完成递归变化&#xff0c;作为判断条件a;//1.构造递…

GDP开源软件汇总

https://github.com/EwingYangs/awesome-open-gpt

台式电脑重置网络

确保有网络的情况下&#xff0c;电脑网络有红叉 说明&#xff1a; 本人是台式电脑&#xff0c;出现网络连接不上&#xff0c;在确保是自动获取IP地址和更新驱动也没用的情况下&#xff0c;用网上的方法&#xff0c;重置网络&#xff0c;就可以连接了1.开始→运行→输入:CMD&a…

电脑重置系统后,鼠标右键点击桌面一直转圈,任务栏又可以点击……

目录 1&#xff0c;问题 2&#xff0c;原因 3&#xff0c;解决方法 4&#xff0c;心得体会 1&#xff0c;问题 不知道神马情况&#xff0c;昨天晚上关闭电脑时进行了“更新后关机”&#xff0c;然后今天早上起来&#xff0c;当再次打开电脑的时候&#xff0c;就很懵逼的出…

计算机电脑重置,如果Lenovo计算机无法重置计算机该怎么办

尝试以下方法和步骤来解决: 1. 下载所需的工具和要安装的Windows正式版的映像文件&#xff1b; 2. 打开下载的Onekey鬼映像安装程序&#xff1b; 3. 打开软件后&#xff0c;在Onekey中选择还原分区&#xff0c;然后选择刚刚下载到GHO WIM ISO映像路径中的Windows官方系统映像&a…