【JAVA】逻辑控制

【JAVA】逻辑控制,第1张

逻辑控制
  • 回顾复习
  • 逻辑控制
  • 一、顺序结构
  • 二、分支结构
    • 1. if语句
      • 【注意事项】:
      • 【补充】
    • 2. switch语句
      • 【注意事项】
  • 三、循环结构
    • 1. while循环
      • 【注意事项】
    • 2. break语句
    • 3. continue语句
    • 4. for循环
      • 【注意事项】
    • 5. do while 循环(选学)
  • 四. 输入输出
    • 1. 输出到控制台
    • 2. 从键盘输入
  • 六、猜数字游戏
    • 1. 随机数生成
    • 2. 代码
  • 七、练习
  • THINK


回顾复习

努力学习 一步一步来!
运算符
如:&& || >>>(无符号右移:左边的统统补0)-没有无符号左移


努力终会有收获的!

逻辑控制

逻辑控制有三种结构:顺序、选择、循环结构。

一、顺序结构
  1. 顺序结构比较简单,按照代码书写的顺序一行一行执行。
  2. 如果调整代码的书写顺序, 则执行顺序也发生变化。
二、分支结构 1. if语句
  1. 单分支语句
    注意:if的参数一定是布尔表达式!!

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

  1. 双分支语句

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

  1. 多分支语句

if(布尔表达式1) {
// 语句1
} else if(布尔表达式2) {
// 语句2
} else {
// 语句3
}
//注意else if 以及ellse等的位置

  1. 补充:

补充输入语句:
import java.util.Scanner; // 导包,类似于c语言的#
include
Scanner scanner(scanner 是变量名,小驼峰-可自己命名) = new Scanner(System.in); //–代表从键盘获取;
int a = scaner.nextInt(); --读入一个int类型数据

  • 补充: next();读入小数 or字符串不含空格
    nextLine(); //读入一行,含有空格

补充循环输入–while(scanner.hasNextInt())
ctrl + D --退出循环

  1. 例题:判断一个年份是否为闰年
【注意事项】:
  1. 代码风格:
    任何情况下都不要省略{}!!
// 风格1-----> 推荐 
int x = 10; 
if (x == 10) { 
// 语句1 
} else { 
// 语句2 
}

// 风格2
int x = 10; 
if (x == 10) { 
// 语句1 
}else {
 // 语句2
  }

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

  1. 分号问题:分号代表着一条语句
int x = 20; 
if (x == 10); 
{
 System.out.println("hehe"); 
 }
 // 运行结果 hehe

此处多写了一个 分号(if后面), 导致分号成为了 if 语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块

  1. 悬垂 else 问题
    else 是和最接近的 if 匹配
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 匹配.
但是实际开发中我们 不建议 这么写,最好加上大括号.

【补充】
  1. 局部变量存放到栈中,栈中的地址是拿不到的
  2. 调试:
    1)打断点 – 调试
    (条件断点–右击设置)

2)所有变量都会自动显示至variables
3)功能介绍


2. switch语句
  1. 基本语法:
    (case 常量值:–冒号不能丢!!)
switch(表达式){
case 常量值1:{
语句1; 
[break;]
}
case 常量值2:{
语句2; 
[break;]
}
default:{
内容都不满足时执行语句; 
[break;]
} 
}
  1. 遇到break才结束执行!!
  2. 注意:
    break不省略!!!
    建议default放到最后!
  3. 面试问题:

不能做switch的参数的类型: long float double boolean
补:字符串以及枚举(1.5之后版本才有)都可以、byte 、char、short、int可以作为参数

  1. case 后面内容跟switch参数形式保持一致
  2. 执行流程:

1) 先计算表达式的值
2) 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
3)当表达式的值没有与所列项匹配时,执行default

【注意事项】
  1. 多个case后的常量值不可以重复
  2. switch的括号内只能是以下类型的表达式:
    基本类型:byte、char、short、int,注意不能是long类型
    引用类型:String常量串、枚举类型
  3. break 不要遗漏, 否则会失去 “多分支选择” 的效果(即:会一直向下运行,直至遇到break或者程序结束)
  4. switch 不能表达复杂的条件,if可以表达复杂的条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe 
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. 
if (num > 10 && num < 20) { 
System.out.println("hehe"); 
}
  1. switch 虽然支持嵌套, 但是很丑,一般不推荐~
  2. 综上, switch 的使用局限性是比较大的。
