Java的第三篇文章——流程控制

简介: Java的第三篇文章——流程控制

第三章 流程控制

1.顺序结构

按照实物本身特性,必须一个接着一个来完成,也就是代码从上往下挨个执行。

2.分支结构

2.1 if条件语句

(1)if语句

(2)if…else语句

(3)if…else if…else语句

// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
System.out.print("请输入i:");
int i = scanner.nextInt();
System.out.print("请输入j:");
int j = scanner.nextInt();
if (i > j){               // 执行条件判断①
  System.out.println("i 比 j 大");  // ①为true时执行
} else if (i < j) {           // ①为false继续执行下一个条件判断②
  System.out.println("i 比 j 小");  // ②为true时执行
} else {                
  System.out.println("i 和 j 相等"); // ②为false时执行
}

2.2 switch…case语句

import java.util.Scanner;
public class Demo18SwitchCase {
  public static void main(String[] args){
    // 创建Scanner对象
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入季节:");
    String season = scanner.nextLine();
    // 使用season变量的值和后面的case依次进行比较
    // 遇到一个满足条件的case,那么后面的都会被执行,包括default分支
    // 除非在某个case中使用了break关键字,停止了case的执行。
    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 ;
      // 当前面每一个case都不匹配时执行default分支(默认分支)
      default:
        System.out.println("我喜欢梅雨季节");
    }
  }
}

①switch(表达式)中表达式的可选值类型

  • byte
  • short
  • int
  • char
  • 枚举(JDK1.5)
  • String(JDK1.7)

②case子句

  • case子句中指定的值必须是常量,不能是变量或不确定的表达式的值
  • 同一个switch语句中所有case子句中的常量值必须互不相同

③default子句

  • default子句是可选的
  • default子句的位置是灵活的

3.循环结构

3.1 for循环

语法规则:

  • 循环结构中判断条件部分必须是布尔类型,当判断条件部分的表达式计算结果为false时,循环结束。
  • 初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
  • 可以有多个变量更新,用逗号分隔
// for (声明循环变量;循环过程中的判断条件;循环变量累加) {
for ( int i = 1 ;  i <= 10 ; i++ ) {
  // 循环体:希望重复执行的代码
  System.out.println("Hello " + i);
}

3.2 while循环

问题:世界最高山峰是珠穆朗玛峰,它的高度是8844.43米,假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

// 将两个数值统一一下单位
double height = 88444300;
double paper = 1.0;
// 声明一个变量用于统计折纸的次数
int count = 0;
// 声明一个变量用于保存纸折叠后的厚度
// 初始值是纸没有折叠时的厚度
double thickness = paper;
// 只要纸的厚度还没有超过山的高度就一直循环
while(thickness <= height){
  // 每折一次,厚度会翻倍
  thickness *= 2;
  // 每循环一次就代表折叠了一次
  count++;
}
System.out.println("最终纸的厚度=" + thickness);
System.out.println("最终折叠的次数=" + count);

3.3 do…while循环

do…while循环和while循环的区别:do…while是先执行后判断,也就是说无论如何都会执行一次,而while循环是先判断后执行。

import java.util.Scanner;
// 从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
public class DoWhileExersice {
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入一个整数:");
    int userInput = scanner.nextInt();
    int positiveCount = 0;
    int negativeCount = 0;
    do {
      if (userInput > 0){
        positiveCount++;
      }
      if (userInput < 0){
        negativeCount++;
      }
      System.out.println("正数的个数:"+positiveCount);
      System.out.println("负数的个数:"+negativeCount);
      System.out.print("请输入一个整数:");
      userInput = scanner.nextInt();
    }while(userInput != 0);
  }

3.4 循环控制语句

①break 基本用法:结束本层循环

System.out.println("循环执行开始了");
for (int i = 1; i <= 10; i++){
  if ( i == 5 ){
    // 将整个本层的循环结束
    break;
  }
  System.out.println("i="+i);
}
System.out.println("循环执行结束了");

即使break放在嵌套循环中,也只能结束本层循环:

System.out.println("外层循环执行开始了");
for (int k = 1; k <= 10; k++){
  System.out.println("内层循环执行开始了");
  for (int i = 1; i <= 10; i++){
    if ( i == 5 ){
      // 将整个本层的循环结束
      break;
    }
    System.out.println("k = " + k + " i = " + i);
  }
  System.out.println("内层循环执行结束了");
}
System.out.println("外层循环执行结束了");

