Java学习笔记(二):流程控制

简介: 流程控制

@[toc]

  
  
  
  

Scanner对象

之前我们学的基本语法中我们并没有实现程序和人的交互,但是 Java 给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入
  
创建 Scanner 对象的基本语法:

Scanner s = new Scanner (system.in)

  
通过 Scanner 类的 next()nextLine() 方法获取输入的字符串。
在读取前我们一般需要使用 hasNext()hasNextLine() 判断是否还有输入的数据。
  
  
  

next() 与 nextLine()

  • next():

  1、一定要读取到有效字符后才可以结束输入。
  翻译:必须输入,否则程序就不停止
  
  2、对输入的有效字符之前遇到的空白,next() 方法会自动将其去掉
  举例:对于 hello 。输出 hello,前无空格。
  
  3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  翻译:如果字符串后面有空格,则后面的空格表示结束。
  
  4、next() 不能得到带有空格的字符串
  翻译:字符串前的空格去掉,字符串后有空格结束程序。
  

  • nextLine():

  1、以Enter(回车)为结束符。
  翻译:nextLine()方法返回的是输入回车之前的所有字符
  
  2、可以获得空白

  
  
  

next() 与 nextLine()举例

  
next():

Scanner scanner = new Scanner(System.in);

System.out.println("使用next方法接受:");

String str = scanner.next();  //获取输入的字符串
System.out.println("输出的内容为:"+str);

//凡是属于IO流的类如果不关闭会一直占用资源。要养成好习惯用完就关掉。
scanner.close();

在这里插入图片描述
输入: Hello world
输出:Hello
Hello前的空格不输出,Hello后有空格直接结束程序不输出

  
nextLine():

Scanner scanner = new Scanner(System.in);

System.out.println("使用nextLine方法接受:");

String str = scanner.nextLine();  //获取输入的字符串
System.out.println("输出的内容为:"+str);

//凡是属于IO流的类如果不关闭会一直占用资源。要养成好习惯用完就关掉。
scanner.close();

在这里插入图片描述
输入: Hello world
输出: Hello world
输入了什么,就输出什么

  
  
  
  

Scanner进阶

  
scanner对象不仅有 next() 方法和 nextLine() 方法,
还有 nextInt()nextFloat()nextDouble() 等方法获取输入数据
  

Scanner scanner = new Scanner(System.in);

int i ;

System.out.println("请输入整数:");
if(scanner.hasNextInt()){
    i = scanner.nextInt();
    System.out.println("输入的整数为:"+i);
}else{
    System.out.println("输入的不是整型数据!");

scanner.close();
}

在这里插入图片描述
在这里插入图片描述
对于 scanner.nextInt() ,只有输入整形数据才会接受
  
  
  
  

if 单选择结构

  
我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用 if 语句来表示
  
语法:

if (布尔表达式){
  //如果布尔表达式为true将执行的语句
}

翻译:if 语句对布尔表达式进行一次判断,若判断为真,则执行下面的语句,否则跳过该语句。

Scanner scanner = new Scanner(System.in);

System.out.print("请输入内容:");
String s = scanner.nextLine();

//equals:判断字符串是否相等  判断字符串少用 ==
if(s.equals("Hello")){
    System.out.println("输出 "+s+" 成功");
}

System.out.println("End");
scanner.close();

如果正确输入,就会显示 if 里的内容。

在这里插入图片描述

如果错误输入,if 里的语句就不会执行。
在这里插入图片描述
  
  
  
  

if 双选择结构

  
语法:

if (布尔表达式){
  //如果布尔表达式的值为true
}else{
  //如果布尔表达式的值为false
}

翻译:当布尔表达式值为 true 时,执行 if 下的语句;否则 (布尔表达式的值为false),执行 else 下的语句。
  

Scanner scanner = new Scanner(System.in);

System.out.print("请输入分数:");
int score = scanner.nextInt();

if(score >= 60){
    System.out.println("及格");
}else{
    System.out.println("不及格");
}

