页:
[1]
| ccnjava | 2004-10-8 12:57 PM |
|
菜鸟笔记尝试改版感觉失败(7)break,continue语句
菜鸟笔记尝试改版感觉失败(7)break,continue语句
以上那些都是转向语句.转向语句的意思是让我们从程序的某一地点跳到另一地点.
跳转也并非是想跳那里就跳那里,要进行跳转要遵循一定的条件.
1continue:按照英文翻译为继续意思,再程序中是"立即结束当前循环,并立即开始下一轮循环"
(改决像是玩游戏.比如RPG游戏,和某场地的某人对话后可以传送到
世界的所有地方.条件是和某人对后选择跳转的地方.
游戏还可以规定某些特定的地点只有人们达到100 level才可以进入.进入后有新剧情.
那么这次的条件就是和某人对话并且等级到达100 level.
可见游戏中不能少了跳转,如果没有跳转那么当某人100 level以后不能进入新地点
游戏无法继续进行了.偶记得这样程序好像应该叫bug?(曾经有位高人说:"程序中一切
不能解释的问题我们统成为bug...")?...大家有什么看法?
这种转向语句可以用continue实现.)
格式:
continue;
格式知道了,那么它应该放在那里呢?书上没说...不过它给了题,可以自己试,呵呵
一会在试,先看下面.
2break 在java中的意思是立即退出,跳转到改语句后面的语句.
同样,大家基本都打过即使战略类的游戏.对战时如果我方被敌人打败.
不管你以后还想做什么,游戏都会强行结束.
就相当于程序不管后面还有多少可以执行的东西,但它中间给你查了一个break.
得,完了一切都结束了.程序退出....break感觉有点像英语里面的非延续动词...
这里我方被敌人打败是条件.条件达成,强制退出.这种转向语句可以用break实现.
(大型即使战略游戏我基本都会玩,但都一般.唯一玩的最好的是
世嘉md(mega diive)的恐龙兄弟2. Q版,卡哇椅~)
格式:
break;
格式知道了,那么它应该放在那里呢?书上没说...不过它给了题,可以自己试,呵呵
continue:
练习1:光说无用,做了练习.
public class Zzz{
public static void main(String args[]){
for(int i=1;i<5;i++){
if(i==3)
continue;
System.out.println("\t"+i);
}
}}
从练习中可以看到.循环结构为for,里面欠套一个if.练习不难理解.for都知道了.
题目中的continue放在了System上面,if下面.大概意思如果i==3,那么continue,大家知道了,i=3
跳出本伦循环直接回到for进入下一轮.
简单说一下:i=1时候i<5,然后进行if(i==3)为false.不执行后面的continue;.继续执行System.然后i++ i=2继续
知道i=3.if(i==3)时候为true,要执行跳转书上只写了要设置条件,但同时条件要为true...好像是废话.
然后执行continue,跳出本论循环,continue以后的语句将不在执行.然后再次回到for开头..最后i=5退出循环.
如果我们改改continue会怎么样?
1:书上并没有写continue写在那里,只说了要用在循环体里面,那么如果我们写在循环体外面行不行?
编译能通过么?
A:得到的结果是 error 1: continue outside of loop 结果表明continue在循环外是错误.
2:如果我们要写i=1,4都退出循环怎么写?
A:可以写多条if语句 if(i==4) continue;
if(i==1) continue;
ifi==X先后无所谓,呵呵.也可以写成if(i==4 || i==1) continue; 他们是一样的.
3:if可以欠套.
A:可以呀. if(i==4){
if(i<2) continue;}
这样欠套一下就好了.同样可以写成 if(i==4 && i<2) continue;
4:如果continue没有条件怎么样?没有if(i==2),会如何?
A:试过以后得到1 error:unreachable statement 没有设置跳出条件,语法错误,不能执行System
5:如果没有body怎么样?
for(int i=1;i<5;i++){
if(i==3)
continue;
A:简单...连System.out.prinnt输出都没有程序当然什么都不只执行.何况for规定了可以没有body部分.
照样只是i=3时候跳出循环,这里只是说程序执行了3次循环.
Q:做到这里,大概清楚continue的位置了,哪就是在循环体里面,在if分支语句的后面.switch不是也有break么
我记得它就在case后面.范围限制了,但是还可以把continue移动到其他位置,那就是System后面.
如果这样for(int i=1;i<5;i++){ 会执行什么?又表达什么意思?
if(i==3)
System.out.println("\t"+i);
continue;
A:其实仔细一看也简单.这只是一个for欠套一个if.那么等于i<5 于if(i==3)都为true的时候,才执行
System里面的语句.可以看到只有i==3时候才可以执行System,执行以后跟着执行continue,跳出本轮循环
回到for开头,但是后面就没有判断句为true的了.所以执行后为 "3"
break:
上面的是continue,上面的练习同样适用于break.我们把continue替换成breka吧.
public class Zzz{
public static void main(String args[]){
for(int i=1;i<5;i++){
if(i==3)
break;
System.out.println("\t"+i);
}
}}
于continue不同的是,当if==3时候,执行break以后,后面的system不执行,并且退出循环.
同样,把continue的问题在break试一下
1如果不把break放到循环体里面得到error 1: break outside of loop
2如果这样写if(i==4) break;
if(i==1) break;
则什么也不执行,我感觉它表示的是i==4 或着i==1都要退出循环.相当if(i==1 || i==4)
3同样,if(i==3){
if(i<2) continue;} 改成if(i==3) ,这样等于if(i==3 && i<2)这个式子一定不可能成立,程序永远
不会break,输出1234
4同样得到unreachable statement
5同样把continue改成break.那么会怎么样呢?输出的结果是无..什么也没有.
for(int i=1;i<5;i++){
if(i==4)
System.out.println("\t"+i);
break;
大家看得出来为什么么?简单说一下,首先要执行for,然后if==4,为false,就不执行System了
但后面有执行break,直接就退出循环了.一次不执行...如果改成if==1的话会输出 1.然后在break.
菜鸟废话:另外还有一点,可不可以程序中break和continue一起用呢?
首先,答案是可以的.很多人都看过thinking in java.或者由浅入深学java吧,我把它的练习挑出来.
练习2稍加改动.
for(int i=0;true;i++) {
if(i == 88) break; // Out of for loop
if(i%9!=0) continue; // Next iteration
System.out.println(i);
}
很多人都看过,这里简单说下,i最大值100,但i==88时候会break.而i%9!=0显示在屏幕上.
只显示能被9整除还有小于74的数.不过0也会显示.
其他不多说了,把它放上去目的只是要说明break和continue可以一起使用.
同样的,您可以试试上面练习1改改,比如这样
for(int i = 0; i < 100; i++) {
if(i % 9 != 0) continue;
if(i == 74) break;
System.out.println(i);
把他们调换位置.又会怎么样?如果我没有才错的话,下面的if成了上面的欠套了
而74又不能被9整除,所以这个break没用了.至于其他的偶这里不再罗嗦了.
刚看过书,才得知for(;;)也是死循环.编译器将while(true)和for(;;)看作是一样的.
从练习中我们应该知道break的另一个作用,让死循环强行退出.如果程序就要设置死循环.还要让它
退出那么就可以用到break了.
做过练习2后感觉break这个家伙还是挺霸道的.练习中也说明了.
(闲扯:这让我想起游戏,对于模拟经营类游戏
是永远没有结束的.当然网络游戏也是一样.哪模拟经营类游戏结束的条件是什么?大概是您经营的XX
破产.而网络游戏的结束...我真的不知道了.死了还可以再来.我并不喜欢这类游戏,我喜欢真实的感觉.
死了就不能go on了.只有这样才能让我感到我真的在活着.让我感受到生命...
不过要说网络游戏结束应该就是代理公司垮台了,赔本了,不继续代理了,前些日子看报纸说,XX记者要去
采访XX网络游戏代理公司,结果到那里一看,大楼里以是人去楼空.服务器在无人管理的情况不知道运行了
多少天...)
菜鸟废话:java一共定义了四种转向语句,break,continue,return,throw.
java中大多数东西都是由c/c++变化而来.和c/c++相比,java把goto取消了
但又加入了新东西break,continue.
菜鸟废话:break只支持loop和switch.如果用再其他地方会显示break outside switch or loop
而continue只支持loop.如果用再其他地方会显示continue outside of loop
到了这里,关于break和continue已经说了一多半,以上的练习不知道大家看到没有,循环中都没有欠套其他循环.
假设如果欠套2个for,那么如果我们想从最内层退出到最外层怎么办?光在最内层用break,continue只能退出当前
层的循环.这时候java为我们准备了标签.有了标签,您就可以做到.
(用游戏比喻,偶感觉像是load取存档.游戏中一般都有load.那么在游戏中进入load会有一大堆存档.想像
每个存档就是一个标签.然后选中某一个标签,就自动到选中的存档.)
带标号的break:
来看看标签的格式://有的叫标签,也有人叫标号,总之无所谓,不用较真,那些都是为了让人交流更加方便的名词.
不过标签也要遵循关键字.
带标签的break会自动跳转到改标签所在循环的结尾处,并继续执行改结尾处后面的语句.
for()
{.......... //程序1
label1: for()
{....... //程序2
for()
{...... //程序3
break1;// 跳出label1标签的那层循环
......... //这里仍属于label1的程序,不执行
}
........ //这里往后开始执行.
}
练习3:
public class Zzz {
public static void main(String[] args) {
label1: for(int i = 10; i<13; i++) {
label2: for(int j=0;j<3;j++ ){
System.out.println(j);
if(j==1) break label1;
}
System.out.println(i);
}
System.out.println("我应该报答大家对偶的指导,改天我请大家吃我饭吧!我亲自下厨!");
System.out.println("不要小看我!本人会做2道拿手菜!HOHO!");
System.out.println("一道是谁都吃过地\"糖拌西红柿\"...");
System.out.println("另一道更简单了...\"排黄瓜\"...保证吃了爽口,还不上火~");
}
}
大部分都是偶的废话.看到两个标签label1,2.先执行label1,进入label2for,然后输出0,1
到了1,后面当if==1时候break label1退出label1.所以程序在循环中只输出0,1.label2包涵在
label1里面所以也不执行了.
但是后面的四个System照常执行,应为他们并不包括在label1.
菜鸟废话:如果吧break 改成label2那就没意义了,label2本身就是当前的循环.就和break;本身一样了.
那能不能定义同样的标签名呢?比如吧label1改成label2以后得到的答案是label1 label2 already in use
同样,退出循环也只能从内向外退出,并不能在label1退回到label2.
带标号的continue;
既然break可以带标号,continue同样可以.作用应该是跳到制定的标号,然后执行改循环.
把上面那个改成continue吧
public class Zzz {
public static void main(String[] args) {
label1: for(int i = 10; i<13; i++) {
label2: for(int j=0;j<3;j++ ){
if(j==1) continue label1;
System.out.println(j);
}
System.out.println(i);
}
System.out.println("我应该报答大家对偶的指导,改天我请大家吃我饭吧!我亲自下厨!");
System.out.println("不要小看我!本人会做2道拿手菜!HOHO!");
System.out.println("一道是谁都吃过地\"糖拌西红柿\"...");
System.out.println("另一道更简单了...\"排黄瓜\"...保证吃了爽口,还不上火~");
}
}
只说一下在j==1的时候 continue 跳到label1,然后继续执行label1的for.后在执行label2的for.
如果是break,到了j==1就自动退出label1 for了.这也是他们的不同.
简单的说"带有标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环。
"...就是这样.
至于其他您自己试吧.
给偶的感觉学会了break和continue再学带标号的就简单多了.
小菜鸟尝试改变笔记,但不理想...
另注:这笔记的坏处现在偶看来很明显了.太过普通,普通的像白纸,随处可见.普通的像白开水一样,无色无味.
不过就菜鸟而言,要边学习边写出自己的观点也并非一件容易的事...跟目前所学的知识有限也有关系.
类,方法是什么的还都没学到.我是按照书上的顺序学的.可能短时间不会有太大改动...不过偶会争取一点一点
的改.好在给我感觉能加深印象.
偶这里有几本书,每本讲的次序都有变化,弄的我也不知改按那本学...于是找了一本最厚的...
声明:
唉...有句话说的没错,这人要一走背字,就连喝口凉水都塞牙.小菜鸟最近变得笨了.(本来以前就不聪明...)
前几天无意言语之间连续得罪2位前辈...唉...经常意思表达不清楚,说些让人误会的话....
如果有从4,5天前得罪谁,请海涵...最近晕,不太会说话了~...不过好在现在好了~但得罪的前辈...不理偶了...
唉...
废话连篇:
啊,对了,偶前几天收到一篇小说不错,极品搞笑“我的江湖”.是水木清华里面发的看了一点挺逗.
有人喜欢么?我e-mail给它~当作解闷也好~
网络虽然美丽,但还请大家控制自己上网时间,保护眼睛. |
|
转一个
流程控制¨⒈Java语言的流程控制语句¨
条件分支语句:if-else¨
开关语句:switch¨
循环语句1:while¨
循环语句2:do-while¨
循环语句3:for¨
跳转语句1:continue
¨跳转语句2:break¨
跳转语句3:return
1.continue语句¨该语句必须用于循环语句的循环体中。它有两¨种使用形式⑴不带标号的continue语句:该语句的作用是终止当前的循环,返回循环起始语句,进入¨下一轮循环条件的判断,以决定是否执行下一循环。¨⑵带标号的continue语句:其格式为¨continue<标号名>;¨标号名类似于符号地址。(见p57例)语句中的<标号名>应定义在程序中外层¨循环语句的前面,用来标志这个循环结构。¨执行到该语句时可使程序跳转到标号表明¨的循环层次。
¨2.break语句:¨break语句同样有两种格式¨break[<标号名>];¨该语句的作用是使程序的流程从一个语¨句块中跳转出来,执行后面的语句或执行指定的语句块。
3.return语句:return语句的格式为¨return[<表达式>];¨return语句的作用使程序从方法调用中¨返回,表达式的值就是调用方法的返回值。¨如果方法没有返回值,return语句中的表¨达式可以省略。 |
|
服了你啊,:D :D
不过都如你这样,也不愁学不好东西,呵呵,你继续 |
| ccnjava | 2004-10-9 09:20 AM |
|
谢谢大家
感谢大家的支持以及版主的转贴.呵呵,关于retrun我以后会补上,现在还没学到那里.
呵呵,其实并不是我这样学就一定能学好,我写的笔记都是最基本也是最简单的.
大部分都是看书,以后我会尽量加自己的经验啊,心得啊什么的.争取一点点改变笔记格式.
不过就像我说的,对我这个边学编写的确很难.
写学习笔记的目的一是为了督促自己,好好学,坚持到底.二是想和大家分享
(当然,针对刚学没几天的者...真心希望有一些帮助,哪怕1000字有10几个字我也觉得很值.)
我已经写了7篇了,(1)太幼稚运算符的...没贴.我不想中途放弃.
同样我写笔记途中也会遇到很多问题.能解决问题都是靠前辈们的耐心解答与指点.
如果没有前辈门帮我扫清障碍我也不能前进.
目前的笔记还很差,可读性,与知识性都不高.而且很散.不易复习.但我会努力改.
我不期望大家表扬我.只要大家能鼓励一下,支持一下.就足矣!当然有缺点请大家
严厉再严厉的批评,指导.我想只有认识缺点才能进步.大家指导我都会铭记于心,并尽量的改正.
同样,大家的支持将会变成推进我学习的强大动力,同时给了小菜鸟信心.
.相比教,给自己一个压力,就是给自己一个动力而言,要强大很多.真的! |
|
| 强!感觉楼主在学校绝对没有写不出作文的苦恼!羡慕死俺呀~ 俺加班带通宵都写不出来 :blowzy: :blowzy: |
| ccnjava | 2004-10-10 12:34 PM |
|
高兴并痛苦
感谢J全道支持,偶是菜鸟而已呵呵,您过奖了
可能也不算得罪吧..就是聊天时开玩笑没开好~...
现在不理偶了 |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.006634 second(s), 2 queries |