使用规则

  • break只能用在switch或循环结构中
  • break语句后面,不能紧挨着写任何其他语句,因为任何其他语句都没法执行到
  • 当一个switch语句出现在循环中,switch里面使用break只能对switch有效,对循环无效

②continue 基本用法 :结束本次循环

for (int i = 1; i <= 10; i++){
  System.out.println();
  System.out.print(i);
  System.out.print("*");
  System.out.print("*");
  if (i == 6) {
    // 提前结束本次循环,继续执行下一次循环
    continue;
  }
  System.out.print("*");
}

使用规则

  • 只能用于循环结构
  • continue语句后面,不能紧挨着写任何其他语句,因为任何其他语句都没法执行到

③return:本质上不是控制循环的语句,是用来结束一个函数(方法)的。但是当函数结束时,哪怕还有循环操作没有结束,那也执行不了了。

public static void main(String[] args){
  for (int i = 1; i <= 10; i++){
    System.out.println("i="+i);
    if (i == 6){
      return ;
    }
  }
  // 由于整个函数结束了,所以这里的代码不会被执行到
  System.out.println("循环后面的代码");
}

感谢尚硅谷老师的教导!!!

相关文章
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
53 3
|
4月前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(完结)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!(完结)
40 0
|
27天前
|
小程序 前端开发 算法
|
1月前
|
Java API 开发者
Java如何实现企业微信审批流程
大家好,我是V哥。本文分享如何在企业微信中实现审批流程,通过调用企业微信的开放API完成。主要内容包括获取Access Token、创建审批模板、发起审批流程和查询审批结果。提供了一个Java示例代码,帮助开发者快速上手。希望对你有帮助,关注V哥爱编程,编码路上同行。
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
56 4
|
2月前
|
SQL IDE Java
入门Cloud Toolkit:简化你的Java应用开发与部署流程
【10月更文挑战第19天】作为一名长期从事Java开发的程序员,我一直致力于寻找能够简化日常开发工作的工具。在众多工具中,阿里巴巴推出的Cloud Toolkit引起了我的注意。这款免费的插件旨在帮助开发者更轻松地进行开发、测试及部署工作,尤其是在与云服务交互时表现尤为出色。本文将从个人的角度出发,介绍Cloud Toolkit的基本功能及其使用技巧,希望能帮助初学者快速上手这款实用工具。
25 1
|
2月前
|
前端开发 安全 Java
java发布公告的实现流程
构建一个Java公告发布系统涉及到前端界面设计、后端业务逻辑处理、数据库设计与交互、安全性保障等多个环节。通过采用现代的开发框架和最佳实践,可以高效地开发出既安全又易于维护的系统。随着需求的增长,系统还可以进一步扩展,比如增加评论功能、通知订阅、多语言支持等。
38 1
|
2月前
|
运维 Cloud Native Java
Java项目部署的发展流程
本文介绍了四种不同的应用部署方式:传统部署、虚拟化部署、容器化部署和云原生部署。每种方式的特点、部署流程及优缺点进行了详细说明。传统部署直接在物理机上运行应用,存在资源利用率低和运维成本高的问题;虚拟化部署通过虚拟机实现资源隔离和复用,但有性能损失和单点故障风险;容器化部署则提供轻量级、可移植的应用环境,具备良好的隔离性和一致性;云原生部署结合了容器化和微服务架构,实现高效运维和灵活扩展。
Java项目部署的发展流程
|
4月前
|
存储 前端开发 JavaScript
【前端学java】一篇文章带你精通java 中的数组(10)
【8月更文挑战第10天】一篇文章带你精通java 中的数组
17 3
【前端学java】一篇文章带你精通java 中的数组(10)
|
4月前
|
运维 Cloud Native Java
Java项目部署的发展流程
本文对比分析了四种不同的应用部署方式:传统部署、虚拟化部署、容器化部署及云原生部署。传统部署直接在物理机上运行程序,存在资源复用难等问题。虚拟化部署通过虚拟机技术实现了资源的有效隔离与利用,但可能会造成性能损失。容器化部署则进一步提升了应用的可移植性和资源利用率,减轻了运维负担。云原生部署结合容器化、微服务等技术,实现了应用的快速迭代、高效运维和灵活扩展,适用于现代互联网应用的开发与部署。每种方式均针对其特点进行了详细的流程描述与优缺点分析。