/*
成文背景:
昨天做完Java实验以后,发现有道题自己用的是枚举法,还是三重循环...当时觉得,实在是不能容忍这样的算法,存在于自己的实验报告里,于是上网去搜索,有没有可以优化的算法...
最后结果是,优化的算法没找到,但是学到了一种新用法 “continue + 标号”,内容就是文章标题了,是我后来在查找完一些资料以后,对“continue + 标号”这种用法的一些思考。
*/
首先说一下,一开始看到这个用法时,是相当震惊的,有种“天哪~居然还有这种操作”的感觉,当时,好像是有个博主用它退出了较外层的循环(链接见下,可直接点击)
给定某一长度的字符串,请找出其中由相同字符连接而成的最长字符串
既然看到了新用法,当然去查资料,看看它怎么用啦!~可是越搜越觉得不对,这个的作用,分明和 C语言里的 goto 语句差不多啊!
再仔细看看,真的觉得差不多,除了一个把 goto 关键字改成了 continue 关键字,我真的没看出有什么区别。
可是我分明记得,学C语言的时候,老师多次强调:能不用goto的,就绝对不要用goto,这个问题,网上也有相关的讨论(链接见下,可直接点击)
既然建议尽量避免使用goto语句为何C++还要支持goto呢?
于是我仔仔细细回忆了一下,我刚刚搜过的“continue + 标号”的相关资料,还回去确认了一下...
我发现,好像并没有人不建议用 “continue + 标号”啊?为什么啊?明明它和goto语句如出一辙啊!大家为什么这么厚此薄彼呢?
于是,我请教了一下老师,老师给我的建议是:能不用标号的情况下,就都不要用了(包括“continue + 标号”)
但是,我还是不明白,为什么goto语句饱受诟病,但是“continue + 标号”,反而没什么人提到它的弊端呢?于是我又去请教了2个师兄,他们的意思大概是这样:
可能“continue + 标号” 很少人用,所以也很少人说它不好(这是他们的猜想)
后来想了想,好像真的是这样,有个师兄说,还是我问了他这个问题以后,他才知道有“continue + 标号”这种用法,其实我也想说,如果不是这题,想找个经典算法,改进一下直接的做法,我也不会知道还有“continue + 标号”这种操作的...
于是我觉得,应该真的是因为用的人比较少,于是,大家听说时,第一反应都是“震惊!没想到还有这种操作!!~”我当时搜索的,介绍 “continue + 标号”的博文里,确实就是这种画风。
可能因为太少人用了,所以大家的第一反应都是震惊,太过震惊,以至于就忽略了挑出它的毛病了~
再说下事情的后续,我改了一下那个博主的代码,其实也就是加上一个 boolean 型的 flag变量,在想要使用 “continue + 标号” 的地方,改变flag的值,并break出来。最后退出循环时,在判断flag的真假即可,其实也没有我想象地那么麻烦...也不过多加一个变量而已嘛!~
但是,如果为了一点点小方便,而在程序里面,使用标号这种,容易破坏程序逻辑结构的用法,我觉得挺得不偿失的
以及,附带贴上今天做实验时,查阅过的其他资料吧!~(链接见下,可直接点击)
String str1 = "abc"; String str2 = new String("abc"); 区别
String str="abc" 与 String str = new String("abc");详解
关于String str =new String("abc")和 String str = "abc"的比较
面试题之String str = new String("abc"); 创建了几个对象
//这个是用 System.out.printf()时,突然对C语言的格式控制有些遗忘了,于是回去确认了一下
//说来惭愧,我在做实验时,在数组声明时就指定了数组的大小,导致后来一直报编译错,却一直找不到。这又是把C++的语言特性直接用到Java了,对它们的区别不上心,难怪会被卡编译错
String s = "abc" 与 String s = new String("abc") 有什么区别?
给定某一长度的字符串,请找出其中由相同字符连接而成的最长字符串
/*
查这题的本意是想找找有没有让我觉得很惊艳的算法,因为凭着直觉,总觉得字符串的题,一般都会有能用算法很巧妙地解出来的那种写法。
然而,略微失望的是,这种解法感觉仍然是枚举法,感觉和我能想到的方法差不多
不过,有点惊喜的是,这题在“字符串相邻两个元素不相等”时的处理,让我知道了 continue 和break语句原来还可以带标号,这可是这次搜到才知道的,不过,鉴于这种写法,和goto语句实在是太相似了。后来请教老师时,得到的建议也是,建议别用标号,所以,虽然知道了这种写法,应该以后也不会去用...但是不管怎么说,多知道了一种用法,还是比较开心的!~♪(^∇^*)
*/
带标签的break和continue语句(Java、C++)