【Java入门】长达近万字来讲解逻辑控制

这篇具有很好参考价值的文章主要介绍了【Java入门】长达近万字来讲解逻辑控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Java入门】长达近万字来讲解逻辑控制
前言

📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于Java入门篇系列,该专栏主要讲解:什么是java、java的数据类型与变量、运算符、程序的逻辑控制、方法的使用、数组的定义与使、类和对象、继承和多态、抽象类和接口、认识String类、认识异常等……持续更新,请大家拭目以待恒川的专栏!
📘相关专栏C语言初阶、C语言进阶、恒川的日常汇报系列等,大家有兴趣的可以看一看
📙Python零基础入门系列,正在发展中,喜欢Python的朋友们可以关注一下哦!


1. 顺序结构

顺序结构比较简单,按照代码书写的顺序一行一行执行。

System.out.println("aaa");

System.out.println("bbb");

System.out.println("ccc");
 

// 运行结果

aaa
bbb
ccc

如果调整代码的书写顺序, 则执行顺序也发生变化

System.out.println("aaa");

System.out.println("ccc");

System.out.println("bbb");
 

// 运行结果

aaa
ccc
bbb

2. 分支结构

2.1 if 语句

  1. 语法格式1
if(布尔表达式){
    // 语句

}

如果布尔表达式结果为true,执行if中的语句,否则不执行。
比如:小明,如果这次考试考到90分或以上,给你奖励一个鸡腿。

int score = 92;

if(score >= 90){
    System.out.println("吃个大鸡腿!!!");
}
  1. 语法格式2
if(布尔表达式){
    // 语句1

}else{
    // 语句2

}

如果布尔表达式结果为true,则执行if中语句,否则执行else中语句。
比如:小明,如果这次考到90分以上,给你奖励一个大鸡腿,否则奖你一个大嘴巴子。

int score = 92;

if(score >= 90){
    System.out.println("吃个大鸡腿!!!");
}else{
    System.out.println("挨大嘴巴子!!!");
}
  1. 语法格式3
if(布尔表达式1){
    // 语句1

}else if(布尔表达式2){
    // 语句2

}else{
    // 语句3

}

表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3

比如:考虑到学生自尊,不公开分数排名,因此:

  • 分数在 [90, 100] 之间的,为优秀
  • 分数在 [80, 90) 之前的,为良好
  • 分数在 [70, 80) 之间的,为中等
  • 分数在 [60, 70) 之间的,为及格
  • 分数在 [ 0, 60) 之间的,为不及格
  • 错误数据

按照上述办法通知学生成绩。

if(score >= 90){
    System.out.println("优秀");
}else if(score >= 80 && score < 90){
    System.out.println("良好");
}else if(score >= 70 && score < 80){
    System.out.println("中等");
}else if(score >= 60 && score < 70){
    System.out.println("及格");
}else if(score >= 0 && score < 60){
    System.out.println("不及格");
}else{
    System.out.println("错误数据");
}

【练习】

  1. 判断一个数字是奇数还是偶数
public static void main(String[] args) {
        int num = 10;
        if(num % 2 == 0) {
            System.out.println("偶数!");
        }else {
            System.out.println("奇数!");
        }
    }
  1. 判断一个数字是正数,负数,还是零
int num = 10;

if (num > 0) {
        System.out.println("正数");
        } else if (num < 0) {
        System.out.println("负数");
        } else {
        System.out.println("0");
        }
  1. 判断一个年份是否为闰年
int year = 2000;

        if (year % 100 == 0) {
            // 判定世纪闰年

            if (year % 400 == 0) {
                System.out.println("是闰年");
            } else {
                System.out.println("不是闰年");
            }
        } else {
            // 普通闰年

            if (year % 4 == 0) {
                System.out.println("是闰年");
            } else {
                System.out.println("不是闰年");
            }
        }

【注意事项】
代码风格

// 风格1-----> 推荐

int x = 10;

if (x == 10) {
    // 语句1

} else {
    // 语句2

}
 

// 风格2

int x = 10;

if (x == 10)
{
    // 语句1

}

else

{
    // 语句2

}

