您的位置:首页 > 编程语言 > Java开发

5.偏头痛杨的Java入门教学系列之流程控制语句篇

2017-05-11 21:57 609 查看
复习
1.Java有多少种数据类型,数据类型的分类?
2.Java的工作机制?
3.自定类型转换与强制类型转换的规则?
4.什么是变量,如何定义变量?Java中有多少种变量?分别是什么以及区别?
5.整型从小到大排序并且说出大小?
6.++与--放在变量前面与后面的区别?
7.解释一下&&与||的作用?
8.基本数据类型的包装类型分别是什么?
9.方法有几种?分别是什么?区别是什么?
10.JDK&JRE&JVM分别是什么以及他们的关系?

前文链接:
1.偏头痛杨的Java入门教学系列之认识Java篇
http://blog.csdn.net/piantoutongyang/article/details/70138697
2.偏头痛杨的Java入门教学系列之变量&数据类型篇
http://blog.csdn.net/piantoutongyang/article/details/70193622
3.偏头痛杨的Java入门教学系列之表达式&运算符&关键字&标识符&表达式篇
http://blog.csdn.net/piantoutongyang/article/details/71027446
4.偏头痛杨的Java入门教学系列之初级面向对象篇
http://blog.csdn.net/piantoutongyang/article/details/78135129

前戏
程序是按上下顺序执行的,控制流语句允许改变程序执行的顺序,以及循环执行。
比如我需要你输出1万个"你好",你会真的复制粘贴1万个System.out.println("你好");吗?
当然不,我们需要使用循环语句。

循环语句
顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。
java只有三种循环语句,他们分别是:for循环,while循环,do while循环。

for循环
for循环为Java中最常见的循环,比较灵活也比其他的循环略复杂一些,for循环执行的次数是在执行前就确定的。
它的语法是:
for(初始化表达式;循环条件表达式;循环后的操作表达式) {
  //执行语句块
}
注意:
1.初始化表达式和循环后操作表达式可以只声明一个变量也可以用逗号分隔的声明多种变量或表达式,也可以是空语句;
2.for语句中的循环后的操作表达式总会被执行,除非在循环体中出现了continue;



for(int x=1;x<3;x++){
  System.out.println("x="+x);
  //猜猜输出了什么?
}

