文章目录
一、条件语句
Java希望在某个条件为真时执行相应的语句。
单if情况
int a=6;
if (a==6)
{
System.out.println("n=6");
}
System.out.println("已跳出循环");
statement中如果是单语句,花括号可以省略。但是建议保留花括号,利于阅读,不容易混乱。
循环外的语句一定会执行。
单if/else情况
int a=6;
if (a==6)
{
System.out.println("n=6");
}
else
{
System.out.println("n!=6");
}
System.out.println("循环外");
不是你死,就是我亡。
if/else多分支情况
Scanner s = new Scanner(System.in);
System.out.println("请输入一个整数:");
int n = s.nextInt();
if (n==3)
{
System.out.println("n=3");
}
else if(n>3)
{
System.out.println("n>3");
}
else
{
System.out.println("n<3");
}
System.out.printf("循环之外,都会输出 %d ",n);
选择很多。。
switch条件语句
其实是选择语句,根据整数表达式的值,从一系列代码中选出一段去执行。
int n;//double n;错误: 不兼容的类型: 从double转换到int可能会有损失
switch (n)
{
case 1:
System.out.println("n="+n);
break;
case 2:
System.out.println("n="+n);
break;
case 3:
System.out.println("n="+n);
break;
default:
System.out.println("其他");
break;
}
- switch(xxx),括号内一定是一个整数值,或者能产生整数值的表达式!!(byte,short,char,int,枚举类型,String,而不能是boolean类型)
- case xxx,当然case后面也需要整数值,且switch语句将表达式的整数值与case后的值一一对比,相符合就执行里面的代码,不相符就向下走。
- default后类似于else,其他都找不到,再轮到它。
- break是可选的,使代码跳至switch主体的末尾,如果不加break,会依次执行后面case部分的语句,直到遇到break。
- 如果多个case条件后面的执行语句是一样的,执行语句只需要在最后满足条件的地方写一次就可,简化结构。
while循环和for循环基本概念……直接上代码!
二、循环语句
while循环语句
int i = 0;
while(i<10)
{
System.out.println(i);
i++;
}
System.out.println("跳出循环!");
//输出0 1 2 3 4 5 6 7 8 9 跳出循环!
- while(xx),括号内为true,则执行一条语句或一个语句块,还是那句话,建议保留“块”的花括号,利于阅读。
- 括号内为false,while循环体内的代码一次也不会执行。
do…while循环
int a = 0;
do{
a++;
System.out.println(a);
}while(a<0);
System.out.println("跳出循环~");
do {statement}while (xx),与单纯while不同的是,do……while结构至少会执行循环体内的代码一次,随后再进行判断。
for循环
for循环语句是支持迭代的一种通用结构,利用每次迭代后更新的计数器或者类似的变量来控制迭代次数。
for(int i=1;i<=10;i++)
{
System.out.print(i+" ");
}
关于for循环
- 第一部分用于对计数器初始化。
- 第二部分用于检测循环执行条件。
- 第三部分用于指示如何更新计数器。
注意:
-
for(double x=0;x!=10;x+=0.1)
这个条件永远不会结束,因为0.1无法精确用二进制表示。可以参考:关于Java中2.0-1.1!=0.9的问题 -
for语句第一部分声明的变量的作用域只是整个for循环体。
for(int i=0;i<10;i++){ System.out.print(i); } System.out.print(i);//false,跳出循环,i未定义。 //可以用以下方式: /* int i; for(i=0;i<10;i++) ...*/
-
for循环其实是while循环的一种简化形式。上面可以改写为:
int i =0; while(i<10){ System.out.print(i); i++; }
之前谈到各种循环结构,有for循环啊,有while循环啊,可以完成不断重复的动作,相当方便。那么如果好多个循环结合再一次,又是如何实现效果的呢。对此,本篇对嵌套循环做一些小小的探究。
三、嵌套循环
嵌套循环:无非就是,一个循环套着一个嘛,其实只要数量超过二,不管多少个循环结构,只要都完完全全有包含关系,就是完完全全的嵌套。嵌套分为外层循环和内层循环。嵌套循环的形式是不定的,任何类型的循环都可以组合在一起。
for循环嵌套
下面先来一个for循环加for循环实现万能的乘法口诀表:
public class Test{
public static void main(String[] args){
//嵌套循环
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)
{
System.out.print(j+"*"+i+"="+j*i+"\t");
}
System.out.println();
}
}
}
while循环嵌套
接下来再来一个while循环嵌套打印九九乘法口诀表的例子:
public class Test{
public static void main(String[] args){
int i = 1;
while(i<=9)
{
int j = 1;
while(j<=i)
{
System.out.print(j+"*"+i+"="+j*i+"\t");
j++;
}
System.out.println();
i++;
}
}
}
当然,结果和上面相同!输出结果:
总结
- 内层循环可以看成外层循环的循环体,所以外层循环申明的变量值在内层循环中依旧存在着。
- 首先判断外层循环的条件,条件为真,执行外层循环的循环体,也就是内层循环。
- 内层循环也需要先判定内层循环的条件,同理条件为真才会执行里面的循环体。条件为假,则跳出内层循环,即结束外层循环的当此循环。
- 执行次数=外层执行次数*内层执行次数。
在程序设计时,循环直接的跳转显得十分重要,虽然Java没有提供goto语句去控制程序的跳转,但为了控制循环,Java提供了continue,break,以及特殊的标签来实现特定的中断及跳转,当然还有return,这个相对不同一些。本篇将会做出总结。
四、中断语句
break
在循环时,如果不想等到false就终止循环的话,可以使用break来完成。
例如以下这个简单的例子:
for (int i = 0;i<10 ;i++ ) {
System.out.println(i);
if(i==1) break;
}
System.out.println("跳出循环");//输出 0 1 跳出循环
可以直到,如果没有if(i==1) break;
这个语句,这个循环将会依次输出0-9的数字,但是加上这句之后,如果执行到i等于1时,执行break语句,将直接跳出循环。
continue
continue有点像是放弃一部分,再从头开始。
依旧给出例子:
for (int i = 0;i<10 ;i++ )
{
if(i%2==0) continue;
System.out.println(i);
}
System.out.println("跳出循环");
//输出1 3 5 7 9 跳出循环
- continue用于忽略本次循环剩下的语句,接着下一次循环,但是不会像break一样直接终止循环。
- 上面的例子,只要时偶数就跳过后面的输出环节,后面也就都是输出奇数啦。
return
其实return并不是专门用于结束循环的关键字,而是用来结束一个方法。
for (int i = 0;i<10 ;i++ ) {
System.out.println(i);
if(i==1) return;
}
System.out.println("跳出循环");//输出 0 1
- 可以看出,将第一个break语句的例子改成return,后面的“跳出循环”并不会被输出,也就是说return结束了整个程序。
- 虽然return也可以结束一个循环,但是与前两个不同,他结束了整个方法,不管return藏在多少层嵌套循环里面。
- return与break和continue不同的地方有很多,return后面可以跟一个值,并将值返回。
标签跳转
Java中没有goto但是,continue和break两个本属于中断语句的关键字,配合上“标签”之后,有了和goto类似实现跳转的机制,能够轻易控制多层的循环嵌套。
break和continue配合标签类似,但也有差别。
标签需要放在循环语句之前,否则有啥意义吖,具体形式如:label:
- break+标签
outer:
for (int i = 0;i<5 ;i++ ) {
for (int j = 0;j<3 ;j++ ) {
System.out.print(" i="+i+" j="+j);
if(j==1)
{
break outer;
}
System.out.println();
}
}
//输出
i=0 j=0
i=0 j=1
当j==1时,遇到break outer语句,导致结束outer标签指定的循环,不是结束break所在的循环!不是结束break所在的循环!!!!
- continue+标签
outer:
for (int i = 0;i<5 ;i++ ) {
for (int j = 0;j<3 ;j++ ) {
System.out.print(" i="+i+" j="+j);
if(j==1)
{
continue outer;
}
System.out.println();
}
}
//输出
i=0 j=0
i=0 j=1 i=1 j=0
i=1 j=1 i=2 j=0
i=2 j=1 i=3 j=0
i=3 j=1 i=4 j=0
i=4 j=1
j的值永远都不会超过1,因为每当j=1,遇到continue outer语句就结束了outer标签控制循环的当此循环,直接开始下一次循环,这时候i从i+1开始,j又将从0开始。
参考资料:《疯狂Java讲义》