Java基础(4)——逻辑控制 分支,循环,try

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


在这里插入图片描述

一、条件分支

1.单分支选择if…else

在这里插入图片描述

@Override
public void deleteById(String id) {
    // id 为null 和 ""
    if (Objects.isNull(id) || "".equals(id)) {
        System.out.println("401异常,id为空...");
        return;
    }
    Older newOlder = new Older();
    newOlder.setId(id);
    boolean removeFlag = list.remove(newOlder); // 根据对象删除,返回True和false
    if (!removeFlag) {
        System.out.println("402异常,未找到该对象,删除失败...");
    } else {
        System.out.println("成功删除编号为" + id + "的老人信息");
    }
}

2.多分支选择if…else if…else

@Override
public void sortByAge(String order) {
    // 对老人的年龄进行排序
    if (order.equals("order")) {// 从小到达
        Collections.sort(list, (o1, o2) -> o1.getAge() - o2.getAge());
    } else if (order.equals("reverse")) { // 从大到小
        Collections.sort(list, (o1, o2) -> o2.getAge() - o1.getAge());
    } else {
        System.out.println("404异常,请输入order或reverse,分别对应顺序和逆序");
    }
}

3.开关语句switch…case

表达式的类型

  • long,float,double,boolean不可放
  • byte,short,int,char,String,枚举 可以

Switch case的穿透:如果没有写break,程序会接着往下走

// 总结:switch中的条件不能放。long,float,double,boolean;
byte a = 10;
short b = 10;
int c = 10;
long d = 10; //不可以
char ch = 'A'; //本质存的是数字65
float e = 1.2F; // 不可以
double f = 1.2; // 不可以
boolean flag = true; // 特殊,不可放
double g = 1e3; // 科学技术法 1.0\*10的3次方,默认是double类型的

ID自增长方法

public class IdGenerator {
    public static int idd = 0;

    /\*\*
 \* 根据idd的位数自动生成id
 \* @return older的id
 \*/
    public static String generate(){
        idd++;
        String idStr = idd + "";
        int idStrLength = idStr.length();
        switch (idStrLength){
            case 1:
                return StaticValue.W\_PROFIX + "000" + idStr;
            case 2:
                return StaticValue.W\_PROFIX + "00" + idStr;
            case 3:
                return StaticValue.W\_PROFIX + "0" + idStr;
            default:
                return StaticValue.W\_PROFIX + idStr;
        }
    }
}

二、循环分支

作用:循环的作用:减少代码的冗余,提高代码重用性

1.while:

先判断后循环,使用循环次数不确定的情况

// 迭代器的方式【安全删除List的元素】
Older findOlder = null;
Iterator<Older> it = list.iterator();
while (it.hasNext()) {
    Older older = it.next();
    if (id.equals(older.getId())) {
        findOlder = older;
        break;
    }
}

2.do-while

冷门循环,先执行1次再判断

3.重点:for循环

for (int i = 0; i < 10; i++) {}

简化:for each

Older findOlder = null;
for (Older older: list) {
    if(id.equals(older.getId())){
        findOlder = older;
        break;
    }
}

语法:变形语法forEach

list.forEach(System.out::println);

三、异常try…catch

捕获异常的作用:

  • 1.当程序异常时,可以根据异常的类型做出不同的处理;
  • 2.保证程序在处理完异常后可以继续执行后面的程序,而不是中断程序;

产生 :Scanner使用时产生;
解决:异常处理机制——异常捕获
try {
// 可能会出现异常的代码
}

在这里插入图片描述

四、逻辑控制词

  • break 跳出循环 跳出当前的for循环,距离最近的一层循环
  • return 直接把方法停止
  • continue 结束本次循环,进入下次循环,不会执行continue下面的代码
// 1.电梯有18层,只能停10层一下的楼层(10层以上楼层不可达)
int i = 1;
for( ;i <= 18;i++) {
   if(i % 2 == 0) {
       continue; // 结束本次循环,进入下次循环,不会执行continue下面的代码
	}
	System.out.println("电梯停在了"+i+"层");
}

如何交换两个变量的数据

// 面试点:如何交换两个变量的数据
int x = 10;
int y = 20;
int temp = x; //声明第三个变量存放任意一个变量值;

System.out.println("x=" + x + ",y=" + y);
x = y;
y = temp;
System.out.println("交换后的x=" + x + ",y=" + y);

五、递归:自己调用自己

典型案例:求阶乘