三、循环结构

三种循环结构:while、for、do…while

1. while循环
  1. 基本语法:
    (注意:条件一定是布尔表达式!!)
while(布尔表达式){ 
循环语句; 
}
  1. 例题:计算1-100奇数(Eve)和 and 偶数(Odd)和
  • 两种方法:偶数加和 or +=2 --注意i重新赋值!!
  • 代码:
import org.w3c.dom.ls.LSOutput;

/**
 * 计算1-100奇数(Eve)和 and 偶数(Odd)和
 */

public class Sum {
    public static void main(String[] args) {
        int i = 1;
        int eveSum =0;
        int oddSum =0;
        int sum =0;
        while(i <= 100) {
            eveSum += i;
            i += 2;
        }
        i = 0; //注意重新赋值
        while(i <= 100) {
            oddSum += i;
            i += 2;
        }
        i = 0;
        while(i <= 100) {
            sum += i;
            i ++;
        }
        System.out.println("1-100奇数(Eve)和"+eveSum);
        System.out.println("1-100偶数(Odd)和"+oddSum);
        System.out.println("1-100和"+sum);
    }
}
  • 结果:
  • 例题:计算 1! + 2! + 3! + … +n!
  • 代码:
import java.util.Scanner;

/**
 * 计算 1! + 2! + 3! + ... +n!
 */

