1. 顺序结构

代码从上往下依次执行

2. 选择结构

也叫分支结构,其会根据执行的结果选择不同的代码执行,有以下两种形式:

  if  语句

  switch  语句

2.1 if 语句

2.1.1  if语句的第一种形式

格式:

  1. if(关系表达式){
  2. 语句体;
  3. }
  4. 执行流程:
  5. 首先判断关系表达式看其结果是true还是false
  6. 如果是true就执行语句体
  7. 如果是false就不执行语句体  

案例

  1. 1 package com._51doit.javase.day04;
  2. 2
  3. 3 import java.util.Scanner;
  4. 4
  5. 5 public class ifDemo1 {
  6. 6 public static void main(String[] args) {
  7. 7 Scanner sc = new Scanner(System.in);
  8. 8 System.out.println("请输入第一个整数:");
  9. 9 int a = sc.nextInt();
  10. 10 if(a > 3) {
  11. 11 System.out.println("哈哈");
  12. 12
  13. 13 }
  14. 14 System.out.print("嘿嘿");
  15. 15 }
  16. 16
  17. 17
  18. 18 }

执行结果:

if 语句的注意事项

  if 语句中的大括号是可以省略的,一旦省略,只控制到第一条语句结束(只到第一个分号为止)

   我们在开发的时候,千万别这样写,出问题的话,很难debug

例如:代码如下

  1. package com._51doit.javase.day04;
  2.  
  3. public class IfDemoTest {
  4. public static void main(String[] args) {
  5. if(3==4)
  6. System.out.println("哈哈");
  7. System.out.println("呵呵");
  8. }
  9. }

上述代码运行结果为      呵呵

解释:if只能控制到第一条语句结束(即if后的第一个分号为止)

若将if( 3==4) 改成 if(3==4); 加了个分号,运行的结果为  哈哈   呵呵

分号“;”相当于{ ;}(其代表空语句,表示砂蜜豆没有)

练习:

从键盘录入两个整数,判断两个数据是否相等,
如果是就输出:相等,
不是,输出不相等
1. 使用if 语句完成
2. 使用一条if 语句完成

  1. public class IfTest {
  2. public static void main(String[] args) {
  3. //1. 从键盘录入两个整数
  4. Scanner sc = new Scanner(System.in);
  5. System.out.println("请输入第一个整数");
  6. int a = sc.nextInt();
  7. System.out.println("请输入第二个整数");
  8. int b = sc.nextInt();
  9. //2. 使用if语句做判断
  10. /*if(a == b) {
  11. System.out.println("相等");
  12. }
  13. if(a != b) {
  14. System.out.println("不相等");
  15. }*/
  16. //使用一条语句实现
  17. String re ="相等";
  18. if(a!=b) {
  19. re = "不相等";
  20. }
  21. System.out.println(re);
  22. }
  23. }

2.1.2  if语句的第二种形式

格式

  1. if(关系表达式) {
  2. 语句体1;
  3. }else {
  4. 语句体2;
  5. }
  6. 执行流程
    首先判断关系表达式看其结果是true 还是false
         如果是true 就执行语句体1
    如果是false 就执行语句体2

 案例:

  1. /**
  2. 键盘录入一个整数,判断数据是奇数还是偶数
  3. */
  4.  
  5. package com._51doit.javase.day04;
  6.  
  7. import java.util.Scanner;
  8.  
  9. public class IfDemo2 {
  10. public static void main(String[] args) {
  11. Scanner sc = new Scanner(System.in);
  12. System.out.println("请输入一个数据");
  13. int a = sc.nextInt();
  14. if(a%2==0) {
  15. System.out.println("偶数");
  16. }else {
  17. System.out.println("奇数");
  18. }
  19. }
  20. }

2.1.3  if语句的第三种形式

