Java基础系列(3)- 程序流程控制

1|0程序流程控制

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
  1. 顺序结构
  2. 分支结构
  3. 循环结构

顺序结构:程序从上到下逐行地执行,中间没有任何判断和跳转

分支结构:根据条件,选择性地执行某段代码。有 if...else 和 switch-case 两种分支语句

循环结构:根据循环条件,重复性的执行某段代码。有while、do...while、for三种循环语句。JDK1.5提供了foreach循环,方便的遍历集合、数组元素

2|0调用Scanner从键盘获取数据

具体实现步骤:

  1. 导包:import java.util.Scanner;
  2. Scanner 的实例化:Scanner scan = new Scanner(System.in);
  3. 调用 Scanner 类的相关方法(next() / nextXxx()),来获取指定类型的变量
import java.util.Scanner; class HelloWorld{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("请输入你的姓名:"); String name = scan.next(); System.out.println(name); System.out.println("请输入你的芳龄:"); int age = scan.nextInt(); System.out.println(age); System.out.println("请输入你的体重:"); double weight = scan.nextDouble(); System.out.println(weight); System.out.println("你是否相中我了呢(true/false)"); scan.nextBoolean(); } }

3|0一、顺序结构

java 中定义成员变量时采用合法的 前向引用。

public class Test{ int num1 = 12; int num2 = num1 +2; }

不能写成

public class Test{ int num2 = num1 + 2; int num1 = 12; }

4|0二、分支语句

