算法
之前学408都有学过,温故而知新吧=.=
冒泡排序
两两交换比大小,每轮确定一个最值
java
public static void MaoPaosort(int[] a){
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
简单选择排序
每轮选择一个位置,将该位置上的数与后面待排序的所有数中最小的交换
java
public static void SelectSort(int[] a){
for(int i=0;i<a.length-1;i++){
int minIndex = i; //记录最小值下标
for(int j=i+1;j<a.length;j++){
if(a[minIndex]>a[j]){
minIndex = j;
}
}
//当minIndex改变时,进行交换
if (i!=minIndex) {
int temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;
}
}
}
折半查找
要求:查找对象必须有序
将找的数据与最中间的数进行比较,如果小就舍弃最中间右边的数,去找另一半,以此类推
java提供的方法:Arrays.binarySearch(数组 , 查找的数)
java
public static int ZhebanSearch(int[] a, int x){
int low = 0, high = a.length-1;
while(low<=high){
int mid = (low+high)/2;
if(x>a[mid]){
low = mid + 1;
}else if(x<a[mid]){
high = mid - 1;
}else{
return mid;
}
}
return -1;
}
总之,查找与排序还有很多算法,等到时候刷题再复习408笔记
正则表达式

优势
++案例需求++:QQ号判定 --> 不以0开头、满足6-20的长度、全为数字
若不使用正则表达式,使用正常的方法判断QQ号是否合法,方法如下:

使用正则表达式:

太爽了!
书写规则
注意:为什么 \d 要写出 \\d ---> 因为单个 \ 是转义字符,比如 \n \t 都有对应的作用,因此想要书写 \d 必须使用 \ 修饰 \ ,java才能得知输入的是 \ 而是不是转义字符, 才能正确输入\\d
因此,如果需要 . 就要数如输入 \\. 否则java会理解为任意字符
案例1:检验数据是否合法
输入的电话、邮箱、时间是否正确
电话:

邮箱:

时间:

案例2:爬取信息
爬取信息:在一段文本中查找满足要求的内容
整体流程:
- 定义爬取规则 --> 写正则表达式
- 把正则表达式封装成Pattern对象,以便后续的匹配器调用
- 通过Pattern对象得到匹配器
- 通过匹配器查找信息

案例3:搜索替换、分割内容

示例:
- :出现一次或多次
1、替换

2、替换扩展

理解:

3、分割字符串

异常
异常就是程序出现的问题

异常的体系

如果报的是编译时异常,不对其进行处理,程序是无法继续运行下去的
自定义异常

自定义运行时异常
定义一个异常类继承RuntimeException,重写构造器,其中generate的构造器先选前两个,后面的之后学

自定义编译时异常
写法几乎一样,就是extend Exception,如下图,上为运行时异常,下为编译时异常

由于使用的是编译时异常,因此写出来就会报错,如下左图,需要对方法内部报错部分 ++alt+回车++ 抛出异常,将异常抛给上层,即main函数,此时就能实现编译时异常了,如下右图
<====>
补充
throw:用在方法内部,抛出异常对象
throws:用在方法上,将异常抛给上层调用者
两个异常方法都可行,如果觉得问题比较严重,需要马上提醒编程时的程序员,就使用++编译时异常++ ;否则就使用++运行时异常++
异常处理方式
代码层面异常处理方式
抛出异常(throws)

在出现异常的地方按 alt+回车,如下图,选择 Add... 就可以将异常将异常抛出了,不会在管这个地方,可以正常运行

选择add...后,会在main后面多出一个 throws XXX

捕获异常(try...catch)

选中要捕获异常的代码段,按住 ctrl+alt+t,现在try...catch,如下图,就可以捕获异常

这样就能抓住异常信息并打印出来
实际开发中异常处理方式
底层的都往外送,最外层捕获处理

1、捕获异常,记录异常并响应合适的信息给用户


另一种写法:不具体某种异常,而是直接抛出异常,可以直接得知有异常,但不知道异常具体在哪,对比如下图
2、捕获异常,尝试修复
案例:输入合适价格时,若输出入的是字符串,则会直接报错,程序就崩了

此时就可以采用捕获异常的方法解决该问题,如下图,此时若是输入了字符串,则会被catch,然后执行catch中的代码段,这样程序就不会崩了
注意:上图中打印的一片红色的报错是代码 e.printStackTrace(); 的执行结果,而下图catch中没有 e.printStackTrace(); ,因此也不会出现一片红
