程序逻辑控制【JavaSE】

简介: 程序逻辑控制【JavaSE】

1. 顺序结构

语句顺序决定了执行顺序

例:

public class TestDemo {
    public static void main(String[] args) {
        System.out.println("1");
        System.out.println("2");
        System.out.println("3");
    }
}

2. 分支结构

2.1 if语句

同C语言,区别在于Java的条件判断都是布尔表达式,且左括号要在上一行

语法结构1

单分支

if(布尔表达式){
//条件满足则执行语句
}

语法结构2

双分支

if(布尔表达式1){
//条件满足则执行语句1
}else{
//条件满足则执行语句1
}

语法结构3

多分支

if(布尔表达式1){
//条件满足则执行语句1
}else if(布尔表达式2){
//条件满足则执行语句2
}else{
//条件都不满足则执行语句3
}

2.1.1 例

判断闰年:

普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。

世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。(百度百科)

判断闰年我们再熟悉不过,以此例感受逻辑控制的重要性

  1. 这是一个分支结构的逻辑,所以我们要找到不同的分支,它们之间必须有关系.例如普通闰年不是一百的倍数,世纪闰年是整百数.这是第一层分支.
  2. 在不是整百数的分支判断4的倍数
  3. 在是整百数的分支判断400的倍数
int year = 2000;
if(year % 100 == 0){
    if(year % 4 == 0){
        System.out.println(year+"是闰年");
    }else{
        System.out.println(year+"不是闰年");
    }
}else{
    if(year % 400 == 0){
        System.out.println(year+"是闰年");
    }else{
        System.out.println(year+"不是闰年");
    }
}

结果:2000是闰年

  • 这样写虽然逻辑清晰,但代码有些冗余,可以利用逻辑运算符(&&、||)短路的特性将分支连接.但要注意顺序.
int year = 2005;
if( (year % 100 != 0 && year % 4 == 0) || year % 400 == 0){
    System.out.println(year+"是闰年");
}else{
    System.out.println(year+"不是闰年");
}

这里将第一层分支(year % 100 != 0)作为&&的前件,它为ture时则进入第一个分支,否则进入第二个分支.这是逻辑控制的妙处.

2.1.2 注意事项

  1. 不论分支内要执行的语句有多少句,即使只有一句也要加上括号
  2. 代码风格:虽然C的传统写法在Java中是合法的,但依然建议左括号要紧跟在if/else if 后面.
  3. 条件判断后不要加‘;‘ ,它是语句执行结束的标志

注:代码好坏与否首先取决于它的可读性(代码风格、注释等),其次才是代码效率

2.2 switch语句

语法格式

switch(整数|枚举|字符|字符串){
case 内容1 : {
//内容满足时执行语句;
break;
}
case 内容2 : {
//内容满足时执行语句;
break;
}
...
default:{
//内容都不满足时执行语句;
break;
}
}

switch语句用法大致同C语言,但switch入口只能是整数、枚举、字符、字符串.注意事项也是相同的.

  • 每个switch最好都要有一个default出口
  • 每个分支最好都要有break
  • 不能表达类似区间不等式这样的复杂条件(if语句可以轻松完成),所以switch使用频率比较低
  • 尽量不要嵌套,因为比较难读懂(可读性)

注:Java的枚举需要学完反射、类和对象、继承之后才会学习,是比C复杂的存在.

switch的局限性这么多,还是老老实实用if语句吧.

3. 循环结构

3.1 while循环

基本语法

while(循环条件){
      循环语句
}
  • 循环条件是布尔表达式

例1:打印9~1

int n = 10;
while(n != 0){
    System.out.println(n);
    n--;
}
  • 不能像C语言一样,循环条件写成while(n)

例2:计算5的阶乘

int n = 5;
int ret = 1;
while(n != 0){
    ret *= n;
    n--;
}
System.out.println(ret);

结果:120

例3:计算1!+2!+3!+4!+5!

int n = 1;
int ret = 1;
int num = 0;
while(n <= 5){
    int m = 1;
    ret = 1;
    while(m <= n){
        ret *= m;
        m++;
    }
    num += ret;
    n++;
}

