还有系列的和Scala编程题二
1.编写一个简单程序,要求数组长度为5,分别赋值10,20,30,40,50,在控制台输出该数组的值。
代码:
object ArrayTest {
def main(args: Array[String]): Unit = {
val arr =new Array[Int](5)
for(x <- 1 to 5){
arr(x-1) = x*10
}
val arrayBuffer = arr.toBuffer//定长改成变长
arrayBuffer.foreach(print(_))
}
}
运行结果:
1020304050
2.将一个字符数组的值拷贝到另一个字符数组中.
代码:
object ArrayTest2{
def main(args: Array[String]): Unit = {
val a=Array('a','b','c')
val b:Array[Char]=new Array(3) //表示3个元素的位置
a.copyToArray(b) //直接拷贝a到b数组
println(b.mkString(","))
}
}
运行结果:
a,b,c
3.给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组,先排序,然后输出排序后的数组的值。
代码:
object ArrayTest3{
def main(args: Array[String]): Unit = {
var num = ArrayBuffer(1,6,2,3,9,4,5,7,8)
num= num.sorted
println(num)
}
}
运行结果:
ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)
4.输出一个double型二维数组(长度分别为5、4,值自己设定)的值。
代码:
object ArrayTest4{
def main(args: Array[String]): Unit = {
val arr = Array.ofDim[Double](5, 4)
for(x <- 0 to arr.length-1){
for(y <- 0 to arr(x).length-1){
arr(x)(y) = y
}
}
for(x <- 0 to arr.length-1){
for(y <- 0 to arr(x).length-1){
print(arr(x)(y)+" ")
}
println()
}
}
}
运行结果:
0.0 1.0 2.0 3.0
0.0 1.0 2.0 3.0
0.0 1.0 2.0 3.0
0.0 1.0 2.0 3.0
5.在一个有8个整数(18,25,7,36,13,2,89,63)的数组中找出其中最大的数及其下标。
代码:
object ArrayTest5{
def main(args: Array[String]): Unit = {
val arr = ArrayBuffer(18,25,7,36,13,2,89,63)
println(arr.max)
println(arr.indexOf(arr.max))
}
}
运行结果:
89
6
6.将一个数组中的元素逆序存放
代码:
object ArrayTest6{
def main(args: Array[String]): Unit = {
val arr = ArrayBuffer(18,25,7,36,13,2,89,63)
print(arr.reverse)
}
}
运行结果:
ArrayBuffer(63, 89, 2, 13, 36, 7, 25, 18)
7.将一个数组中的重复元素保留一个其他的清零。
代码:
object ArrayTest7_1{
def main(args: Array[String]): Unit = {
val num = ArrayBuffer(18,25,18,36,13,2,89,63,63)
print(num.distinct)
}
}
运行结果:
ArrayBuffer(18, 25, 36, 13, 2, 89, 63)
8.给定一维数组{ -10,2,3,246,-100,0,5} ,计算出数组中的平均值、最大值、最小值。
代码:
object ArrayTest8{
def main(args: Array[String]): Unit = {
val num = ArrayBuffer(-10,2,3,246,-100,0,5)
println(num.max)
println(num.min)
val num2=num.sum/num.length
println(num2)
}
}
运行结果:
246
-100
20
9.生成10个1至100之间的随机整数(不能重复),存入一个List集合然后进行排序。
代码:
object ListTest {
def main(args: Array[String]): Unit = {
var a = ListBuffer[Int]()
while(a.length<10){
a += Random.nextInt(100)
a=a.distinct.sorted
}
println(a+",")
}
}
运行结果:
ListBuffer(8, 12, 18, 32, 54, 55, 57, 68, 90, 96)
10.定义List集合,添加包含三个连续的"def",删除集合中字符串"def"。
代码:
object ListTest2 {
def main(args: Array[String]): Unit = {
val list = ListBuffer("def","1","fff")
val list2 = ListBuffer.fill(3)("def")
list ++= list2
println(list)
for(x <- list){
if(x.equals("def")){
list -= x
}
}
print(list)
}
}
运行结果:
ListBuffer(def, 1, fff, def, def, def)
ListBuffer(1, fff)
11.定义List集合,存入多个字符串,删除集合中包含0-9数字的字符串(只要字符串中包含0-9中的任意一个数字就需要删除此整个字符串)
代码:
object ListTest3{
def main(args: Array[String]): Unit = {
val list = ListBuffer("a","a0","b","b1","c","9","d","d9")
for(x <- list){
for(y <- 0 to 9){
if(x.contains(y.toString)){
list -=x
}
}
}
print(list)
}
}
运行结果:
ListBuffer(a, b, c, d)
12.创建一个List,在List中增加三个工人,基本信息如下:(工人信息用元组存放)姓名年龄工资 在李四之前插入一个工人,信息为:姓名:赵六,年龄:24,工资3300 删除王五信息 利用for循环遍历,打印List中所有工人的信息
代码:
object ListTest4{
def main(args: Array[String]): Unit = {
val worker = ListBuffer(("张三",18,3000),("李四",25,3500),("王五",22,3200))
worker.insert(worker.indexOf(("李四",25,3500)),("赵六",24,3300))
worker-=(("王五",22,3200))
worker.foreach(print(_))
}
}
运行结果:
(张三,18,3000)(赵六,24,3300)(李四,25,3500)
13.
- 1.创建一个List val list0 = List(1,5,8,9,6,3,10,4,8,8,6,4,2,4,4,6,0)
- 2.将 list0 中每个元素乘以 10 后生成一个新的集合
- 3.将list0 中的偶数取出来生成一个新的集合
- 4.将list0 排序后生成一个新的集合
- 5.反转顺序
- 6.将list0 中的元素 4 个一组
- 7.将 Iterator 转换成List
- 8.将多个list 压扁成一个
代码:
object ListTest1 {
def main(args: Array[String]): Unit = {
val list = ListBuffer(1,5,8,9,6,3,10,4,8,8,6,4,2,4,4,6,0)
val list1 = list.map(_*10)
val list2 = list1.filter(_%2 == 0)
val list3 = list2.sorted
val list4 = list3.reverse
val list5 = list4.grouped(4).toList
val list6 = list5.flatten
print(list6)
}
}
运行结果:
List(100, 90, 80, 80, 80, 60, 60, 60, 50, 40, 40, 40, 40, 30, 20, 10, 0)
14."hell tom hello jerry","hello jerry","hello kitty"先按空格拆分,在压平 。统计单词出现的频次
代码:
object ListTest2 {
def main(args: Array[String]): Unit = {
val list= List("hell tom hello jerry","hello jerry","hello kitty")
val list2 =list.flatMap(_.split(" "))
val result = list2.map((_,1)).groupBy(_._1).mapValues(_.length).toList.sortBy(_._2);
print(result)
}
}
运行结果:
List((kitty,1), (hell,1), (tom,1), (jerry,2), (hello,3))
15.并集,交集,差集
代码:
object ListTest3{
def main(args: Array[String]): Unit = {
val list = List(5,6,4,7)
val list2 = List(1,2,3,4)
println(list.union(list2))//并集
println(list.intersect(list2))//交集
println(list.diff(list2))//差集
println(list2.diff(list))
}
}
运行结果:
List(5, 6, 4, 7, 1, 2, 3, 4)
List(4)
List(5, 6, 7)
List(1, 2, 3)
16.题目如下:
本数据包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
请根据给定的实验数据,在scala中通过编程来计算以下内容:
(1)该系总共有多少学生;
(2)该系共开设了多少门课程;
(3)Tom同学的总成绩平均分是多少;
(4)求每名同学的选修的课程门数;
(5)该系DataBase课程共有多少人选修;
(6)各门课程的平均分是多少;
代码:
object CourseTest{
def main(args: Array[String]): Unit = {
val list= ListBuffer(
("Tom","DataBase",80),
("Tom","Algorithm",50),
("Tom","DataStructure",60),
("Jim","DataBase",90),
("Jim","Algorithm",60),
("Jim","DataStructure",80))
/**1)该系总共有多少学生;*/
val people = scala.collection.mutable.Set[String]()
for(x <- list){
people += x._1
}
println(people.size)
/**(2)该系共开设了多少门课程;*/
val course = scala.collection.mutable.Set[String]()
for(x <- list){
course += x._2
}
println(course.size)
/**(3)Tom同学的总成绩平均分是多少;*/
var sum =0
var count = 0
val course2 = scala.collection.mutable.Set[String]()
for(x <- list){
if(x._1.equals("Tom")){
sum += x._3
count += 1
}
}
println(sum/count)
/**(4)求每名同学的选修的课程门数;*/
var map = scala.collection.mutable.Map[String,Int]()
for(x<- list){
var name=x._1
if(map.contains(name)){
map(name) += 1
}else{
map += (name ->1)
}
}
println(map)
/**(5)该系DataBase课程共有多少人选修;*/
var count2 =0
for(x<- list){
if(x._2.equals("DataBase")){
count2 += 1
}
}
println(count2)
/**(6)各门课程的平均分是多少;*/
var avg =list.groupBy(_._2)
for(a<-avg){
var sum =0
var size=0
for(b<-a._2){
sum+=b._3
size+=1
}
println(s"${a._1}的平均分是${sum/size}")
}
}
}
运行结果:
2
3
63
HashMap(Tom -> 3, Jim -> 3)
2
DataStructure的平均分是70
DataBase的平均分是85
Algorithm的平均分是55
17..题目如下:
定义一个ListBuffer(("张三",'男',18),("李四",'女',20),("王五",'女',21),("赵六",'男',22),("田七",'女',17),("王伟",'男',20)) 1、把每个人的年龄改成之前的3倍 2、把每个人的年龄改成之前的2倍,之后再这个基础上进行减一 3、年龄小于20的过滤掉 4、性别是女的过滤掉 5、计算一下所有人的总年龄 6、请按照年龄从小到大排序 7、请按照年龄从大到小排序 8、把每个人的姓名性别年龄合成一个输出 9、把年龄为奇数和偶数的人分开
代码:
package mx2.Demo.work
import scala.collection.mutable.ListBuffer
object Test5 {
def main(args: Array[String]): Unit = {
var list = ListBuffer(("张三",'男',18),("李四",'女',20),("王五",'女',21),("赵六",'男',22),("田七",'女',17),("王伟",'男',20))
//1、把每个人的年龄改成之前的3倍
var list1 = list.map(a =>ListBuffer(a._1,a._2,a._3*3))
println(list1)
//2、把每个人的年龄改成之前的2倍,之后再这个基础上进行减一
var list2 = list.map(a => ListBuffer(a._1,a._2,a._3*3-1))
println(list2)
//3、年龄小于20的过滤掉
var list3 = list.filter(a => if(a._3 <20)false else true)
println(list3)
//4、性别是女的过滤掉
var list4 = list.filter(a => if(a._2 =='女')false else true)
println(list4)
//5、计算一下所有人的总年龄
var list5 = list.map(a => a._3).reduce((a,b)=>a+b)
println(list5)
//6、请按照年龄从小到大排序
list.sortBy(a => a._3).foreach(println)
//7、请按照年龄从大到小排序
list.sortBy(a => -a._3).foreach(println)
//8、把每个人的姓名性别年龄合成一个输出
var list8 = list.map(a => a._1 + a._2 + a._3)
println(list8)
//9、把年龄为奇数和偶数的人分开
var list9 = list.partition({a =>a._3 % 2 == 0})
println(list9)
}
}
运行结果:
ListBuffer(ListBuffer(张三, 男, 54), ListBuffer(李四, 女, 60), ListBuffer(王五, 女, 63), ListBuffer(赵六, 男, 66), ListBuffer(田七, 女, 51), ListBuffer(王伟, 男, 60))
ListBuffer(ListBuffer(张三, 男, 53), ListBuffer(李四, 女, 59), ListBuffer(王五, 女, 62), ListBuffer(赵六, 男, 65), ListBuffer(田七, 女, 50), ListBuffer(王伟, 男, 59))
ListBuffer((李四,女,20), (王五,女,21), (赵六,男,22), (王伟,男,20))
ListBuffer((张三,男,18), (赵六,男,22), (王伟,男,20))
118
(田七,女,17)
(张三,男,18)
(李四,女,20)
(王伟,男,20)
(王五,女,21)
(赵六,男,22)
(赵六,男,22)
(王五,女,21)
(李四,女,20)
(王伟,男,20)
(张三,男,18)
(田七,女,17)
ListBuffer(张三男18, 李四女20, 王五女21, 赵六男22, 田七女17, 王伟男20)
(ListBuffer((张三,男,18), (李四,女,20), (赵六,男,22), (王伟,男,20)),ListBuffer((王五,女,21), (田七,女,17)))