一段练习的代码

Posted rabbit624

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一段练习的代码相关的知识,希望对你有一定的参考价值。

原本的例子是一个不算复杂的功能:删除数组中第一个负数之后的所有负数。

比如:

val a = scala.collection.mutable.ArrayBuffer[Int]()
a += (23,44,67,55,39,7,-5,-17,-33,66,77,88,-12,-15,99,-46,-57,-70,90,-11,-26,-49,-55)
想要得到结果:
a = (23,44,67,55,39,7,-5,66,77,88,99,90)

这个功能用一段比较简洁的代码就可以实现了。但是我非要自己给自己找别扭,想实现这样的结果:
a = (23, 44, 67, 55, 39, 7, -5, 66, 77, 88, -12, 99, -46, 90, -11)
于是就出现了下面这样一坨代码:
import scala.util.control.Breaks

object TrimArray3 {
def main(args: Array[String]): Unit = {
val a = scala.collection.mutable.ArrayBuffer[Int]()
a += (23,44,67,55,39,7,-5,-17,-33,66,77,88,-12,-15,99,-46,-57,-70,90,-11,-26,-49,-55)

var begIndx = 0
var exit = 0
Breaks.breakable(

while (exit < a.length) {
//第一个负数出现在第六个位置,下一次从第七个位置开始扫描,不再从0开始扫描。否则每次扫描到的begIndx都是6
val indx = for(i <- begIndx until a.length if a(i) < 0) yield i

//扫描到末尾了(后面没有负数了),跳出while循环,否则报错:下标越界
if(indx == Nil) Breaks.break()

println(indx)
var sum = 0
var tmp = indx(0)

begIndx = tmp + 1

//如果下标连续,说明是同一段连续的负数,计数得到这一段有几个负数,一起remove掉
//设置一个标志,如果发现下标不连续了就不再做空循环了
var flag = true
for(j <- 1 until indx.length if flag){

var tmp1 = indx(j)
if (tmp + 1 == tmp1) {
sum += 1
tmp = tmp1

} else {
//发现下标不连续了,跳出循环
flag = false
}

}
a.remove(begIndx,sum)
println(a)
println(begIndx)
exit += 1
}

)
}
}

功能是实现了,但是“简洁”两个字就别提了。。。
后面会想办法优化这段代码。欢迎大牛莅临指导,先在此谢过~

以上是关于一段练习的代码的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

vscode用啥符号把某一段代码包起来,类似C#的#region?

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段

VS2015 代码片段整理

一些恶心的代码片段