Java笔记04——逻辑控制

目录

本章要点:

1. 顺序结构

2. 分支结构

2.1 if 语句

2.2 switch 语句

3. 循环结构

3.1 while 循环

3.2 break

3.3 continue

3.4 for 循环

4. 输入输出

4.1 输出到控制台

4.2 从键盘输入

4.3 读取数据 格式 案例:


本章要点:

1. Java中程序的逻辑控制语句

2. Java中的输入输出方式

1. 顺序结构

      顺序结构比较简单. 像我们之前写过的代码就是顺序结构的, 按照代码书写的顺序一行一行执行.

代码示例:

System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 运行结果
aaa
bbb
ccc


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

2. 分支结构

2.1 if 语句

        基本语法形式1

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

   

     基本语法形式2

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

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

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

注释:else 最好都放在上一个判断语句的 大括号 后面,让代码容易阅读。

类型区别:

代码示例1: 判定一个数字是奇数还是偶数

int num = 10;
if (num % 2 == 0) {
    System.out.println("num 是偶数");
} else {
    System.out.println("num 是奇数");
}

代码示例2: 判定一个数字是正数还是负数

int num = 10;
if (num > 0) {
    System.out.println("num 是正数");
} else if (num < 0) {
    System.out.println("num 是负数");
} else {
    System.out.println("num 是 0");
}

代码示例3: 判定某一年份是否是闰年

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:  悬垂 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 代码风格问题

// 风格1
int x = 10;
if (x == 10) {
    // 满足条件
} else {
    // 不满足条件
}
// 风格2
int x = 10;
if (x == 10)
{
    // 满足条件
}
else
{
    // 不满足条件
}

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

注意事项3 分号问题

选择语句只执行后面的一条语句,如果你不小心加上了 分好 ; 可能会导致语句的不执行或者 死循环。

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

// 运行结果
无~

2.2 switch 语句

基本语法 

 提醒:下面的整数只包括比 int 范围 小的整形如:byte 、 short。(long不行)

原因:是因为 byte、short在存储的时候都会转为 int

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

案例1:

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

执行结果:

根据 switch 中值的不同, 会执行对应的 case 语句. 遇到 break 就会结束该 case 语句.

如果 switch 中的值没有匹配的 case, 就会执行 default 中的语句.

我们建议一个 switch 语句最好都要带上 default.

 注意事项:

1.如果没有 break ,case 语句会依次向下执行, 不会停止,从而失去了多分支的效果.

2. switch 中的值只能是 整数|枚举|字符|字符串

3. case 相当于 入口  break 相当于 出口

4. switch 不能表达复杂的条件

5. 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 rep = 1;
        int sum = 0;
        while(num <= 5) {

            rep *= num;//每循环一次 就是 对应的 阶层
            sum += rep;

            num++;
        }
        System.out.println(sum);//结果是 153

注意事项

1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }

2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.

3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.

int num = 1;

while (num <= 10); {

System.out.println(num); num++;

}

// 执行结果 [无任何输出, 程序死循环]

案例: 死循环,红色块

3.2 break

break 的功能是让循环提前结束,不在执行(break只能跳出自己当前的循环).

案例:虽然有break跳出,但两层 while 嵌套就不能 完全跳出去

解决方法:  就可以跳出相应的 循环了 需要我们在前面先 设定好。

break baa;跳出之后就来到了上面 baa:下方的代码去了

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 循环将这三个部分合并在一起, 写代码时不容易遗漏

for循环 快捷键: fori

对前面一个 改动 后面两个 也会一起改变。

输入完第一个, 按 Tal 键 后调到后面

4. 输入输出

4.1 输出到控制台

基本语法

System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出

println 输出的内容自带 \n,(最好!因为它可以接受任何参数,包括引用类型。)推荐使用

print 不带 \n

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

格式化字符串:出自 java核心卷 I

4.2 从键盘输入

读入一个字符 

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

需要引入头文件:

import java.util.Scanner;

创建:

Scanner inn = new Scanner(System.in);

使用:(拿整形举例

d = inn.nextInt();

解释: 创建里面的 inn 是变量名字可以所以取名,其他都是格式

d = (之前创建输入函数名字) + .next +(输入的类型)

整形就是:Int

双浮点型: Doublie

注释:类型开头要大写!

java一些框架的读音: 

 Scanner sc = new Scanner(System.in);

这条语句中的 sc 是 自定义 名字 可以随意定义。

new Scanner(System.in); 内容是固定的(暂时)。

案例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(); // 注意, 要记得调用关闭方法
// 执行结果
请输入你的姓名:
张三
请输入你的年龄:
18 
请输入你的工资:
1000 
你的信息如下:
姓名: 张三
年龄:18 
工资:1000.0

案例2:使用 Scanner 循环读取 N 个数字

说明:直到输入的数值 不是整形 才停止 循环

 sc.hasNexthasNextInt() :一直读取到不是整数才停止读取。

 sc.hasNextDouble() 当它还有 浮点数做输入的时候,就继续读取。

//需要导入包 import java.util.Scanner; // 需要导入 util 包
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(); 
// 执行结果
10 
40.0 
50.5 
a 
sum = 150.5 
avg = 30.1 

4.3 读取数据 格式 案例:

• Scanner (InputStream in)
    用给定的输人流创建一个 Scanner 对象。

• String nextLine( )
    读取输入的下一行内容。

• String next( )
    读取输入的下一个单词(以空格作为分隔符。)

• int nextlnt( )
    读取并转换下一个表示整数的字符序列。

• double nextDouble( )
    读取并转换下一个表示浮点数的字符序列。

• boolean hasNext( )
    检测输人中是否还有其他单词。

• boolean hasNextInt( )
• boolean hasNextDouble( )
检测是否还有表示整数或浮点数的下一个字符序列。

特殊的读取格式: 单独读取一个 字符

   在java里面没有为单独读取一个字符而设定格式。

实现单独读取一个字符有两种方法,但核心思想都是:

先读取一个字符串,再在字符串中拿取第一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值