Java入门级每日总结(4):程序的逻辑控制(顺序、分支、循环)、输入输出、label语句跳出双层循环。

目录

1.顺序结构

2.分支结构

2.1 if 语句

2.2 switch 语句

3. 循环结构

3.1 while 循环

3.2 break

3.3 continue

3.4 for 循环

3.5 do while 循环

3.6 label语句跳出双层循环

4. 输入输出

4.1 输出到控制台

4.2 从键盘输入


1.顺序结构

        单线程下按照代码的书写顺序向下执行

System.out.println("1");
System.out.println("2");
System.out.println("3");
// 运行结果
1
2
3

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

System.out.println("2");
System.out.println("1");
System.out.println("3");
// 运行结果
2
1
3

        多线程下主线程、子线程谁先执行不一定

System.out.println( "1" );
Thread thread = new Thread(() -> system.out.println("2" ));    //创建子线程
thread.start();
System.out.println( "3" );
//输出结果
1
3
2

2.分支结构

2.1 if 语句

        基本语法形式1

if(布尔表达式){
    //条件满足时执行代码
}

        基本语法形式2

if(布尔表达式){
    //条件满足时执行代码
}else{
    //条件不满足时执行代码
}

//代码示例1: 判定一个数字是奇数还是偶数
int num = 10;
if (num % 2 == 0) {
    System.out.println("num 是偶数");
} else {
    System.out.println("num 是奇数");
}
//输出结果
num 是偶数

        基本语法形式3——多分支的情况

if(布尔表达式){
    //条件满足时执行代码
}else if(布尔表达式){
    //条件满足时执行代码
}else{
    //条件都不满足时执行代码
}

//代码示例2: 判断一个数是正数、负数还是0
int num = 10;
if (num > 0) {
    System.out.println("num 是正数");
} else if (num < 0) {
    System.out.println("num 是负数");
} else {
    System.out.println("num 是 0");
}
//输出结果
num 是正数

        注意事项1 悬垂 else 问题

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

//输出结果
aaa

//相当于
int x = 10;
int y = 10;
if (x == 10) {
    if (y == 10) {
        System.out.println("aaa");
    } else {                        //else中没有执行
        System.out.println("bbb");
    }
}

        if / else 语句中可以不加大括号 。但是也可以写语句(只能写一条语句),此时 else 是和最接近的 if 匹配。
        但是实际开发中不建议这么写,最好加上大括号。

        注意事项2 分号问题

int x = 20;
if (x == 10); {
    System.out.println("123");
}
// 运行结果
123

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

2.2 switch 语句

        基本语法形式

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

        根据 switch 中值的不同, 会执行对应的 case 语句。遇到 break 就会结束该 case 语句。如果 switch 中的值没有匹配的 case,就会执行 default 中的语句。建议 switch 语句最好带上default。

        注意事项1 break 不要遗漏, 否则会失去 "多分支选择" 的效果。

int day = 1;
switch(day) {
    case 1:
        System.out.println("星期一");
    case 2:
        System.out.println("星期二");
        break;
}

// 运行结果
星期一
星期二

        不写 break 的时候, case 语句会依次向下执行, 从而失去了多分支的效果。

        注意事项2 switch 中的值只能是 整数|枚举|字符|字符串,其余类型不兼容。

        注意事项3 switch 支持嵌套, 但是很难看

int x = 1;
int y = 1;
switch(x) {
    case 1:
        switch(y) {
            case 1:
                System.out.println("123");
                break;        //跳出内层
        }
        break;                //跳出外层
    case 2:
        System.out.println("789");
        break;
}
//输出结果
123

        综上,switch 的使用局限性是比较大的。

3. 循环结构

3.1 while 循环

        基本语法格式

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

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

//代码示例1: 打印 1 - 10 的数字
int num = 1;
while (num <= 10) {
    System.out.print(num + " ");
    num++;
}
//输出结果
1 2 3 4 5 6 7 8 9 10 
//代码示例2: 计算 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);
//输出结果
sum = 153

        注意事项
        1. while 下面的语句可以不写 { },但是不写的时候只能支持一条语句。 建议加上 { }。
        2. while 后面的 { 建议和 while 写在同一行。
        3. while 后面不要多写 分号, 否则可能导致循环不能正确执行。

int i = 1;
while (i <= 5); {
    System.out.println(i);
    i++;
}
// 执行结果
[无任何输出, 程序死循环]

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

3.2 break

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

//代码示例: 找到 100 - 200 中第一个 7 的倍数
int num = 100;
while (num <= 200) {
    if (num % 7 == 0) {
        System.out.println("找到了 7 的倍数, 为:" + num);
        break;        //跳出循环
    }
    num++;
}
// 执行结果
找到了 7 的倍数, 为:105

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++;
}

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

3.4 for 循环

        基本语法

for(表达式1;表达式2;表达式3){
    循环体;
}

        表达式1: 用于初始化循环变量。

        表达式2: 循环条件。

        表达式3: 更新循环变量。

        相比于 while 循环,for 循环将这三个部分合并在一起,写代码时不容易遗漏。

//代码示例1: 计算 1 - 10 的和
int sum = 0;
for (int i = 1; i <= 10; i++) {
    sum += i;
}
System.out.println("sum = " + sum);
// 执行结果
sum = 55

         注意事项
        1. for 下面的语句可以不写 { } ,但是不写的时候只能支持一条语句。建议还是加上 { }。
        2. for 后面的 { 建议和 while 写在同一行。
        3. for 后面不要多写 分号, 否则可能导致循环不能正确执行。

3.5 do while 循环

        基本语法

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

        先执行循环语句,再判定循环条件。

//代码示例: 打印 1 - 10
int num = 1;
do {
    System.out.print(num + " ");
    num++;
} while (num <= 10);
//输出结果
1 2 3 4 5 6 7 8 9 10 

        注意事项
        1. do while 循环最后的分号不要忘记。
        2. 一般 do while 很少用到,更推荐使用 for 和 while。

3.6 label语句跳出双层循环

        需要跳出本次循环的同时跳出外层循环。
        break label的使用

int num = 100;
label:
while (num <= 200) {
    int a = 1;
    while (a <= 10) {
          if (a % 3 == 0) {
                //直接跳出两次循环
                System.out.println(a);
                break label;
          }
          a++;
    }
}
System.out.println("两次循环都终止了");
//输出结果
3
两次循环都终止了

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 num = 10;
System.out.printf("num = %d\n", num);
//输出结果
Hello World
num = 10

        格式化字符串

转换符类型举例
d十进制整数("%d", 100)100
x十六进制整数("%x", 100)64
o八进制整数("%o", 100)144
f定点浮点数("%f", 100f)100.000000
e指数浮点数("%e", 100f)1.000000e+02
g通用浮点数("%g", 100f)100.000
a十六进制浮点数("%a", 100)0x1.9p6
s字符串("%s", 100)100
c字符("%c", ‘1’)1
b布尔值("%b", 100)true
h散列码("%h", 100)64
%百分号("%.2f%%", 2/7f)0.29%

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();         // 注意, 要记得调用关闭方法
// 执行结果
请输入你的姓名:
李四
请输入你的年龄:
22
请输入你的工资:
3000
你的信息如下:
姓名: 李四
年龄:22
工资:3000.0

        使用 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();
//输出结果
1
2
3
4
5
^D
sum = 15.0
avg = 3.0

        注意事项

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

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瘦皮猴117

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值