public class Fib {
    public static void main(String[] args) {
        System.out.println("请输入n:");
        Scanner reader = new Scanner(System.in);
        int n = reader.nextInt();
        int i = 1;
        int sum =0;
        int fib = 1;
        while(i <= n) {
            fib *= i;
            sum += fib;
            i++;
        }
        System.out.println(n+"阶乘和:");
        System.out.println(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 恒成立, 导致代码死循环了.

2. break语句

功能:提前结束所有循环,即退出当前的整个循环

3. continue语句
  • 功能:结束本趟循环,即:后面的代码不执行,开
    始下一次循环
  • 例题:
    1-100之间所有既是3的倍数又是5的倍数的所有数据【continue】实现
  • 代码:
    方法一:
/**
 * 1-100之间所有既是3的倍数又是5的倍数的所有数据【continue】实现
 */

public class Find {
    public static void main(String[] args) {
        int i =0;
        System.out.println("1-100之间所有既是3的倍数又是5的倍数的所有数据:");
        while(i < 100) {
            i++;
            if((0 == i % 3) && (0 == i % 5)) {
                System.out.print(i + " ");
                continue;
            }
        }
    }
}

方法二:(注意 逻辑或)

/**
 * 1-100之间所有既是3的倍数又是5的倍数的所有数据【continue】实现
 */

public class Find {
    public static void main(String[] args) {
        int i =0;
        System.out.println("1-100之间所有既是3的倍数又是5的倍数的所有数据:");
        while(i < 100) {
            i++;
            if(( i % 3 != 0) || (i % 5 != 0)) {
                continue;
            }
            System.out.print(i + " ");
        }
    }
}
  • 结果:
4. for循环
  1. 基本语法:
    (表达式2是布尔表达式!)
for(表达式①;布尔表达式②;表达式③){ 
表达式④; //结构体 
}
  • 表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
  • 表达式2:循环条件,满则循环继续,否则循环结束
  • 表达式3: 循环变量更新方式
  1. 执行流程:

  2. 所有题目都可以用for循环

  3. 例题:计算 1! + 2! + 3! + … + n!

  • 代码:
import java.util.Scanner;

/**
 * 计算 1! + 2! + 3! + ... + n!
 * for循环实现
 */

public class FibSum {
    public static void main(String[] args) {
        System.out.println("请输入n:");
        Scanner reader = new Scanner(System.in);
        int n = reader.nextInt();
        int sum =0;
        int fib = 1;
        for(int i =1; i <= n; i++) {
            fib *= i;
            sum += fib;
        }
        System.out.println(n+"阶乘和:");
        System.out.println(sum);
    }
}
  • 结果:
【注意事项】

(和while循环类似)

  1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
  2. 和 if 类似, for 后面的 { 建议和 while 写在同一行.
  3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行.
  4. 和while循环一样,结束单趟循环用continue,结束整个循环用break
5. do while 循环(选学)
  1. 基本语法:
    (注:while后面有;)
do{
循环语句; 
}while(循环条件);
  1. 不管满不满足条件,先执行一次
  2. 【注意事项】
  • do while 循环最后的分号不要忘记
  • 一般 do while 很少用到, 更推荐使用 for 和 while.
  1. 补充:死循环

while(true)
for( ; ; ) or for(;true ; )

四. 输入输出 1. 输出到控制台
  1. 基本语法:
System.out.println(msg); // 输出一个字符串, 带换行 System.out.print(msg); // 输出一个字符串, 不带换行 System.out.printf(format, msg); // 格式化输出
  1. 注意:

println 输出的内容自带 \n, print 不带 \n
printf 的格式化输出方式和 C 语言的 printf 是基本一致的.

  1. 格式化字符串

    (这个表格没必要记住, 用到的时候根据需要查一下就行了)
2. 从键盘输入

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

  1. 示例如下:
import java.util.Scanner; // 需要导入 util 包 
Scanner sc = new Scanner(System.in); System.out.println("请输入你的姓名:"); 
String name = sc.nextLine(); 
System.out.println("请输入你的年龄:"); 
int age = sc.nextInt(); 
System.out.println("请输入你的工资:"); 
float salary = sc.nextFloat(); 
System.out.println("你的信息如下:"); System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary); 
sc.close(); // 注意, 要记得调用关闭方法
  1. 相关与区分
    (Scanner reader = new Scanner(System.in)😉
  • String name = reader.nextLine();
    //读入一行数据,只能有String接收,默认是字符串(包含空格)
  • 区分:String name = reader.next();
    // 遇到空格就停止读入,读取接收
  • hasNext(); // 判断是否有输入
  • hasNextInt(); // 判断是否有整型数据输入
  1. 输入类型不匹配问题

  2. 如果先输入年龄,会发现姓名不能输入就会被跳过–回车被读到了姓名里

    所以:先输入字符串,再输入整数等

  3. 尽量做到两者对应

  4. 循环结束问题
    当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl+ d)

六、猜数字游戏

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

1. 随机数生成
  1. Random :左闭右开
    所以注意括号内的参数!!
    如:Random random = new Random();
    int ranNum = random.nextInt(51)+50; //代表[50,101),即50-100
  • 该种随机数是根据时间戳来生成的,则可以根据时
    间来让随机数保持不变
    如:Random random = new Random(20220426);
    //会一直生成同一个随机数

  • 根据时间戳生成的随机数是伪随机

  • 如果int ranNum = random.nextInt(); 没有参数的取值范围?
    -不带参数的nextInt()会生成所有有效的整数(包含正数,负数,0)

  1. double rand = Math.random();
    注意返回值类型是double
  • 查一下如何生成随机数
    -Math.random() 生成的是[0, 1)之间的伪随机数。注意左闭右开
2. 代码

1) 直到猜对为止(无次数限制)

import java.util.Random;
import java.util.Scanner;

public class GuessNum {
    // 直到猜对为止
    public static void main(String[] args) {
        Random random = new Random();
        int ranNum = random.nextInt(100) + 1;  //[0,100) --> [1,101)
        Scanner reader = new Scanner(System.in);
        while(true) { //注意布尔表达式条件
            System.out.println("请输入您的猜测:");
            int input = reader.nextInt();
            if(input < ranNum) {
                System.out.println("低了");
            } else if(input == ranNum) {
                System.out.println("猜对了");
                break;
            } else {
                System.out.println("高了");
            }
        }
    }
}

2) 次数限制

import java.util.Random;
import java.util.Scanner;

public class GuessNum {
    // 次数限制
    public static void main(String[] args) {
        int count = 3;
        Random random = new Random();
        int ranNum = random.nextInt(100) + 1;  //[0,100) --> [1,101)
        Scanner reader = new Scanner(System.in);
        while(count > 0) { //注意布尔表达式条件
            System.out.println("请输入您的猜测:");
            int input = reader.nextInt();
            if(input < ranNum) {
                System.out.println("低了");
            } else if(input == ranNum) {
                System.out.println("猜对了");
                break;
            } else {
                System.out.println("高了");
            }
            count--;
        }
        if(count == 0) {
            System.out.println("次数限制 退出游戏");
            System.out.println("正确答案是:"+ranNum);
        }
    }
 }      
七、练习

见下一节博客

THINK

逻辑控制符–主要了解三种结构:

  • 顺序结构–按照代码顺序执行
  • 循环结构–for、while、 do…while
  • 条件结构-- 单分支、双分支、多分支 if、switch

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/790425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存