文章目录
前言
异常是在程序中导致程序中断运行的一种指令流
一、异常处理
1、try…catch关键字
2、throws
3、throw
4、finally
在进行异常的处理之后,在异常的处理格式中还有一个finally语句,那么此语句将作为异常的统一出口,不管是否产生了异常都会执行这段代码。如果在执行时使用了exit时会终止finally的执行,要注意是在使用了类来引用时,就要分析其具体的情况了
二、异常体系结构
1、异常分类
2、RuntimeExcepion与Exception的区别
RuntimeException出现时不需要使用try…catch处理;其余的都要。
三、快递驿站
1、视图框
static Scanner input = new Scanner(System.in);
/**
* 主菜单
* 用于显示使用人
* @return
*/
public int menu(){
System.out.println("请按照提示进行操作");
System.out.println("使用人: 1、快递员 2、用户 3、退出");
String person = input.nextLine();
int num = -1;
try {
num = Integer.parseInt(person);
}catch (NumberFormatException e){
}
if(num>3 || num<1){
System.out.println("您的输入有误");
menu();
}
return num;
}
/*
* 快递员菜单
*1、存储 2、删除 3、修改 4、显示 5、返回主菜单
* */
public int eMenu() {
System.out.println("请按照提示进行操作");
System.out.println("使用操作: 1、存储 2、删除 3、修改 4、显示 5、返回主菜单");
String opera = input.nextLine();
int num = -1;
try {
num = Integer.parseInt(opera);
}catch (NumberFormatException e){
}
if(num>5 || num<1){
System.out.println("您的输入有误");
eMenu();
}
return num;
}
/*
* 欢迎
* */
public void start(){
System.out.println("欢迎您使用本快递驿站");
}
/*
* 结束
* */
public void stop(){
System.out.println("期待您的下次使用");
}
/*
* 存储快递
* 按照提示进行使用
* */
public Express store(){
Express q = new Express();
System.out.println("请按照提示进行输入");
System.out.println("请输入单号");
String number = input.nextLine();
q.setNumbers(number);
System.out.println("请输入公司");
String company = input.nextLine();
q.setCompany(company);
return q;
}
/*
* 打印当前的快递信息
* */
public void printNowMessage(Express q){
System.out.println("快递单号: "+q.getNumbers()+" 快递公司:"+q.getCompany()+" 取件码:"+q.getCodes());
}
/*
* 查找单号
* */
public String findByNumber(){
System.out.println("请按照提示进行输入");
System.out.println("请输入要操作的单号");
String number = input.nextLine();
return number;
}
/*
* 删除快递
* */
public int delete(){
System.out.println("您确认要删除吗? 1、确认 2、取消");
String opera = input.nextLine();
int num = -1;
try {
num = Integer.parseInt(opera);
}catch (NumberFormatException e){
}
if(num>2 || num<1){
System.out.println("您的输入有误");
eMenu();
}
return num;
}
/*
*
* 修改快递信息
* */
public void change(Express q){
System.out.println("请输入新的单号");
String number = input.nextLine();
q.setNumbers(number);
System.out.println("请输入新的公司");
String company = input.nextLine();
q.setCompany(company);
}
/*
*
* 打印所有的快递信息
* */
public void printAll(Express[][] q){
if(q == null || q.length==0){
System.out.println("暂无快递");
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if(q[i][j] != null) {
System.out.println("第" + i + "行,第" + j + "列");
printNowMessage(q[i][j]);
}
}
}
}
/*
* 用户取件
* */
public int uTake(){
System.out.println("请输入取件码");
String code = input.nextLine();
int num = -1;
try {
num = Integer.parseInt(code);
}catch (NumberFormatException e){
}
if(num>999999 || num<100000){
System.out.println("您的输入有误");
return uTake();
}
return num;
}
public void returnMean(){
System.out.println("返回主菜单");
}
public void success(){
System.out.println("操作成功");
}
public void falseMessage(){
System.out.println("柜里无该快递");
}
public void Message(){
System.out.println("柜里该快递已存在");
}
}
2、运算框
public class GetData {
private static Express [][] data = new Express[10][10];
/**
* 存快递
* 随机生成下标
* 然后把数给添加到二维数组中
* 生成随机码
*/
static Random random = new Random();
public void store(Express q){
int i = -1;
int j = -1;
while (true){
i = random.nextInt(10);//随机生成下标0-10
j = random.nextInt(10);//用Math.random去生成也行
if(data[i][j] == null){//如果柜子是空的就可以存进去
break;//结束本次循环
}
}
q.setCodes(codes());//设置取件码
data[i][j] = q;//把目标放入柜子中
}
//生成随机码
public static int codes(){
int codes = -1;
while (true){
codes = (random.nextInt(899999)+100000);
if(findByCodes(codes) == null){//判断柜子里是否存在该取件码
break;//结束本次循环
}
}
return codes;//生成不重复的取件码
}
//删除快递
//通过遍历来删除
public void delete(Express number){
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (number.equals(data[i][j])) {
data[i][j] =null;
return;
}
}
}
}
//改变快递信息
public void change(Express old,Express news){
delete(old);
store(news);
}
//打印所有快递信息
public Express[][] printAll(Express q){
return data;
}
public void uTake(Express codes){
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (codes.equals(data[i][j])) {
data[i][j] =null;
return;
}
}
}
}
//通过单号去查找 快递是否存在
//注意在比较时,要通过Express里定义的equals去比较
//并且equals的方法在一个程序中只能使用一次
public static Express findByNumbers(String numbers) {
Express q = new Express();
q.setNumbers(numbers);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (q.equals(data[i][j])) {
return data[i][j];
}
}
}
return null;
}
//通过取件码去查找快递是否存在
public static Express findByCodes(int codes) {
//Express q = new Express();
//q.setCodes(codes);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
//if()
if (data[i][j]!= null&&data[i][j].getCodes() == codes) {
return data[i][j];
}
}
}
return null;
}
}
3、个人信息框
public class Express {
public Express(){}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Express express = (Express) o;
return Objects.equals(numbers, express.numbers);
}
@Override
public int hashCode() {
return Objects.hash(numbers);
}
@Override
public String toString() {
return "Express{" +
"numbers='" + numbers + '\'' +
", company='" + company + '\'' +
", codes=" + codes +
'}';
}
public String getNumbers() {
return numbers;
}
public void setNumbers(String numbers) {
this.numbers = numbers;
}
public int getCodes() {
return codes;
}
public void setCodes(int codes) {
this.codes = codes;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
private String numbers;
private String company;
private int codes;
}
4、主菜单
public class Express {
public Express(){}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Express express = (Express) o;
return Objects.equals(numbers, express.numbers);
}
@Override
public int hashCode() {
return Objects.hash(numbers);
}
@Override
public String toString() {
return "Express{" +
"numbers='" + numbers + '\'' +
", company='" + company + '\'' +
", codes=" + codes +
'}';
}
public String getNumbers() {
return numbers;
}
public void setNumbers(String numbers) {
this.numbers = numbers;
}
public int getCodes() {
return codes;
}
public void setCodes(int codes) {
this.codes = codes;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
private String numbers;
private String company;
private int codes;
}