三、if分支结构

1.代码运行常见结构:

顺序结构、分支结构、循环结构

2.java分支结构

if

if (/* 条件判断 */) {
    // 语句体
}
/*
执行流程:
	当前程序运行到if结构时,首先执行条件判断,条件判断的结果是一个boolean类型,如果条件判断为true,执行语句体,为false,不能执行语句体。
	最后都会执行到大括号之外
*/
public class TestIf {
    public static void main(String[] args) {
        int money = 10;
        System.out.println("拿10块钱去买东西");
        if(money >= 5){
            System.out.println("花了5块");
            money -= 5;
            System.out.println("余额:" + money);
        }
        System.out.println("if语句执行完毕!");
    }
}
/*
1. 判断一个字符是不是大写英文字母
*/
public class TestIf2 {
    public static void main(String[] args) {
        char ch = '好';
        if(ch >= 'A' && ch <= 'Z'){
            System.out.println("这是个大写英文字符");
        }
        System.out.println("if执行完毕");
    }
}
/*
2. 判断一个字符是不是英文字符
*/
public class TestIf3 {
    public static void main(String[] args) {
        char ch = 'b';
        if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
            System.out.println("这是个英文字符");
        }

        System.out.println("if执行完毕");

    }
}
/*
3. 判断一个年份是不是闰年
	能被4整除但是不能被100整除,或者能被400整除
*/
public class TestIf4 {
    public static void main(String[] args) {
        int year = 2000;

        if((year % 4 == 0 && year % 100 != 0) || (year % 400 ==0)){
            System.out.println("这是个闰年");
        }
        System.out.println("if执行完毕");

    }
}

if else

if else分支结构。
*/
if (/* 条件判断 */) {
    // true语句体
} else {
    // false语句体
}
/*
"二选一"
执行流程:
	代码执行到if else结构运行,首先判断if之后的条件判断,如果条件判断为true,执行true语句体,如果条件判断为false,执行false语句体。
*/
/*
1. 工资判断
	月收入5000以上缴税
	月收入5000以下不需要缴税
*/
public class TestIfElse {
    public static void main(String[] args) {
        double salary = 4000;
        if(salary > 5000){
            System.out.println("需要缴税");
        }else{
            System.out.println("不需要缴税");
        }
    }
}
/*
2. 是否有女朋友
	有 true
	没有 false
*/
public class TestIfElse2 {
    public static void main(String[] args) {
        boolean hasGirlFriend = false;
        if(hasGirlFriend){
            System.out.println("Yes");
        }else{
            System.out.println("No");
        }
    }
}

if else if