/\*\* 用递归的方式
 \* 6! = 6\*5! = 6\*5\*4\*3\*2\*1
 \* 6 \* jiecheng2(5)
 \* 5 \* jiecheng2(4)
 \* ...
 \* 2 \* jiecheng2(1)
 \* return 1; 递归结束的条件
 \*/
public static long jiecheng2(int num) {
	if(num == 1 || num == 0) { // 0和1的阶乘都为1
		return 1;
	}else if (num < 0){
		System.out.println("错误的输入");
		return (Long) null;
	}
	return num \* jiecheng2(num-1);
}


在这里插入图片描述

六、案例

1.手机号格式判断

  • 号码的位数为1880222959,11位,开头为18;
  • String.valueOf(任意类型) 将任意类型转换成字符串
  • str.startsWith(“18”) 字符串以18开头
  • str.endsWith(“18”) 以18结尾

import java.util.Scanner;
import java.util.InputMismatchException;

// 输入手机号码,判断手机号码是否正确
/\*
 \* 号码的位数为18802229401,11位,开头为18;
 \* String.valueOf(任意类型) 将任意类型转换成字符串
 \* str.startsWith("18") 字符串以18开头
 \* str.endsWith("18") 以18结尾
 \*/
public class Test5 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in); // 扫描输入
		System.out.println("请输入一个手机号码");
		long num = 0; // 变量赋初值
		while(true) {
			// 用try catch 捕获处理异常
			try {
				num = scanner.nextLong();
// String strnum = num + ""; // 任意类型转换成字符串;
				String strnum = String.valueOf(num);
				int length = strnum.length(); // 手机号码的长度
				if(length==11 && strnum.startsWith("18")) {
					System.out.println("手机号码正确,跳出循环");
					break;
				}else { // 手机号位数不正确
					throw new IllegalArgumentException("手机号码位数不正确,请重新输入");
				}
			}catch(InputMismatchException e) {
				// 手机号格式错误
				System.out.println("手机号必须是数字,请重新输入");
				scanner.next(); // 阻塞,此处将键盘的输入传递到scanner.nextLong()
			}catch(IllegalArgumentException e) {
				System.out.println(e.getMessage());
				
			}
		}
		System.out.println("循环之外的代码");
		scanner.close(); // 关闭扫描
	}
}


2.输入字母,大小写;输入字符,字母数字中文?

import java.util.Scanner;

public class Test6 {
	public static void main(String[] args) {
		// 1.键盘输入一个字母,判断是大写字母还是小写字母;
		Scanner scanner = new Scanner(System.in);
		String str1 = scanner.nextLine();
		char ch1 = str1.charAt(0); // 取输入的第一个字符
		if(ch1 >= 'a' && ch1 <= 'z') {
			System.out.println("您输入的"+ ch1 +"是小写");
		}else if(ch1 >= 'A' && ch1 <= 'Z') {
			System.out.println("您输入的"+ ch1 +"是大写");
		}else {
			System.out.println("输入的"+ ch1 +"不是字母");
		}
		
		// 2.键盘输入一个字符,判断是字母,数字,还是中文字符?
		String str = scanner.nextLine();
		char ch = str.charAt(0); // 取输入的第一个字符
		if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') {
			System.out.println("输入的是字母");
		}else if(ch >= '0' && ch <= '9') {
			System.out.println("输入的是数字");
		}else if(ch >= '\u4E00' && ch <= '\u9FA5') { // 常用汉字范围4E00-9FA5
			System.out.println("输入的是汉字");
		}else {
			System.out.println("输入其他字符");
		}
		scanner.close();
	}
}

3.键盘输入年、月、日,判断输入的日期是当前这一年的第几天

巧妙使用switch的穿透

public class Test9 {
	public static void main(String[] args) {
		// 经典题:键盘输入年、月、日,判断输入的日期是当前这一年的第几天
		int year = 2020;
		int month = 7;
		int day = 22;
		
		int num = 0; // 一年中的第几天
		switch(month) {
		case 12:
			num = num + 31;			


![img](https://img-blog.csdnimg.cn/img_convert/2119923e6575b6f180ba2bdcc5eb2daf.png)
![img](https://img-blog.csdnimg.cn/img_convert/449321d0c1e7f48635fd0c6137d19cb5.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

 7;
		int day = 22;
		
		int num = 0; // 一年中的第几天
		switch(month) {
		case 12:
			num = num + 31;			


[外链图片转存中...(img-hJN84QPJ-1715789665229)]
[外链图片转存中...(img-uxfKvd5f-1715789665229)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值