【java】初识catch-try-finally:模拟借书系统
2017-03-28 14:50
232 查看
慕课网-java入门第三季
——第一章 异常与异常处理
a.虚拟机错误(VirtualMachineError)
b.线程死锁(ThreadDeath)
(2)Exception(编码、环境、用户操作输入出现的问题):
a.非检查异常(RuntimeException):
空指针异常(NullPointerException)
数组下标越界异常(ArrayIndexOutOfBoundsException)
类型转换异常(ClassCastException)
算术异常(ArithmeticException)
b.检查异常(CheckException):
文件异常(IOException)
SQL异常(SQL Exception)
结构图:
1.定义字符串数组保存图书信息;
2.提示用户输入,分别按“书名”和“图书序号”查找图书;
3.根据输入信息进行适当的异常处理:
(1)如果输入类型错误,抛出“错误命令异常”,并提示重新输入;
(2)如果书名不存在,抛出“图书不存在异常”,并提示重新输入;
(3)如果图书序号超过字符传数组范围,抛出“图书不存在异常”,并提示重新输入。
经过多次调试发现上述代码有问题,如每次输入选项(ch)为2,接下来再输入选项(ch)为1,发现存储shuming的String直接赋为0,跳过判断:
是因为nextLine会接收‘\n’换行符,和nextDouble,nextInt等一起使用的时候会接收到上一个输入的换行符,于是需要在第25行、第43行处加上语句s.nextLine(); 。
——第一章 异常与异常处理
Throwable:
(1)Error(出现则程序瘫痪)a.虚拟机错误(VirtualMachineError)
b.线程死锁(ThreadDeath)
(2)Exception(编码、环境、用户操作输入出现的问题):
a.非检查异常(RuntimeException):
空指针异常(NullPointerException)
数组下标越界异常(ArrayIndexOutOfBoundsException)
类型转换异常(ClassCastException)
算术异常(ArithmeticException)
b.检查异常(CheckException):
文件异常(IOException)
SQL异常(SQL Exception)
结构图:
模拟借书系统
要求:1.定义字符串数组保存图书信息;
2.提示用户输入,分别按“书名”和“图书序号”查找图书;
3.根据输入信息进行适当的异常处理:
(1)如果输入类型错误,抛出“错误命令异常”,并提示重新输入;
(2)如果书名不存在,抛出“图书不存在异常”,并提示重新输入;
(3)如果图书序号超过字符传数组范围,抛出“图书不存在异常”,并提示重新输入。
import java.util.Scanner; public class JieShu { String[] shuming={"论语","计算机组成原理","软件安全"}; int[] shuhao={1,2,3}; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner s=new Scanner(System.in); JieShu js=new JieShu(); int ch=js.shuru(); while(ch!=' '){ if(ch==1){ System.out.println("输入图书名称"); String ming=s.nextLine(); js.shuMing(ming); ch=js.shuru(); } else if(ch==2){ System.out.println("输入图书序号"); int hao=s.nextInt(); s.nextLine(); js.shuHao(hao); ch=js.shuru(); } else{ System.out.println("输入错误,请重新输入!"); ch=js.shuru(); } } } public int shuru(){ System.out.println(); System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书"); Scanner s1=new Scanner(System.in); try{ int ch2=s1.nextInt(); s1.nextLine(); return ch2; }catch(Exception e){ e.printStackTrace();//类型转换异常 //System.out.println("输入错误,请重新输入!"); return -1; } } public void shuMing(String ming){ try{ int i=0; while(i<4){ if(ming.equals(shuming[i])){ System.out.println("book:"+shuming[i]); break; } else i++; }//数组下标越界异常 }catch(Exception e){ e.printStackTrace(); System.out.println("图书不存在!"); } } public void shuHao(int hao){ try{ int i=0; while(i<4){ String shum=shuming[i]; if(hao==i){ System.out.println("book:"+shuming[i]); break; } else i++; }//数组下标越界异常 }catch(Exception e){ e.printStackTrace(); System.out.println("图书不存在!"); } } }
经过多次调试发现上述代码有问题,如每次输入选项(ch)为2,接下来再输入选项(ch)为1,发现存储shuming的String直接赋为0,跳过判断:
是因为nextLine会接收‘\n’换行符,和nextDouble,nextInt等一起使用的时候会接收到上一个输入的换行符,于是需要在第25行、第43行处加上语句s.nextLine(); 。
相关文章推荐
- 关于JAVA的try catch finally的return返回值问题
- java的try-catch-finally块中,finally中的代码是否一定会执行?
- Java try catch finally的执行顺序
- java---try ---catch--finally
- JAVA中try,catch,finally的return研究
- Java异常处理综合例子(try、catch、finally、throws、throw)
- Java中的try catch finally
- Java 异常: try...catch...finally
- java的异常处理机制(try…catch…finally)
- java中try,catch,finally的合理应用
- java中try catch finally与return的执行顺序
- java的异常处理机制(try…catch…finally)
- java中为什么要在try-catch中使用finally
- 关于java中的try-catch-finally语句和return
- Java.异常:自定义异常类,throw,throws,try...catch,finally
- Java异常处理中try,catch,finally的各种组合用法
- java Try/catch/finally 执行顺序
- java的异常处理机制(try…catch…finally)
- java的异常处理机制(try…catch…finally)
- 关于java中的try-catch-finally语句和return