格式

  1. if(关系表达式1) {
  2. 语句体1;
  3. }else if (关系表达式2) {
  4. 语句体2;
  5. }

  6. else {
  7. 语句体n+1;
  8. }
  9. 流程:
  10. 首先判断关系表达式1 看其结果是true 还是false
  11. 如果是true 就执行语句体1
  12. 如果是false 就继续判断关系表达式2 看其结果是true 还是false
    如果是true 就执行语句体2
    如果是false 就继续判断关系表达式…看其结果是true 还是false
    如果没有任何关系表达式为true,就执行语句体n+1

案例

  1. public class IfDemo4 {
  2. //从键盘录入一个整数,判断是正数,负数,还是0
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. System.out.println("请输入一个整数");
  6. int a = sc.nextInt();
  7. if(a>0) {
  8. System.out.println("正数");
  9. }else if(a==0) {
  10. System.out.println("是0");
  11. }else {
  12. System.out.println("负数");
  13. }
  14. }
  15. }

练习

1. 键盘录入x 的值,计算出y 的并输出。
x>=3         y = 2x + 1;
-1<=x<1    y = 2x;

x<-1          y = 2x – 1;

代码如下:

  1. 1 package com._51doit.javase.day04;
  2. 2 import java.util.Scanner;
  3. 3 public class IfTest2 {
  4. 4 public static void main(String[] args) {
  5. 5 Scanner sc = new Scanner(System.in);
  6. 6 System.out.println("请输入x的值");
  7. 7 int x = sc.nextInt();
  8. 8 if(x>=3) {
  9. 9 System.out.println("y="+(2*x+1));
  10. 10 }else if(x<1&x>=-1) {
  11. 11 System.out.println("y="+2*x);
  12. 12 }else if(x<-1) {
  13. 13 System.out.println("y="+(2*x-1));
  14. 14 }else {
  15. 15 System.out.println("x不合法");
  16. 16 }
  17. 17 }
  18. 18 }

2.2  switch语句

格式

  1. switch(表达式){
  2. case 常量值1:
  3. 语句体1;
  4. break;
  5. case 常量值2:
  6. 语句体2;
  7. break;
  8. ...
  9. default:
  10. 语句体n+1
  11. break;
  12. }

 执行流程:

1. 首先计算出表达式的值

2. 其次,和case做比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束,否则一直往下进行

3. 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

表达式的类型:

 byte,short,int, char, 枚举   jdk7以后(新加):String

案例:

根据键盘录入的数值1,2,3,.....7  输出对应的星期一,星期二,。。。星期日

  1. package com._51doit.javase.day04;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class SwithDemo {
  6. public static void main(String[] args) {
  7. // 输入1-7中的一个数,分别代表周一到周日
  8. Scanner sc = new Scanner(System.in);
  9. System.out.println("请输入一个整数");
  10. int day = sc.nextInt();
  11. switch(day) {
  12. case 1:
  13. System.out.println("Monday");
  14. break;
  15. case 2:
  16. System.out.println("Tuesday");
  17. break;
  18. case 3:
  19. System.out.println("Wednesday");
  20. break;
  21. case 4:
  22. System.out.println("Thursday");
  23. break;
  24. case 5:
  25. System.out.println("Friday");
  26. break;
  27. case 6:
  28. System.out.println("Saturday");
  29. break;
  30. case 7:
  31. System.out.println("Sunday");
  32. break;
  33. default:
  34. System.out.println("Are you kidding?");
  35. }
  36. }
  37. }

注意事项:

1. case后面只能跟常量,不能跟变量

2. 多个case后面的常量值不能相同

3. case的顺序没有要求,可以放到任意位置

4. default也可以放在任意位置

5. default可以不要

6.break可以省略,如果省略的话,代码会继续向下执行,不管下面的case是否匹配成功,一直执行到再次遇到break,或者是执行到了switch语句结束

如若将所有break不写上面代码运行结果会变成如下,当输入1时:1的结果连同其后面的结果都会打印出来,当输入2时,21的结果连同其后面的结果都会打印出来(1的不会)

