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. 再点小虫子

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

在这里插入图片描述

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

在这里插入图片描述

相关文章
|
23天前
|
小程序 前端开发 算法
|
29天前
|
Java API 开发者
Java如何实现企业微信审批流程
大家好,我是V哥。本文分享如何在企业微信中实现审批流程,通过调用企业微信的开放API完成。主要内容包括获取Access Token、创建审批模板、发起审批流程和查询审批结果。提供了一个Java示例代码,帮助开发者快速上手。希望对你有帮助,关注V哥爱编程,编码路上同行。
|
1月前
|
SQL IDE Java
入门Cloud Toolkit:简化你的Java应用开发与部署流程
【10月更文挑战第19天】作为一名长期从事Java开发的程序员,我一直致力于寻找能够简化日常开发工作的工具。在众多工具中,阿里巴巴推出的Cloud Toolkit引起了我的注意。这款免费的插件旨在帮助开发者更轻松地进行开发、测试及部署工作,尤其是在与云服务交互时表现尤为出色。本文将从个人的角度出发,介绍Cloud Toolkit的基本功能及其使用技巧,希望能帮助初学者快速上手这款实用工具。
24 1
|
1月前
|
前端开发 安全 Java
java发布公告的实现流程
构建一个Java公告发布系统涉及到前端界面设计、后端业务逻辑处理、数据库设计与交互、安全性保障等多个环节。通过采用现代的开发框架和最佳实践,可以高效地开发出既安全又易于维护的系统。随着需求的增长,系统还可以进一步扩展,比如增加评论功能、通知订阅、多语言支持等。
34 1
|
1月前
|
运维 Cloud Native Java
Java项目部署的发展流程
本文介绍了四种不同的应用部署方式:传统部署、虚拟化部署、容器化部署和云原生部署。每种方式的特点、部署流程及优缺点进行了详细说明。传统部署直接在物理机上运行应用,存在资源利用率低和运维成本高的问题;虚拟化部署通过虚拟机实现资源隔离和复用,但有性能损失和单点故障风险;容器化部署则提供轻量级、可移植的应用环境,具备良好的隔离性和一致性;云原生部署结合了容器化和微服务架构,实现高效运维和灵活扩展。
Java项目部署的发展流程
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
1月前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
36 0
|
1月前
|
Java 程序员 开发工具
java学习笔记
java学习笔记
38 0
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
本文是“Java学习路线”中Java基础知识的高级篇,主要对多线程和反射进行了深入浅出的介绍,在多线程部分,详细介绍了线程的概念、生命周期、多线程的线程安全、线程通信、线程同步,并对synchronized和Lock锁;反射部分对反射的特性、功能、优缺点、适用场景等进行了介绍。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
下一篇
无影云桌面