4|12.1 if-else 结构

  1. 语句块只有一条执行语句时,一对 {} 可以省略,但建议保留
  2. 当 if-else 结构是”多选一“时,最后的 else 是可选的,根据需要可以省略。(但是不建议省略
  3. 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓。当多个条件是“包含”关系时,“小上大下/子上父下”

三种结构

第一种 if(条件表达式){ 执行表达式 } 第二种:二选一 if(条件表达式){ 执行表达式1 }else{ 执行表达式2 } 第三种:多选一 if(条件表达式){ 执行表达式1 }else if(条件表达式){ 执行表达式2 }else if(条件表达式){ 执行表达式3 } ... else{ 执行表达式n }

例子

/* 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。 */ class HelloWorld { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入第一个整数:"); int num1 = scanner.nextInt(); System.out.println("请输入第二个整数:"); int num2 = scanner.nextInt(); System.out.println("请输入第三个整数:"); int num3 = scanner.nextInt(); if (num1 >= num2) { if (num3 >= num1) { System.out.println(num2 + "," + num1 + "," + num3); } else if (num3 <= num2) { System.out.println(num3 + "," + num2 + "," + num1); } else { System.out.println(num2 + "," + num3 + "," + num1); } } else { if (num3 >= num2) { System.out.println(num1 + "," + num2 + "," + num3); } else if (num3 <= num1) { System.out.println(num3 + "," + num1 + "," + num2); } else { System.out.println(num1 + "," + num3 + "," + num2); } } } }

4|22.2 switch-case 结构

  1. 根据 switch 表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止
  2. switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0)
  3. case子句中的值必须是常量,不能是变量名或不确定的表达式值;
  4. 同一个switch语句,所有case子句中的常量值互不相同;
  5. break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
  6. default子句是可任选的(可以写在最前面)。同时,位置也是灵活的。当没有匹配的case时,执行default。
switch(表达式){ case 常量1: 语句1; // break; case 常量2: 语句2; // break; case 常量N: 语句N; // break; default: 语句; // break; }

实际例子

String season = "summer"; switch (season) { case "spring": System.out.println("春暖花开"); break; case "summer": System.out.println("夏日炎炎"); break; case "autumn": System.out.println("秋高气爽"); break; case "winter": System.out.println("冬雪皑皑"); break; default: System.out.println("季节输入有误"); break; }

4|32.3 循环结构

1|02.3.1 for 循环

语法格式

for (1初始化部分; 2循环条件部分; 4迭代部分){ 3循环部分; } 执行过程: 1-2-3-4-2-3-4-2-3-4-……

应用举例

public class ForLoop { public static void main(String args[]) { int result = 0; for (int i = 1; i <= 100; i++) { result += i; } System.out.println("result=" + result); } }

1|02.3.2 while 循环

语法格式

1初始化部分 while(2循环条件部分){ 3循环体部分; 4迭代部分; } 执行过程: 1-2-3-4-2-3-4-2-3-4……

应用举例

public class WhileLoop { public static void main(String args[]) { int result = 0; int i = 1; while (i <= 100) { result += i; i++; } System.out.println("result=" + result); } }

1|02.3.3 do-while 循环

do-while循环至少执行一次循环体

语法格式

1初始化部分; do{ 3循环体部分 4迭代部分 }while(2循环条件部分); 执行过程 1-3-4-2-3-4-2-3-4……

循环例题1:从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入

为0时结束程序。

class PositiveNegative { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int positiveNumber = 0;//统计正数的个数 int negativeNumber = 0;//统计负数的个数 for(;;){ //while(true){ System.out.println("请输入一个整数:"); int z = scanner.nextInt(); if(z>0) positiveNumber++; else if(z<0) negativeNumber++; else break; } System.out.println("正数的个数为:"+ positiveNumber); System.out.println("负数的个数为:"+ negativeNumber); } }

循环例题2:99乘法表

class NineNineTable { public static void main(String[] args) { for(int i = 1; i <= 9; i++){ for(int j = 1; j <= i; j++){ System.out.print(i + " * " + j + " = " + (i * j) + " "); } System.out.println(); } } }

循环例题3:100以内的所有质数

class PrimeNumberTest { public static void main(String[] args){ boolean isFlag = true; //标识i是否被j除尽,一旦除尽,修改其值 for(int i = 2; i <= 100; i++){//遍历100以内的自然数 for(int j = 2; j < i; j++)//j:被i去除 if(i % j == 0){ //i被j除尽 isFlag = false; } if(isFlag == true){ System.out.println(i); } //重置isFlag isFlag = true; } } }

循环例题3优化:

class PrimeNumberTest { public static void main(String[] args){ boolean isFlag = true; //标识i是否被j除尽,一旦除尽,修改其值 for(int i = 2; i <= 100; i++){//遍历100以内的自然数 for(int j = 2; j < Math.sqrt(i); j++)//j:被i去除 优化二 if(i % j == 0){ //i被j除尽 isFlag = false; break; //优化一:只对本身非质数的自然数是有效的 } if(isFlag == true){ System.out.println(i); } //重置isFlag isFlag = true; } } }

4|42.4 特殊流程控制语句(break、continue)

  1. break只能用于switch语句循环语句中。
  2. continue 只能用于循环语句中。
  3. 二者功能类似,但continue是终止本次循环,break是终止本层循环。
  4. break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
  5. 标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
  6. 很多语言都有goto语句,goto语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但使程序容易出错。Java中的break和continue是不同于goto的。

带标签的使用方式

label:for(int i = 1; i <= 4; i++){ for(int j = 1; j <= 10; j++){ if(j % 4 == 0){ //break label;//结束指定标识的一层循环结构 continue label;//结束指定标识的一层循环结构当次循环 } System.out.print(j); } System.out.println(); }

循环例题3优化:

class PrimeNumberTest { public static void main(String[] args){ label:for(int i = 2; i <= 100; i++){//遍历100以内的自然数 for(int j = 2; j < Math.sqrt(i); j++){//j:被i去除 优化二 if(i % j == 0){ //i被j除尽 continue label; } } //凡是走到这的都是质数 System.out.println(i); } } }

__EOF__

本文作者😎
本文链接https://www.cnblogs.com/dongye95/p/14495873.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   dongye95  阅读(123)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-03-07 Linux实战技能100讲
点击右上角即可分享
微信分享提示