scanner.close();

在这里插入图片描述
在这里插入图片描述
布尔值不同时,两个结果也不同。
  
  
  
  

if 多选择结构

  
语法:

if (布尔表达式 1){
   //如果布尔表达式 1的值为true执行代码
}else if (布尔表达式 2){
   //如果布尔表达式 2的值为true执行代码
}else if (布尔表达式 3){
   //如果布尔表达式 3的值为true执行代码
}else {
   //如果以上布尔表达式都不为true执行代码
}

  

注意点:

  1. if 语句至多有1个 else 语句,else 语句在所有的 else if 语句之后
  2. if 语句可以有若干个else if 语句,它们必须在 else 语句之前
  3. 一旦其中一个 else if 语句检测为 true ,其他的 else if 以及 else 语句都将跳过执行

翻译:别看这么多 if、else if、else,最终只会执行其中一条

System.out.println("请输入成绩:");
int score = scanner.nextInt();

if(score == 100){
    System.out.println("满分!");
}else if(score>=90 && score<100){
    System.out.println("A");
}else if(score>=80 && score<90){
    System.out.println("B");
}else if(score>=70 && score<80){
    System.out.println("C");
}else if(score>=60 && score<70){
    System.out.println("D");
}else{
    System.out.println("不及格");
}

在这里插入图片描述
  
还可以优化上面的代码
因为程序是从上往下执行的,且if、else if、else,最终只会执行其中一条。所以 if,else if,else 语句最终只会执行遇到的第一个 true

System.out.println("请输入成绩:");
int score = scanner.nextInt();

if(score == 100){
     System.out.println("满分!");
}else if(score>=90){
    System.out.println("A");
}else if(score>=80){
    System.out.println("B");
}else if(score>=70){
    System.out.println("C");
}else if(score>=60){
    System.out.println("D");
}else{
    System.out.println("不及格");
}

在这里插入图片描述
  
  
  
  

嵌套的 if 结构

  
使用嵌套的 if…else 语句是合法的。也就是说可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。可以像 if 语句一样嵌套 else if...else
  
语法:

if (布尔表达式 1){
  //如果布尔表达式 1的值为true执行代码
  if (布尔表达式 2){
    //如果布尔表达式 2的值为true执行代码
  }
}

  
  
  
  

switch 多选择结构

  

  • 多选择结构还有一个实现方式就是 switch case 语句。
  • switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

语法:

switch (expression){
  case value :
    //语句
    break;
  case value :
    //语句
    break;
  //可以有任意数量的case语句
  default : //可选
    //语句
}


switch 语句中的变量类型可以是:

  1. byte 、 short 、 int 或者 char 。
  2. 从 Java SE 7 开始, switch 支持字符串 String 类型了。
  3. 同时 case 标签必须为字符串常量或字面量。

switch case 语句有如下规则:

  1. switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。case 语句中的值的 数据类型必须与变量的数据类型相同 ,而且只能是常量或者字面常量。
  2. 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
  3. 当遇到 break 语句时, switch 语句终止。程序跳出 switch 语句,接着执行后面的语句。 case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现break 语句。
  4. switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在变量值与每个 case 语句中的值都不相等的时候执行。 default 分支不需要 break 语句。

Scanner scanner = new Scanner(System.in);
System.out.println("请输入等级:");
char i = scanner.next().charAt(0);

switch (i){
    case 'A':
        System.out.println("优秀");
        break;
    case 'B':
        System.out.println("良好");
        break;
    case 'C':
        System.out.println("及格");
        break;
    case 'D':
        System.out.println("不及格");
        break;
    case 'E':
        System.out.println("差劲");
        break;
    default:
        System.out.println("输错了");

}

输入值在case中找到了
在这里插入图片描述

输入值在case中没找到,输出 default 中的语句
在这里插入图片描述

case穿透:
如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出。如果后续的 case 语句块有 break 语句则会跳出判断。