结果:153

计算阶乘的题我们再熟悉不过,这里是为了使结构更清晰:一层计算阶乘,一层累加.实际上它们可以在同一层循环内,降低时间复杂度

  • 注意事项与if语句相同

3.2 for循环

for循环和while循环完全等价,区别就是它们的起始条件和计数器的位置不一样.

语法结构

for(表达式1;表达式2;表达式3){
循环体;
}
  • 表达式1:循环初始条件
  • 表达式2:循环条件
  • 计数器(更新循环变量)

例1:打印1~9

for (int i = 1; i < 10; i++) {
            System.out.println(i);
}

例2:计算5的阶乘

int ret = 1;
for (int i = 1; i <= 5 ; i++) {
    ret *= i;
}
System.out.println(ret);

结果:120

例3:计算1!+2!+3!+4!+5!

int ret = 1;
int num = 0;
for (int i = 1; i <= 5 ; i++) {
    ret = 1;
    for (int j = 1; j <= i ; j++) {
        ret *= j;
    }
    num += ret;
}
System.out.println(num);

结果:153

  • 注意事项同if语句

3.3 break

作用:结束最近的一层循环

例:找到1~10中第一个3的倍数的数字

for (int i = 1; i <= 10 ; i++) {
    if(i % 3 == 0){
        System.out.println(i);
        break;
    }
}

结果:3

当符合条件,直接终止当层循环.break多用于循环语句中,switch也可以

3.4 continue

作用:跳过最近的这层循环的当次循环,继续下一次循环

例:找到1~10中所有是3的倍数的数字

for (int i = 1; i < 10 ; i++) {
    if(i % 3 != 0){
        continue;
    }else{
        System.out.println(i);
    }
}

结果:3 6 9

当符合条件,跳过当前循环,直接开始下一次循环

do…while循环

do{
执行语句;
}while(表达式);

例:打印1~9

int i = 0;
do{
    i++;
    System.out.println(i);
}while(i <= 8);
  • 不要漏掉最后的分号
  • 循环体至少执行一次(注意例中的条件)

4. 输入输出

4.1 输出到控制台

System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出
  • printlen自动换行;print不换行
  • printf用法和C语言相同

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

结果:

hello world

helloworld

4.2 从键盘输入

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

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(); // 注意, 要记得调用关闭方法
  • sc.close();类似C语言的fclose()函数

使用 Scanner 循环读取 N 个数字

Scanner sc = new Scanner(System.in);
double sum = 0.0;
int num = 0;
while (sc.hasNextDouble()) {
double tmp = sc.nextDouble();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
  • 要终止输入多个数据,用ctrl+z(win)/crtl+d(Linux/mac)

键入:

10

40.0

50.5

^Z(键入结束)

结果:

sum = 150.5

avg = 30.1


日志

5/1/2022
目录
相关文章
【javaSE】 程序逻辑控制练习代码
【javaSE】 程序逻辑控制练习代码
|
Java
java的逻辑控制1
java的逻辑控制
49 0
|
6月前
|
Java Linux C语言
一步带你了解java程序逻辑控制
一步带你了解java程序逻辑控制
46 2
Java-逻辑控制(上)
Java-逻辑控制(上)
65 0
|
Java Linux C语言
Java逻辑控制
Java逻辑控制
70 0
【javaSE】 程序逻辑控制(一)
【javaSE】 程序逻辑控制(一)
|
Java Linux C语言
【javaSE】 程序逻辑控制(二)
【javaSE】 程序逻辑控制(二)
《JavaSE-第四章》之程序逻辑控制
《JavaSE-第四章》之程序逻辑控制
|
Java C语言 C++
教你精通JavaSE语法之第四章、逻辑控制
顺序结构、选择结构、循环结构知识点的提取,适用于有C基础和初学Java的同学复习和学习。
111 0
|
Java 数据安全/隐私保护 C语言
Java程序逻辑控制
Java程序逻辑控制
58 0