if (/* 条件匹配1 */) {
    // 处理方式1
} else if (/* 条件匹配2 */) {
    // 处理方式2
} else if (/* 条件匹配3 */) {
    // 处理方式3
} else {
    // 无匹配项最终处理方式
}
/*
“多选一”
执行流程:
	代码执行到if else if结构,从上至下,匹配if之后小括号里面的内容,条件匹配成功,执行对应的处理方式,结束分支结构运行。如果没有任何的一个条件匹配,执行else中的语句,也会终止条件匹配

【注意】
	else if个数不限制,可以有多个!!!
*/
/*
用户购物VIP等级
	100 ~ 1000 铜牌会员
	1001 ~ 5000 银牌会员
	5001 ~ 10000 金牌牌会员
	10001 ~ 50000 钻石会员
	50001  黑钻会员
*/
public class TestIfElseIf {
    public static void main(String[] args) {
        int money = 200000;

        if(money >= 100 && money <= 1000){
            System.out.println("铜牌会员");
        }else if(money <= 5000 && money >1000){
            System.out.println("银牌会员");
        }else if(money <= 10000 && money > 5000){
            System.out.println("金牌会员");
        }else if(money <= 50000 && money > 10000){
            System.out.println("钻石");
        }else if(money > 50000){
            System.out.println("王者");
        }else{
            System.out.println("啥都不是");
        }
    }
}
/*
学生成绩的等级划分:
*/
public class TestIfElseIf2 {
    public static void main(String[] args) {
        float score = 80F;

        if (score >= 90 && score <= 100) {
            System.out.println("优秀");
        } else if (score >= 80) {
            System.out.println("良");
        } else if (score >= 70) {
            System.out.println("中");
        } else if (score >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
    }
}

3.Scanner类

一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。
继承关系:java.lang.Object--->java.util.Scanner
实现的接口:Closeable、AutoCloseable、Iterator<String>
声明:public final class Scanner extends Object implements Iterator<String>, Closeable

构造方法

Scanner(File source) 产生从指定文件扫描的值
Scanner(File source, String charsetName) 产生从指定文件扫描的值,定义编码
Scanner(InputStream source) 产生从指定输入流扫描的值
Scanner(InputStream source, String charsetName) 产生从指定输入流扫描的值,定义编码
Scanner(Path source) 产生从指定文件扫描的值
Scanner(Path source, String charsetName)
Scanner(Readable source) 产生从指定源扫描的值
Scanner(ReadableByteChannel source) 产生从指定通道扫描的值
Scanner(ReadableByteChannel source, String charsetName)
Scanner(String source) 产生从指定字符串扫描的值

常用方法

返回值类型 方法名 描述
String next() 查找并返回此扫描仪的下一个完整令牌
char nextLine().charAt(0) 获取第一个字符
boolean nextBoolean() 将输入的下一个标记扫描为布尔值,并返回该值
byte nextByte() 将输入的下一个标记扫描为 byte
short nextShort() 将输入的下一个标记扫描为 short
int nextInt() 将输入的下一个标记扫描为 int
long nextLong() 将输入的下一个标记扫描为 long
float nextFloat() 将输入的下一个标记扫描为 float
double nextDouble() 将输入的下一个标记扫描为 double
import java.util.Scanner;

public class TestScanner {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in); //扫描仪对象

        System.out.println("输入整数:");
        int i = input.nextInt();
        System.out.println(i);

        System.out.println("输入浮点数:");
        double d = input.nextDouble();
        System.out.println(d);

        System.out.println("输入字符串:");
        String s = input.next();
        System.out.println(s);
    }
}
注意:
在获取键盘输入时常常用到Scanner,但在连续使用Scanner的过程中会发生缓冲区不空,从而不会阻塞的问题。

System.out.print("请输入用户名:");
String userName=sc.nextLine();
System.out.print("请输入密码:");
String password=sc.nextLine();

在上面的例子中就会出现在"请输入用户名:"处不发生阻塞,直接连续输出"请输入用户名:""请输入密码:"。在键入数据后只会获取第一个输入,并且赋给password,相当于把用户名赋给了密码
import java.util.Scanner;

//	c. 用户输入一个【整数】,判断当前用户的游戏段位是什么
//            【考虑用户输入合法性问题】
//            小于等于1000,青桐
//            1000 - 1200 白银
//            1200 - 1400 黄金
//            1400 - 1600 白金
//            1600 - 1800 钻石
//            1800 - 2000 大师
//            2000以上 王者
public class TestScanner2 {
    public static void main(String[] args) {
        System.out.println("输入王者段位(整数):");
        while (true) {
            try {
                Scanner input = new Scanner(System.in); //初级实现,每次循环新建对象,过于耗费内存
                int i = input.nextInt();
                if(i <= 1000){
                    System.out.println("青铜");
                }else if(i <= 2000 && i >=1200){
                    System.out.println("白银");
                }else if(i <= 2000 && i > 1200){
                    System.out.println("黄金、铂金、钻石");
                }else{
                    System.out.println("荣耀王者");
                }
                break;
            } catch (Exception e) {
                System.out.println("请输入整数(范围:-2^31~2^31-1):");
                continue;
              }
        }
    }
}
posted @ 2020-04-17 00:08  jacob_code  阅读(179)  评论(0)    收藏  举报