虽然两种方式都是合法的, 但是 Java 中更推荐使用风格1, { 放在 if / else 同一行. 代码跟紧凑。
分号问题

int x = 20;

if (x == 10); 
{
    System.out.println("hehe");
}
 

// 运行结果

hehe

此处多写了一个 分号, 导致分号成为了 if 语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块.
悬垂 else 问题

int x = 10;

int y = 10;

if (x == 10) 
 if (y == 10)
 System.out.println("aaa");

else 
 System.out.println("bbb");

if / else 语句中可以不加 大括号 . 但是也可以写语句(只能写一条语句). 此时 else 是和最接近的 if 匹配.

但是实际开发中我们 不建议 这么写. 最好加上大括号.

2.2 switch 语句

基本语法

switch(表达式){
            case 常量值1:{
                语句1;
                [break;]
            }
            case 常量值2:{
                语句2;
                [break;]
            }
            ...
            default:{
                内容都不满足时执行语句;
                [break;]
            }
        }

执行流程:

  1. 先计算表达式的值

  2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束

  3. 当表达式的值没有与所列项匹配时,执行default

代码示例: 根据 day 的值输出星期

//不能做switch参数的数据类型有哪些? 基本数据类型当中:float  double  long
int day = 1;

switch(day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三");
        break;
    case 4:
        System.out.println("星期四");
        break;
    case 5:
        System.out.println("星期五");
        break;
    case 6:
        System.out.println("星期六");
        break;
    case 7:
        System.out.println("星期日");
        break;
    default:
        System.out.println("输入有误");
        break;
}

【注意事项】

  • 多个case后的常量值不可以重复

  • switch的括号内只能是以下类型的表达式:
    基本类型:byte、char、short、int,注意不能是long类型
    引用类型:String常量串、枚举类型

double num = 1.0;
break 不要遗漏, 否则会失去 "多分支选择" 的效果

 
switch 不能表达复杂的条件

 
switch 虽然支持嵌套, 但是很丑,一般不推荐~

 
switch(num) {
    case 1.0:
        System.out.println("hehe");
        break;
    case 2.0:
        System.out.println("haha");
        break;
}
 

// 编译出错

Test.java:4: 错误: 不兼容的类型:double转换到int可能会有损失

                switch(num) {
                      ^

1 个错误

break 不要遗漏, 否则会失去 “多分支选择” 的效果

int day = 1;

switch(day) {
    case 1:
        System.out.println("星期一");
        // break;

    case 2:
        System.out.println("星期二");
        break;
}
 

// 运行结果

星期一
星期二

switch 不能表达复杂的条件

// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. 

if (num > 10 && num < 20) {
 System.out.println("hehe");
}

switch 虽然支持嵌套, 但是很丑,一般不推荐~

int x = 1;

int y = 1;

switch(x) {
    case 1:
        switch(y) {
            case 1:
                System.out.println("hehe");
                break;
       }
break;
    case 2:
        System.out.println("haha");
        break;
}

代码的美观程度也是一个重要的标准. 毕竟这是看脸的世界.
综上, 我们发现, switch 的使用局限性是比较大的

3. 循环结构

3.1 while 循环

基本语法格式:

while(循环条件){
 循环语句;
}

循环条件为 true, 则执行循环语句; 否则结束循环.

代码示例1: 打印 1 - 10 的数字

int num = 1;

while (num <= 10) {
    System.out.println(num);
    num++;
}

代码示例2: 计算 1 - 100 的和

int n = 1;

int result = 0;

while (n <= 100) {
    result += n;
 n++;
}

System.out.println(num);
 

// 执行结果

5050

代码示例3: 计算 5 的阶乘

int n = 1;

int result = 1;

while (n <= 5) {
    result *= n;
 n++;
}

System.out.println(num);
 

// 执行结果

120

代码示例4: 计算 1! + 2! + 3! + 4! + 5!

int num = 1;

int sum = 0;

// 外层循环负责求阶乘的和

while (num <= 5) {
    int factorResult = 1;
    int tmp = 1;
    // 里层循环负责完成求阶乘的细节. 

    while (tmp <= num) {
        factorResult *= tmp;
        tmp++;
   }
    sum += factorResult;
    num++;
}

System.out.println("sum = " + sum);

这里我们发现, 当一个代码中带有多重循环的时候, 代码的复杂程度就大大提高了. 而比较复杂的代码就更容易出错.

后面我们会采用更简单的办法来解决这个问题.

注意事项

  1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
  2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.
  3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.
int num = 1;

while (num <= 10); {
    System.out.println(num);
    num++;
}
 

// 执行结果

[无任何输出, 程序死循环]

此时 ; 为 while 的语句体(这是一个空语句), 实际的 { } 部分和循环无关. 此时循环条件 num <= 10 恒成立, 导致代码死循环了.

3.2 break

break 的功能是让循环提前结束.

代码示例: 找到 100 - 200 中第一个 3 的倍数

int num = 100;

while (num <= 200) {
    if (num % 3 == 0) {
        System.out.println("找到了 3 的倍数, 为:" + num);
        break;
   }
    num++;
}
 

// 执行结果

找到了 3 的倍数,:102

执行到 break 就会让循环结束.

3.3 continue

continue 的功能是跳过这次循环, 立即进入下次循环.

代码示例: 找到 100 - 200 中所有 3 的倍数

int num = 100;

while (num <= 200) {
    if (num % 3 != 0) {
        num++;  // 这里的 ++ 不要忘记! 否则会死循环. 

        continue;
   }
    System.out.println("找到了 3 的倍数, 为:" + num);
    num++;
}

代码示例: 求100-200之间 既能被3整除 也能被4整除的数字 要求:使用continue

int i = 100;
        while (i <= 200) {
            if(i % 12 != 0) {
                i++;
                continue;
            }
            System.out.println(i);
            i++;
        }

执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句.

3.4 for 循环

【基本语法】

for(表达式①;布尔表达式②;表达式③){
 表达式④;
}
  • 表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
  • 表达式2: 循环条件,满则循环继续,否则循环结束
  • 表达式3: 循环变量更新方式

【执行过程】
①②③④—>②③④—>②③④—>②③④—>②③④—>②③④—>…—>②为false,循环结束。
【Java入门】长达近万字来讲解逻辑控制

【代码示例】

  1. 打印 1 - 10 的数字
for (int i = 1; i <= 10; i++) {
    System.out.println(i);
}
  1. 计算 1 - 100 的和
int sum = 0;

for (int i = 1; i <= 100; i++) {
    sum += i;
}

System.out.println("sum = " + sum);
 

// 执行结果

5050
  1. 计算 5 的阶乘
int result = 1;

for (int i = 1; i <= 5; i++) {
    result *= i;
}

System.out.println("result = " + result);
  1. 计算 1! + 2! + 3! + 4! + 5!
int sum = 0;

for (int i = 1; i <= 5; i++) {
    int tmp = 1;
    for (int j = 1; j <= i; j++) {
        tmp *= j;
   }
    sum += tmp;
}

System.out.println("sum = " + sum);

【注意事项】 (和while循环类似)

  1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
  2. 和 if 类似, for 后面的 { 建议和 while 写在同一行.
  3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行.
  4. 和while循环一样,结束单趟循环用continue,结束整个循环用break

3.5 do while 循环(选学)

【基本语法】

do{
 循环语句;
}while(循环条件);

先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束。
例如:打印 1 - 10

int num = 1;

do {
    System.out.println(num);
    num++;
} while (num <= 10);

【注意事项】

  1. do while 循环最后的分号不要忘记

  2. 一般 do while 很少用到, 更推荐使用 for 和 while.

4. 输入输出

4.1 输出到控制台

基本语法

System.out.println(msg);            // 输出一个字符串, 带换行

System.out.print(msg);              // 输出一个字符串, 不带换行

System.out.printf(format, msg);     // 格式化输出

println 输出的内容自带 \n, print 不带 \n

printf 的格式化输出方式和 C 语言的 printf 是基本一致的.

代码示例

System.out.println("hello world");
 

int x = 10;

System.out.printf("x = %d\n", x)

格式化字符串
【Java入门】长达近万字来讲解逻辑控制
这个表格没必要记住, 用到的时候根据需要查一下就行了.

4.2 从键盘输入

使用 Scanner 读取字符串/整数/浮点数

import java.util.Scanner;  // 需要导入 util 包

 

Scanner sc = new Scanner(System.in);

System.out.println("请输入你的姓名:");

String name = sc.nextLine();
//nextLine 读入一行  next是遇到空格结束!
System.out.println("请输入你的年龄:");

int age = sc.nextInt();
//读入一个int类型的整数
System.out.println("请输入你的工资:");

float salary = sc.nextFloat();

System.out.println("你的信息如下:");

System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);

sc.close(); // 注意, 要记得调用关闭方法

 

// 执行结果

请输入你的姓名:
张三
请输入你的年龄:

18

请输入你的工资:

1000

你的信息如下:
姓名: 张三
年龄:18

工资:1000.0

使用 Scanner 循环读取 N 个数字,并求取其平均值

Scanner sc = new Scanner(System.in);

int sum = 0;

int num = 0;

while (sc.hasNextInt()) {
    int tmp = sc.nextInt();
    sum += tmp;
    num++;
}

System.out.println("sum = " + sum);

System.out.println("avg = " + sum / num);

sc.close();
 

// 执行结果

10
40.0
50.5

^Z
sum = 150.5

avg = 30.1

注意事项:
当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl+ d).

在后续oj题当中,遇到IO类型的算法题,有各种循环输入的要求,后序给大家介绍。

5. 猜数字游戏

游戏规则:

系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 “低了”, 如果输入的数字比该随机数大, 提示 “高了” , 如果输入的数字和随机数相等, 则提示 “猜对了” .

参考代码

//需要用到两个包!!
import java.util.Random;
import java.util.Scanner;
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        int randNum = random.nextInt(101);//[0,101)
        //50-100的随机数   random.nextInt(50)--[0,50)  + 50;
        while (true) {
            System.out.println("请输入你要猜的数字:");
            int num = scanner.nextInt();
            if(num < randNum) {
                System.out.println("猜小了!");
            }else if(num == randNum) {
                System.out.println("猜对了!");
                break;
            }else {
                System.out.println("猜大了!");
            }
        }
    }

