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