博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内建控制结构之不再使用break和continue
阅读量:6828 次
发布时间:2019-06-26

本文共 1962 字,大约阅读时间需要 6 分钟。

  hot3.png

Scala中没有把break与continue作为关键字,scala去掉了这些命令因为它们与函数式字面量啮合得不好。Continue在while循环中的意思很清楚,但是在函数式字面量中表示什么呢?虽然scala既支持指令式风格也支持函数式风格,但在这点上它略微倾向于函数式编程,以换取语法上的简洁性。

用if替换每个continue和用布尔变量替换每个break是最简单的方式。布尔变量用来说明while循环是否应该继续。我们来写一个java示例:

package aa;public class Test8{    public static void main(String[] args){        Integer[] arr = new Integer[]{1,2,3,4,5,6,7,8,9};        int i = 0;        boolean b = false;        while(i < arr.length){            if(arr[i]%2 == 0){                System.out.println("continue: " + arr[i]);                i++;                continue;            }            System.out.println("continue之后: " + arr[i]);            if(arr[i]%3 == 0){                b = true;                System.out.println("break!!-----" + arr[i]);                break;            }            i++;        }        System.out.println("arr[i]=" + arr[i] + "b=" + b);    }}

这个例子从整数数组中过滤掉所有能被2整除的数,在剩下的整数中找到一个能被3整除的数字。

如果直译成scala代,if之后的continue这块可以改写成用if包裹while余下的全部内容。要去掉break,只须增加一个布尔变量提示是否继续下去即可。如例:

package scalaTestobject Test7 {    def main(args:Array[String]){        val arr = Array(1,2,4,5,6,7,8,9)        println("这个数就是: " + fun1(arr))    }    def fun1(arr:Array[Int]) = {        var i = 0        var b = false        var c = 0        while(i < arr.length && !b){            if(arr(i) % 2 != 0){                if(arr(i) % 3 == 0){                    b = true                    c = arr(i)                }            }            i += 1        }        c    }}

结果:

154924_0GA3_168814.jpg

我们提倡函数式风格,所以上面的代码并不完美,里面还使用了var。我们来改进一下,把循环用递归函数代替var用val代替。如例:

package scalaTestobject Test7 {    def main(args:Array[String]):Unit = {        val arr = Array(1,2,4,5,6,7,8,9)        println(fun1(arr,0))    }    def fun1(arr:Array[Int],i:Int):Int = {    //递归函数要定义返回值类型        if(i >= arr.length || i < 0) -999        else if(arr(i) % 2 == 0) fun1(arr,i+1)        else if(arr(i) % 3 == 0) arr(i)        else fun1(arr,i+1)    }}

注意递归函数一定要定义返回值类型

转载于:https://my.oschina.net/fhd/blog/275856

你可能感兴趣的文章
React Native : 按钮 Button
查看>>
利用ACS实现AAA服务
查看>>
yii框架的flash消息
查看>>
test
查看>>
RedHat 学习笔记【1】基础命令杂谈
查看>>
容器 - 常用Map之间区别
查看>>
我的友情链接
查看>>
linux下 端口复用的问题
查看>>
临近毕业的困惑
查看>>
为什么应用程序用户启动时崩溃,使用xcode打开却不会
查看>>
在Android中启动另一个Activity
查看>>
是什么占用了我的分区
查看>>
【淘宝数据干货】我用数据告诉你互联网安全套行业是什么样的?【不看后悔!!!】...
查看>>
Redis 设计与实现
查看>>
我的友情链接
查看>>
编写Windows服务程序的五个步骤
查看>>
micropython更新到v1.9
查看>>
Exchange Server 2013预览01-系统需求
查看>>
Redis安装和使用示例
查看>>
如何解决向eclipse导入android project时遇到错误“Invalid proj...
查看>>