如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。文章来源地址https://www.toymoban.com/news/detail-468896.html

到了这里,关于【Java入门】长达近万字来讲解逻辑控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java贪心算法逻辑讲解及代码详解

    贪心算法是一种自顶向下的算法思想,它通过局部最优的选择来实现全局最优的解决方案。贪心算法的底层逻辑和代码实现如下: 确定问题的贪心策略:贪心策略是指在每个阶段选择最优解,从而实现全局最优解。 将问题转换为贪心算法可解决的形式:将问题描述转化为一

    2024年02月07日
    浏览(37)
  • JMeter —— 3万字讲解让测试彻底臣服的基于 Java 之强大测试工具

    目录 一. 前言 二. JMeter 下载与安装 2.1. JMeter 下载 2.2. JMeter 安装 二. TestPlan 和线程组 三. JMeter 接口测试 四. JMeter 断言实现 4.1. 什么是断言 4.2. 断言的实现 4.2.1. 响应断言 4.2.2. JSON 断言 4.2.3. BeanShell 断言 4.2.4. 大小断言 4.2.5. 断言持续时间 五. JMeter BeanShell 断言 5.1. BeanS

    2024年01月22日
    浏览(43)
  • 万字长文讲解调用第三方接口,RestTemplate,urlConnection使用详解,java代码模拟postman发送请求

    业务场景 :在日常开发中,经常需要调用第三方接口,例如调用物流接口,此时需要利用urlConnection或者restTemplate模拟postman发送请求,请求支持加header ,设置content-type支持传递json;请求方式get,post,也可以需要传递文件,或者传递文件流; 下面这个例子就包含日常开发中大

    2024年02月05日
    浏览(63)
  • Java入门高频考查基础知识9(银盛15问万字参考答案)

    JAVA刷题专栏: 目录 一、Springcloud的工作原理 三、注册中心心跳是几秒 四、消费者是如何发现服务提供者的 五、多个消费者调⽤用同⼀接口,eruka默认的分配⽅式是什么 六、springboot常用注解,及其实现 七、spring的事务注解是什么?什么情况下事物才会回滚 八、spring事物的

    2024年02月20日
    浏览(55)
  • Java入门篇 之 逻辑控制

    博主的文章希望对大家有所帮助 今日份励志文案: 凌空虚度,难成千秋伟业;求真务实,方能善作善成 冲冲冲!!!!! 目录 一.if~else语句  1.1.if-else语句基本用法: 1.2.代码演示  二.switch~case语句  2.1 switch~case语句基本用法: 2.2.代码演示 ​编辑三.while语句 3.1while语句基本

    2024年02月07日
    浏览(37)
  • Java入门高频考查基础知识2(超详细28题2.5万字答案)

    Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。          以下是 Java 基础知识的一个概览:     1. 语法和基本概念: Java 的语法类似于 C++

    2024年01月19日
    浏览(41)
  • Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)

    Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。          以下是几个面试技巧:    1. 复习核心概念: 回顾 Java 的核心概念,如面向对象编

    2024年01月18日
    浏览(54)
  • Java入门篇 之 逻辑控制(练习题篇)

    博主碎碎念: 练习题是需要大家自己打的请在自己尝试后再看答案哦; 个人认为,只要自己努力在将来的某一天一定会看到回报,在看这篇博客的你,不就是在努力吗,所以啊,不要放弃,路上必定坎坷,但是成功后放眼望去,这将是青春很浓重的一笔 今日份励志文案 :若结

    2024年02月06日
    浏览(38)
  • 万字长文讲透 RocketMQ 4.X 消费逻辑

    RocketMQ 是笔者非常喜欢的消息队列,4.9.X 版本是目前使用最广泛的版本,但它的消费逻辑相对较重,很多同学学习起来没有头绪。 这篇文章,笔者梳理了 RocketMQ 的消费逻辑,希望对大家有所启发。 在展开集群消费逻辑细节前,我们先对 RocketMQ 4.X 架构做一个概览。 整体架构

    2024年02月08日
    浏览(32)
  • C++之继承详解(万字讲解)

    今天我们要讲述C++内更重要的一部分知识——继承,对于面向对象的一门语言来说,这部分知识特别重要,同时其中也会有非常多的细节,难度也是不小的,但是它是我们必须要翻越的一座大山,到底什么是继承呢?一起来看看吧。 继承 (inheritance)机制是面向对象程序设计 使

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包