在JDK1.5之后又出现了增强型的for循环,也叫for each循环,主要用于数组&集合使用。
(数组&集合的概念会在之后讲解,新手可略过),他的语法是:
for(声明语句 : 表达式){
   //代码句子
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

int [] numbers = {10, 20, 30, 40, 50};

for(int x : numbers){
  System.out.print(x);
}

while循环
while是Java中最基本的循环,它的语法是:
while(条件表达式) {
  //执行语句块
}
只要条件表达式为 true,循环体会一直执行下去。



int x=1;
while(x<3){
  System.out.println(x);
  x++;
}
//猜猜看输出了什么?

do while循环
对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,
也至少执行一次。
它的语法是:
do{
  //执行语句块
} while(条件表达式);



int x=3;
do{
  System.out.println(x);
  x++;
} while(x<3);
//猜猜看输出了什么?

中断关键字continue,break,return
在使用循环语句时,只有循环条件表达式的值为false时,才能结束循环。
有时,我们想提前中断循环,要实现这一点,只需要在循环语句块中添加break&continue&return语句。
三者的作用范围:return>break>continue

1.关键字continue
continue语句用在循环语句体中,用于终止某次循环过程,让程序立刻跳转到下一次循环的迭代。
它的语法是:
continue;
只能出现在循环语句while、do…while、for中
在 for 循环中,continue 语句使程序立即跳转到循环后的操作表达式。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。

for(int i=1;i<50;i++) {
  if((i%2)==0){
    continue;
  }
  System.out.print(i+" ");
}

2.关键字break
break语句用于终止某个语句块的执行。用在循环语句体中,可以强行退出本次循环(即本次循环后面的循环都不执行了),
它的语法是:
break;
可以出现在while、do while、for、switch语句体中。

for(int i=0;i<100;i++){
  if(i==10){
    break;
  }
  System.out.println("i="+i);
}

break的高级用法(新手PASS)
break 标签:可以出现在任何语句体中。

对Java来说,唯一用到标签的地方是在循环语句之前。进一步说,它实际需要紧靠在循环语句的前方——在标签和循环之间置入任何语句都是不明智的。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环或者一个开关。

1.简单的一个continue会退回最内层循环的开头(顶部),并继续执行。
2.带有标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环。
3.break会中断当前循环,并移离当前标签的末尾。
4.带标签的break会中断当前循环,并移离由那个标签指示的循环的末尾。

public class Test {
    public static void main(String[] args) {
         outer: for (int i = 0; i < 10; i++) {
             System.out.println("Outer loop");

             inner: while (true) {
                  Scanner sc = new Scanner(System.in);
                  String s = sc.next();
                  System.out.println("inner Loop:" + s);
                  if (s.equals("hello"))
                       break inner;
                  if (s.equals("kitty"))
                       break outer;
            }
        }
    }
}

3.关键字return
直接跳出当前方法,而不仅仅是跳出循环。如果当前方法返回值为void,则直接写成:
return;
如果返回值不为void,则写成:
return 返回值;

public static void main(String[] args) throws Exception {
    // SpringApplication.run(DemoController.class, args);
    for(int i = 0 ; i < 10 ; i ++){
        System.out.println(i);
        if(i==5){
            return; //可以分别把这里换成continue,return,break来感受一下
        }
    }
    System.out.println("我在外面");
}

嵌套循环

for(int x = 0; x<2;x++){
  for(int y = 0;y<2;y++){
    System.out.println(x+" "+y);
  }
}

//输出
//0 0
//0 1
//1 0
//1 1

死循环
顾名思义,就是往死里循环,循环到死。。。

for(int x=1;;x++){
  System.out.println("x="+x);
}

while(true){
  System.out.println("死循环");
}

for(;;){
  System.out.println("死循环");
}

条件控制语句
顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构。
Java只有两种分支结构:if判断与switch判断

if判断
一个 if 语句包含一个布尔表达式和一条或多条语句。

语法1:
if(表达式){
  //执行语句块
}



条件表达式可以是任何一种逻辑表达式
如果表达式值为true,则执行花括号的内容后,再执行后面的语句
如果表达的值为false,则直接执行后面的语句

int a = 1;
if(a>0){
  System.out.println("你好");
}
System.out.println("北京");

语法2:
if (表达式) {
  //执行语句块1
}  else  {
  //执行语句块2
}



如果布尔表达式的值为true,则执行语句1
如果布尔表达式的值为false,则执行语句2

int x = 0;
if(x==1){
  System.out.println(“x的值为1");
}else{
  System.out.println("x的值为“+x);
}

语法3:
if (表达式1) {
  //执行语句块1
} else  if(表达式2) {
  //执行语句块2
} else  if(表达式3) {
  //执行语句块3
}



int x = -5;
if(x<60){
  System.out.println("成绩不合格");
} else if(x>=85){
  System.out.println("成绩优秀");
} else if(x==-5){
  System.out.println("系统出错");
} else{
  System.out.println("成级良好");
}
//猜猜看输出什么?有陷阱

for循环与if判断结合使用

for(int i = 1 ;i<= 1000 ; i ++){
  if(i==3){
    System.out.println("jack 我爱你");
  }else{
    System.out.println("jack"+i);
  }
}

switch判断
switch 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

语法:
switch (表达式){
  case 取值1:
  //语句块1
  break;//可选
    …
  case 取值n:
  //语句块n
  break;//可选

  default: //语句块n+1
}

注意事项:
1.表达式的值只可以接受String(JDK1.7之后支持)、int、byte、char、short类型,枚举类型,不接受其他类型的值。
2.不允许有重复的case取值。
3.switch一旦碰到第一次case匹配,程序就会跳转到这个标签位置,开始顺序执行以后所有的程序代码,
而不管后面的case条件是否匹配,直到碰到break语句为止。因为这种写法会造成歧义,所以建议每个case必须写break。
4.default,可选,default 在没有 case 语句的值和变量值相等的时候执行。dafault也可以写在case的上面,但不建议这么写。

int n = 2;
int result;
switch(n++){
  case 1:
    System.out.println("Block A");
    result = n;
  break;
  case 2:
      System.out.println("Block B");
      result = n*n;
  break;
  case 3:
      System.out.println("Block C");
      result = n*n*n;
  break;
  default: result = 0;
}
System.out.println("result="+result);//猜猜输出的是什么?

此外case也可以叠在一起

int n = 1;//n=1与n=2的输出结果一样
switch(n++){
  case 1:
  case 2:
      System.out.println("Block A or B");
  break;
  case 3:
      System.out.println("Block C");
  break;
}

总结
今天我们主要学习了循环语句与条件判断语句。
作业
1.编写一个方法,需要传1个整型变量作为参数,方法中先把参数输出,再判断参数为偶数就返回true,非偶数返回false。
在main方法中调用该方法3次,分别传入参数为3、4、5,并将方法的返回值输出。

2.编写一个方法,需要传入2个整型变量作为参数,方法中返回数值较大的参数,在main方法中调用该方法几次,参数自定义,并将方法的返回值输出。

3.编写一个方法,需要传入1个整型变量作为参数,方法中使用switch做判断,如果参数值为1则输出"星期一", 如果参数值为2则输出"星期二",
依此类推,如果参数值不在1-7的范围内则输出"参数错误",在main方法中调用该方法几次,参数自定义。

4.编写一个方法,打印出一个菱形(这道题比较难,不允许搜百度上的答案)。

   *
  ***
 *****
*******
 *****
  ***
[align=left]   *[/align]

友情提示:
System.out.println();输出是带换行的;
System.out.print();输出是不带换行的;
需要使用嵌套for循环;
一个循环输出空格,一个循环输出星号;一个循环输出换行;

下集预告
如果我想把10个相同数据类型的变量打包成一个整体,进行传输或操作,那怎么办呢?我们就需要使用数组了哟。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: