慕课网-java入门第三季
——第一章 异常与异常处理
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(); 。
版权声明:本文为Li_Jiaqian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。