Scanner scanner = new Scanner(System.in);
System.out.println("请输入等级:");
char i = scanner.next().charAt(0);

switch (i){
    case 'A':
        System.out.println("优秀");
    case 'B':
        System.out.println("良好");
    case 'C':
        System.out.println("及格");
    case 'D':
        System.out.println("不及格");
    case 'E':
        System.out.println("差劲");
    default:
        System.out.println("输错了");

}

在这里插入图片描述
  
  
  
  

while 循环

  
while 是最基本的循环,它的结构为:

while ( 布尔表达式 ) {
  //循环内容
}

在循环刚开始时,会计算一次 “ 布尔表达式 ” 的值,若条件为真,执行循环体。而对于后来每一次额外的循环,都会在开始前重新计算一次判断是否为真。直到条件不成立,则循环结束。
  

  • 只要布尔表达式为 true ,循环就会一直执行下去。
  • 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。
  • 少部分情况需要循环一直执行,比如服务器的请求响应监听等。
  • 循环条件一直为 true 就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或者造成程序卡死崩溃。

练习:

int i = 1;
int sum = 0;

while(i <= 100){
    sum += i;
    i += 1;
}
System.out.println(sum);

在这里插入图片描述

  
  
  
  

do...while 循环

  
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
   
语法:

do {
    //代码语句
}while (布尔表达式);


举例:

int i = 1;
int sum = 0;
do {
    sum += i;
    i += 1;
}while (i<=100);
System.out.println(sum);

在这里插入图片描述

注意:
布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true ,则语句块一直执行,直到布尔表达式的值为 false 。
   

While 和 do-While 的区别:

while先判断后执行do...while先执行后判断
Do...while总是保证循环体会被至少执行一次!这是他们的主要差别。

举例:

int a = 0;

while (a<0){        //布尔值为false,没有输出任何结果
    System.out.println("while输出结果了");
    a++;
}

在这里插入图片描述
什么都没有输出!

int a = 0;

do {
    System.out.println("do while输出结果了");
}while (a<0);       //布尔值也为false,但输出了一个结果

在这里插入图片描述
这说明:
即使布尔表达式的值为 false ,但依然会执行一次。

  
  
  
  

For 循环

  

  • 虽然所有循环结构都可以用 while 或者 do...while 表示,但 Java 提供了另一种语句 ——
    for 循环,使一些循环结构变得更加简单。
  • for 循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
  • for 循环执行的次数是在执行前就确定的。

语法:

for (初始化;布尔表达式; 更新) {
  //代码语句
}


for 循环的执行顺序:

  1. 先进行初始化
  2. 布尔表达式判断。如果是 true,往下执行代码语句;如果是 false,退出循环。
  3. 执行代码语句
  4. 更新变量。接着再判断布尔

1 —> 2 —> 3 —> 4 —> 2 —> 3 —> 4......(2 3 4循环执行,直至布尔值为false)


计算0到100之间的奇数和偶数的和:

int oddNum = 0;     //奇数
int evenNum = 0;    //偶数

for (int i = 0; i <= 100; i++) {     //100.for回车就出来了
    if (i % 2 == 0) {
        evenNum += i;
    } else {
        oddNum += i;
    }
}

System.out.println("0到100奇数之和为:"+oddNum);
System.out.println("0到100偶数之和为:"+evenNum);

在这里插入图片描述

介绍一个快捷方式:

想循环几次,就输入 几.for ;如:想循环100次,就输入 100.for
在这里插入图片描述
回车!
在这里插入图片描述

两道练习:

1.输出 1-1000 之间能被 5 整除的数,并且每行输出 3 个

for (int i = 1; i <= 1000; i++) {
    if (i%5 == 0){
        System.out.print(i+"\t");
    }
    if (i%(3*5) == 0){
        System.out.println();
    }
}

在这里插入图片描述

2.打印九九乘法表

for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print(j+"*"+i+"="+(i*j)+"\t");
    }
    System.out.println();
}

在这里插入图片描述
  
  
  
  

增强 for 循环

  
语法:

for (声明语句 : 表达式)
{
  //代码句子
}
  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。


看不懂没关系,举个例子:

这是Python
直接遍历列表(数组)元素

listTest = [1, 2, 3, 4, 5]

for s in listTest:
    print(s)

在这里插入图片描述


这是Java
直接遍历数组元素

int[] a = {1,2,3,4,5};

for (int x:a){
    System.out.println(x);
}

在这里插入图片描述

跟这个输出结果一样👇
通过下标遍历数组元素

int[] a = {1,2,3,4,5};
for (int i = 0;i <= 4;i++){
    System.out.println(a[i]);
}

  
  
  
  

break 与 continue

  

  • break:在任何循环语句的主体部分,都可用 break 控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也可在switch多选择语句中使用)
  • continue:用在循环语句体中,用于终止本次循环过程,但不退出循环。即跳过本次循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。


补充:
在 for 循环中, continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,continue 语句使程序立即跳转到布尔表达式的判断语句。



break 举例:

int j = 0;
while (j < 100){
    j++;
    if (j%10 == 0){
        break;
    }
    System.out.print(j+"\t");
}

在这里插入图片描述
如果没有 break,程序会输出1到100所有数
有了 break,当 j == 10 满足 break 条件,程序执行 break,强行退出程序,循环结束。



continue 举例:

int i = 0;
while (i < 100){
    i++;
    if (i%10 == 0){
        continue;
    }
    System.out.print(i+"\t");
}

在这里插入图片描述

continue 会让程序跳过本次循环,执行下一次循环。
当 i%10 == 0,即 i 为10、20、30、40、50、60、70、80、90、100时都会跳过当前程序,去执行下一次程序。

  
  
  
  

Debug 用法

  
拿打印三角形来举例:

for (int i = 1;i <= 5;i++){
    for (int j = 5;i <= j;j--){
        System.out.print(" ");
    }
    for (int j = 1;j <= i;j++){
        System.out.print("*");
    }
    for (int j = 1;j < i;j++){
        System.out.print("*");
    }
    System.out.println();
}

在这里插入图片描述
当程序出错,但自己都找不到时,可以使用Debug功能(小虫子)
在这里插入图片描述


步骤:

  1. 先设置断点

在这里插入图片描述

  1. 再点小虫子

在这里插入图片描述
这样就能通过按钮调试,看清每一步的执行情况了
在这里插入图片描述

在这里插入图片描述

每点一下,程序向后或向前走一步

在这里插入图片描述

相关文章
|
20天前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
277 1
|
1月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
129 7
|
29天前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
249 0
|
3月前
|
自然语言处理 前端开发 Java
JBoltAI 框架完整实操案例 在 Java 生态中快速构建大模型应用全流程实战指南
本案例基于JBoltAI框架,展示如何快速构建Java生态中的大模型应用——智能客服系统。系统面向电商平台,具备自动回答常见问题、意图识别、多轮对话理解及复杂问题转接人工等功能。采用Spring Boot+JBoltAI架构,集成向量数据库与大模型(如文心一言或通义千问)。内容涵盖需求分析、环境搭建、代码实现(知识库管理、核心服务、REST API)、前端界面开发及部署测试全流程,助你高效掌握大模型应用开发。
334 5
|
3月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
201 5
|
1月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
251 63
|
6月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
89 13
|
28天前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
118 3
|
6月前
|
安全 Java 程序员
《从头开始学java,一天一个知识点》之:控制流程:if-else条件语句实战
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《for与while循环的使用场景》。 ---
129 19
|
2月前
|
人工智能 Cloud Native Java
Java 技术栈企业级应用开发全流程
本指南通过构建企业级电商系统,全面解析现代化Java技术栈实战应用。涵盖Spring Boot 3、微服务架构、云原生部署、服务治理、监控可观测性及AI集成,助开发者掌握全流程开发技能,打造高效可扩展的企业级应用。
166 0
Java 技术栈企业级应用开发全流程