[ Java学习 ] “goto语句“ 和 “continue + 标号” 的不同待遇

/*

  成文背景:

  昨天做完Java实验以后,发现有道题自己用的是枚举法,还是三重循环...当时觉得,实在是不能容忍这样的算法,存在于自己的实验报告里,于是上网去搜索,有没有可以优化的算法...

 

  最后结果是,优化的算法没找到,但是学到了一种新用法 “continue + 标号”,内容就是文章标题了,是我后来在查找完一些资料以后,对“continue + 标号”这种用法的一些思考。

*/

 

  首先说一下,一开始看到这个用法时,是相当震惊的,有种“天哪~居然还有这种操作”的感觉,当时,好像是有个博主用它退出了较外层的循环(链接见下,可直接点击

 

给定某一长度的字符串,请找出其中由相同字符连接而成的最长字符串

 

 

  既然看到了新用法,当然去查资料,看看它怎么用啦!~可是越搜越觉得不对,这个的作用,分明和 C语言里的 goto 语句差不多啊!

 

  再仔细看看,真的觉得差不多,除了一个把 goto 关键字改成了 continue 关键字,我真的没看出有什么区别。

 

  可是我分明记得,学C语言的时候,老师多次强调:能不用goto的,就绝对不要用goto,这个问题,网上也有相关的讨论(链接见下,可直接点击

 

为什么说goto是一种不好的用法?

既然建议尽量避免使用goto语句为何C++还要支持goto呢?

为何不建议用goto

为什么都不建议用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"); 创建了几个对象

C语言printf("")左对齐和右对齐

//这个是用 System.out.printf()时,突然对C语言的格式控制有些遗忘了,于是回去确认了一下

 Java编程基础——FAQ2.24 数组如何定义和初始化?

//说来惭愧,我在做实验时,在数组声明时就指定了数组的大小,导致后来一直报编译错,却一直找不到。这又是把C++的语言特性直接用到Java了,对它们的区别不上心,难怪会被卡编译错

java中对象实体与对象的引用有何不同?

java--对象引用与对象的区别

String s = "abc" String s = new String("abc") 有什么区别?

String[] 字符串数组如何初始化

给定某一长度的字符串,请找出其中由相同字符连接而成的最长字符串

/*

  查这题的本意是想找找有没有让我觉得很惊艳的算法,因为凭着直觉,总觉得字符串的题,一般都会有能用算法很巧妙地解出来的那种写法。

  

  然而,略微失望的是,这种解法感觉仍然是枚举法,感觉和我能想到的方法差不多

 

  不过,有点惊喜的是,这题在“字符串相邻两个元素不相等”时的处理,让我知道了 continue break语句原来还可以带标号,这可是这次搜到才知道的,不过,鉴于这种写法,和goto语句实在是太相似了。后来请教老师时,得到的建议也是,建议别用标号,所以,虽然知道了这种写法,应该以后也不会去用...但是不管怎么说,多知道了一种用法,还是比较开心的!~(^^*)

*/

C++goto语句

JAVA标号与continue,break

带标签的breakcontinue语句(JavaC++

 

 

 

posted @ 2017-10-20 08:34  mofushaohua  阅读(164)  评论(0编辑  收藏  举报