Java:流程控制汇总

一、条件语句

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讲义》

发布了79 篇原创文章 · 获赞 62 · 访问量 3470

猜你喜欢

转载自blog.csdn.net/Sky_QiaoBa_Sum/article/details/104326411