7 switch语句何时结束:遇到break,或者代码执行到了switch语句的最后

3. 循环结构

让一段代码反复执行很多次

3.1 for 循环

  1. for(初始化语句;判断条件语句;控制条件语句) {
  2. 循环体语句体;
  3. }

执行流程:

(1)执行初始化语句

(2)执行判断条件语句,看其结果是true还是false,如果是false,循环结束

(3)执行循环体语句

(4)执行控制条件语句

(5)回到(2)继续

案例:

1  打印100句话

  1. package com._51doit.javase.day04;
  2. // 打印100句话
  3. public class ForDemo{
  4. public static void main(String[] args) {
  5. for(int i=1;i<100;i++) {
  6. System.out.println("学大数据的我");
  7. }
  8. }
  9. }

2. 求1-100奇数和偶数和

  1. package com._51doit.javase.day04;
  2.  
  3. public class ForDemo{
  4. public static void main(String[] args) {
  5. int oldNumberCount = 0;
  6. int evenNumberCount = 0;
  7. for(int i=1;i<=100;i++) {
  8. if(i%2==0) {
  9. evenNumberCount += i;
  10. }else {
  11. oldNumberCount += i;
  12. }
  13. }
  14. System.out.println("1-100中的偶数和为"+evenNumberCount);
  15. System.out.println("1-100中的奇数和为"+oldNumberCount);

3. 请统计1-1000之间分别满足如下条件的数据有多少

对3整除余2;对5整除余3;对7整除余2;

  1. /*
  2. 请统计1-1000之间分别满足如下条件的数据有多少个
  3.  
  4. 对3整除余2;对5整除余3;对7整除余2;
  5. **/
  6.  
  7. package com._51doit.javase.day04.loop;
  8.  
  9. public class ForTest {
  10. public static void main(String[] args) {
  11. int a=0;
  12. int b=0;
  13. int c=0;
  14. for(int i=1; i<=1000; i++) {
  15. if(i%3 == 2) {
  16. a += 1;
  17. }
  18. if(i%5 ==3 ) {
  19. b += 1;
  20. }
  21. if(i%7 == 2) {
  22. c += 1;
  23. }
  24. }
  25. System.out.println(a);
  26. System.out.println(b);
  27. System.out.println(c);
  28. }
  29. }

注意,此处不能用else if(要用if),因为else if只要满足条件,后面的代码就不会运行了,但有些数据可能既满足条件1也满足条件2或3,这样就会漏算

 3.2 while循环

格式:

  1. 初始化语句;
  2. while(判断条件语句) {
  3. 循环体语句体;
  4. 控制条件语句;
  5. }

案例

1. 打印1-100的数

  1. package com._51doit.javase.day04.loop;
  2.  
  3. public class WhileDemo {
  4. public static void main(String[] args) {
  5. int i = 1;
  6. while(i <= 100) {
  7. System.out.println(i);
  8. i++;
  9. }
  10. }
  11. }

2. 一座山峰的高度为8848m,加入有一张足够大的纸,厚度为0.01m,请问需要折多少次才能保证纸的厚度不低于山峰的高度

  1. /*
  2. 一座山峰的高度为8848m,加入有一张足够大的纸,厚度为0.01m,请问需要折多少次才能保
  3. 证纸的厚度不低于山峰的高度
  4. **/
  5.  
  6. package com._51doit.javase.day04.loop;
  7.  
  8. public class WhileDemo2 {
  9. public static void main(String[] args) {
  10. double hight = 0.01;
  11. int num = 0;
  12. while(hight < 8848) {
  13. hight *=2;
  14. num++;
  15. }
  16. System.out.println(num);
  17. }
  18. }

两种循环的对比:

for 循环适合针对一个范围判断进行操作

while 循环适合不知道循环的次数,或者要求循环的次数

 

零基础学习java------day4------流程控制结构的更多相关文章

  1. 音乐出身的妹纸,零基础学习JAVA靠谱么

    问:表示音乐出身的妹纸一枚  某一天突然觉得身边认识的是一群程序员   突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...

  2. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  3. 怎么规划一个零基础学习Unity3D的“方法”或者“流程”?

    具体出处:https://www.zhihu.com/question/35542990 我只是一个计算机相关专业毕业的,已经掌握了基础的C#并开发过.net的.目前突然心血来潮对unity3D有兴趣 ...

  4. 零基础学Java第二节(运算符、输入、选择流程控制)

    本篇文章是<零基础学Java>专栏的第二篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 第一章 运算符 1.1 算术运算符的概述和用法 运算符 对常量和变 ...

  5. Salesforce 集成篇零基础学习(一)Connected App

    本篇参考: https://zhuanlan.zhihu.com/p/89020647 https://trailhead.salesforce.com/content/learn/modules/c ...

  6. 零基础学Java第三节(基本输入输出)

    本篇文章是<零基础学Java>专栏的第三篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] Java程序的命令行参数 我们可以 ...

  7. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  8. 【零基础学习iOS开发】【转载】

    原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...

  9. 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇

    从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...

  10. 零基础学习hadoop到上手工作线路指导

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

随机推荐

  1. Python pip 和pip3区别 联系

    python 有python2和python3的区别 那么pip也有pip和pip3的区别 大概是这样的 pip是python的包管理工具,pip和pip3版本不同,都位于Scripts\目录下: 如 ...

  2. cf20B Equation(认真仔细题)

    题意: 求AX^2+BX+C=0的根 思路: 考虑到A,B,C所有可能的情况 代码: double a,b,c; int main(){ cin>>a>>b>>c; ...

  3. BQ40Z50固件怎么升级?告诉你BQ系列芯片内部结构和升级方法

    一 BQ芯片初步认识 包括BQ40Z50在内,BQ系列电池管理芯片看起来是一个芯片,其实芯片里面封装了两个die.一个是MCU部分负责计算和控制,其采用的是bqBMP内核的16位处理器:另外一个die ...

  4. 记一次 Java 导出大批量 Excel 优化

    常用的excel导出方案,详情见Spring Boot 入门(十二):报表导出,对比poi.jxl和esayExcel的效率,其中jxl.esayEscel 底层都是基于 poi,它们仅仅是对 poi ...

  5. 权限控制-RBAC(Role-Based Access Control)

    RBAC是基于角色的权限访问控制,在RBAC中角色与权限相连,用户通过成为某个角色而得到角色的权限,这就极大的简化了权限的管理,用户和角色多对多,角色和权限多对多,由此产生用户表.角色表.权限表,用户 ...

  6. centos7.2安装rabbitmq教程

    环境: centos7.2 rabbitmq依赖erlang,需要先安装erlang 1 安装erlang rpm -Uvh https://download.fedoraproject.org/pu ...

  7. js 增删节点

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  8. 在linux 环境下 安装php

    最近打算学写一个php 脚本~ 到了虚拟机环境上发现~没有环境. 只有老老实实去装一个php环境咯. 第一步 去官网下一个包 记得一定要下载tgz格式的 第二步~当然是传上虚拟机上咯~任意目录都可以. ...

  9. [cf1326F]Wise Men

    对答案序列求一个高维后缀和,再通过差分将其解出,后者复杂度为$o(n2^{n})$ 对于求后缀和后的结果,即01序列仅要求1处有边(不要求0处没有边),那么也即要求将原图划分为若干条长度给定且没有公共 ...

  10. [hdu6598]Harmonious Army

    网络流建图,首先将所有价值加起来,用最小割考虑要删掉多少个价值:源点向每一个士兵连流量为x的边,士兵向汇点连流量为y的边,每一对关系间连流量为z的边,考虑有方程x1+y2+z=x2+y1+z=a+c, ...