7-1 jmu-Java-06异常-01-常见异常

自己编码以产生常见异常。

main方法:
事先定义好一个大小为5的数组。
根据屏幕输入产生相应异常。
提示:可以使用System.out.println(e)打印异常对象的信息,其中e为捕获到的异常对象。

输入说明:
arr 代表产生访问数组是产生的异常。然后输入下标,如果抛出ArrayIndexOutOfBoundsException异常则显示,如果不抛出异常则不显示。
null,产生NullPointerException
cast,尝试将String对象强制转化为Integer对象,产生ClassCastException。
num,然后输入字符,转化为Integer,如果抛出NumberFormatException异常则显示。
其他,结束程序。
输入样例:

arr 4
null
cast
num 8
arr 7
num a
other

输出样例:

java.lang.NullPointerException
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
java.lang.ArrayIndexOutOfBoundsException: 7
java.lang.NumberFormatException: For input string: "a"

异常处理学的不好,第一道题思路不清晰,参见:https://blog.csdn.net/weixin_48419914/article/details/121228852

import java.util.Scanner;public class Main {public static void main(String[] args) {int []nums = new int[5];Scanner in = new Scanner(System.in);String str = in.next();while(str.equals("other")==false) {try {if(str.equals("null")) {throw new NullPointerException();}else if(str.equals("arr")) {int index = in.nextInt();if(index>4||index<0) {throw new ArrayIndexOutOfBoundsException(""+index);}}else if(str.equals("cast")) {throw new ClassCastException("java.lang.String cannot be cast to java.lang.Integer");}else if(str.equals("num")) {String num = in.next();if(!(num.charAt(0)>='0'&&num.charAt(0)<='9')) {throw new NumberFormatException("For input string: \""+num+"\"");}}}catch (Exception e) {System.out.println(e);}str = in.next();}}
}

7-2 jmu-Java-06异常-02-使用异常机制处理异常输入

使用异常处理输入机制,让程序变得更健壮。

main方法:
输入n,创建大小为n的int数组。
输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
使用Arrays.toString输出数组中的内容。
输入样例:

5
1
2
a
b
4
5
3

输出样例:

java.lang.NumberFormatException: For input string: "a"
java.lang.NumberFormatException: For input string: "b"
[1, 2, 4, 5, 3]
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] arr = new int[n];for (int i = 0; i < n; i++) {try {String num = sc.next();arr[i] = Integer.parseInt(num);} catch (Exception e) {System.out.println(e);i--;}}System.out.println(Arrays.toString(arr));}
}

7-3 jmu-Java-06异常-04-自定义异常(综合)

定义IllegalScoreException异常类,代表分数相加后超出合理范围的异常。该异常是checked exception,即希望该异常一定要被捕获处理。

定义IllegalNameException异常类,代表名字设置不合理的异常。该异常是unchecked exception

定义Student类。

属性:

private String name;
private int score;
方法:

toString //自动生成
setter/getter //自动生成
改造setName //如果姓名首字母为数字则抛出IllegalNameException
public int addScore(int score) //如果加分后分数<0 或>100,则抛出IllegalScoreException,加分不成功。
main方法
输入new则新建学生对象。然后输入一行学生数据,格式为姓名 年龄,接着调用setName,addScore。否则跳出循环。
setName不成功则抛出异常,并打印异常信息,然后继续下一行的处理。
addScore不成功则抛出异常,并打印异常信息,然后继续下一行的处理。如果2、3都成功,则打印学生信息(toString)
如果在解析学生数据行的时候发生其他异常,则打印异常信息,然后继续下一行的处理。
Scanner也是一种资源,希望程序中不管有没有抛出异常,都要关闭。关闭后,使用System.out.println(“scanner closed”)打印关闭信息
注意:使用System.out.println(e);打印异常信息,e为所产生的异常。

输入样例:

new
zhang 10
new
wang 101
new
wang30
new
3a 100
new
wang 50
other

输出样例:

Student [name=zhang, score=10]
IllegalScoreException: score out of range, score=101
java.util.NoSuchElementException
IllegalNameException: the first char of name must not be digit, name=3a
Student [name=wang, score=50]
scanner closed
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String str = sc.next();if (str.equals("new") == false) {sc.close();System.out.println("scanner closed");break;}Student stu = new Student();sc.nextLine();String[] msg = sc.nextLine().split(" ");try {String name = msg[0];int score = Integer.parseInt(msg[1]);stu.setName(name);stu.addScore(score);System.out.println(stu);} catch (IllegalScoreException e) {System.out.println(e);} catch (IllegalNameException e) {System.out.println(e);} catch (Exception e) {System.out.println("java.util.NoSuchElementException");}}}
}class IllegalScoreException extends Exception {String msg;public IllegalScoreException(String msg) {this.msg = msg;}public String toString() {return "IllegalScoreException: score out of range, score=" + msg;}
}class IllegalNameException extends RuntimeException {String msg;public IllegalNameException(String msg) {this.msg = msg;}public String toString() {return "IllegalNameException: the first char of name must not be digit, name=" + msg;}
}class Student {private String name;private int score;@Overridepublic String toString() {return "Student [" +"name=" + name +", score=" + score +']';}public int addScore(int score) throws IllegalScoreException {if (this.score + score < 0 || this.score + score > 100)throw new IllegalScoreException(Integer.toString(this.score + score));setScore(this.score + score);return 0;}public String getName() {return name;}public void setName(String name) {if (name.charAt(0) >= '0' && name.charAt(0) <= '9')throw new IllegalNameException(name);this.name = name;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}
}

7-4 天不假年

程序填空题。根据题目要求完善下面的代码。请提交完整代码。
“今年50,明年18”是一个美好的愿望。人的年龄只能不断增长。
Person类的setAge方法用于更新年龄。
如果新的年龄比原来的年龄小,则输出B表示发现异常,否则输出A表示正常。

import java.util.Scanner;
public class Main{public static void main(String[] args){Scanner in = new Scanner(System.in);int age;age = in.nextInt();Person p = new Person(age);        age = in.nextInt();try{p.setAge(age); }catch(AgeException e){             }       }
}
class Person{int age;public Person(int age){this.age = age;}public void setAge(int age) throws AgeException {if(this.age <=age){this.age = age;}else{throw new AgeException();}}
}
class AgeException extends Exception{}

输入格式:
输入在一行中给出2个绝对值不超过100的正整数A和B。

输出格式:
在一行中输出一个字符A或者B。

输入样例:

50 18

输出样例:

B
import java.util.Scanner;
public class Main{public static void main(String[] args){Scanner in = new Scanner(System.in);int age;age = in.nextInt();Person p = new Person(age);age = in.nextInt();try{p.setAge(age);}catch(AgeException e){System.out.println(e.getMessage());}}
}
class Person{int age;public Person(int age){this.age = age;}public void setAge(int age) throws AgeException {if(this.age <=age){this.age = age;System.out.println("A");}else{throw new AgeException("B");}}
}
class AgeException extends Exception{public AgeException(String msg){super(msg);}
}

7-5 成绩录入时的及格与不及格人数统计

编写一个程序进行一个班某门课程成绩的录入,能够控制录入成绩总人数,对录入成绩统计其及格人数和不及格人数。设计一个异常类,当输入的成绩小0分或大于100分时,抛出该异常类对象,程序将捕捉这个异常对象,并调用执行该异常类对象的toString()方法,该方法获取当前无效分数值,并返回一个此分数无效的字符串。

输入格式:
从键盘中输入学生人数n

从键盘中输入第1个学生的成绩

从键盘中输入第2个学生的成绩

从键盘中输入第n个学生的成绩

(注:当输入的成绩无效时(即分数为小于0或大于100)可重新输入,且输出端会输出此分数无效的提醒。)

输出格式:
显示及格总人数

显示不及格总人数

输入样例:
在这里给出一组输入。例如:

3
100
30
60

输出样例:
在这里给出相应的输出。例如:

2
1

输入样例:
在这里给出一组输入。例如:

2
200
69
30

输出样例:
在这里给出相应的输出。例如:

200invalid!
1
1
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int yes = 0;int no = 0;for (int i = 0; i < n; i++) {int score = sc.nextInt();try {if (score < 0 || score > 100) {throw new IllegalScoreException(Integer.toString(score));} else {if (score >= 60) {yes++;} else {no++;}}} catch (IllegalScoreException e) {System.out.println(e);i--;}}System.out.println(yes + "\n" + no);}
}class IllegalScoreException extends Exception {String msg;public IllegalScoreException(String msg) {this.msg = msg;}public String toString() {return msg + "invalid!";}
}

PTAJava实验六相关推荐

  1. 实验六 快速生成树配置

    实验六 快速生成树配置 1.准备工作: 工具:1台3层交换机,1台2层交换机,网线 (1)      开始 --> 控制面板 --> 程序 --> 程序和功能 --> 打开或关 ...

  2. 建立计算机系学生视图,实验六 视图的操作.doc

    实验六 视图的操作 实验六 视图的操作 一.实验目的 1.理解的概念. .掌握.SQL语句创建视图,掌握查询分析器的使用 1.语句格式 CREATE VIEW [( [,]-)] AS [WITH C ...

  3. mysql实验6语言结构_实验六 SQL语言数据查询语言DQL.pdf

    实验六 SQL语言数据查询语言DQL 实验六 SQL 语言数据查询语言DQL 一.实验目的 数据查询语言指对数据库中的数据查询.统计.分组.排序等操作.查询语 句可以分为简单查询.连接查询.嵌套查询和 ...

  4. 滞后超前校正控制器的设计和matlab仿真 静态速度误差系数为10,自控实验六 基于频域的串联校正控制器设置 - GXUZF.COM - 林澈思的茶...

    广西大学电气工程学院 <自动控制理论>实验报告 广西大学电气工程学院 <自动控制理论>实验报告 成绩 教师签字 学生姓名 赵帆 学号 17021***** 专业班级 电自171 ...

  5. 20155201 网络攻防技术 实验六 信息搜集与漏洞

    20155201 网络攻防技术 实验六 信息搜集与漏洞 一.实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 漏洞扫描: ...

  6. java实验七输入输出流_实验六_Java的输入输出流

    JAVA的输入输出流 实验六 Java的输入输出流 实验目的 1. 理解I/O流的概念,掌握其分类 2. 掌握文本文件读写.二进制文件读写 实验环境 JDK1.4以上版本, Eclipse集成开发环境 ...

  7. 计算机网络 实验六 静态路由配置,实验六-静态路由配置.doc

    实验六-静态路由配置 实验报告书 课程名称 计算机网络技术与应用 实验题目 实验六:静态路由配置 专业班级 2010级信息管理与信息系统2班 学 号 37号 姓 名 肖丹妮 指导教师 赵圆圆老师 计算 ...

  8. 实验六 Linux进程编程,Linux系统编程实验六:进程间通信

    <Linux系统编程实验六:进程间通信>由会员分享,可在线阅读,更多相关<Linux系统编程实验六:进程间通信(10页珍藏版)>请在人人文库网上搜索. 1.实验六:进程间通信l ...

  9. linux编译内核实验,实验六 Linux内核编译实验.doc

    实验六 Linux内核编译 讲师:杨行 [实验目的] 1.掌握Linux内核编译 2.了解Linux内核Makefile 3.了解Linux内核Kbuild系统 [实验原理] 网站可以下载标准内核文件 ...

最新文章

  1. python归并排序 分词_python-归并排序
  2. django【orm操作】
  3. 嵌入式的坑在哪方面?
  4. vue使用iview Timeline 时间轴不显示问题
  5. 【随笔】写在2014年的第一天
  6. JDK源码 - BitSet的实现
  7. rabbitmq rpc
  8. 对于vsftp writable anonymous root问题的解决
  9. [转]从网页Web上调用本地应用程序(.jar、.exe)的主流处理方法
  10. 拓端tecdat|R语言和Stan,JAGS:用rstan,rjags建立贝叶斯多元线性回归预测选举数据
  11. DASCTF2022.07赋能赛 - Pwn easyheap
  12. Word表格之VBA知识
  13. VS2019 关闭安全检查
  14. POG个体成长模型:痛苦是成长的起点
  15. Windows11 dev 回退到beta
  16. PAT 乙级 1100 校庆
  17. ES6 Proxy和Reflect
  18. 笔记25 笨办法习题35分支和函数路线图
  19. 数据中心冷水机组案例浅析
  20. ios harmonyos,MIUI 13,IOS 15,鸿蒙OS系统 六月份齐上线,一文了解都有哪些升级与亮点...

热门文章

  1. 安卓11?快!扶我起来继续学
  2. 数据结构和算法——用动态规划求解最短路径问题
  3. MATLAB | 两款粒子爱心 复刻《点燃我,温暖你》
  4. 从零开发商城系统 系统功能模块整理
  5. 量子通信(QKD)与BB84协议
  6. 用户登录查全表好还是用用户名好_白杨SEO:长尾关键词挖掘工具哪个好?5118站长工具功能大全看这...
  7. QT在线简体中文文档
  8. [全流程案例]壮汉:1. 起大形(Blender)
  9. Tableau同环比分析系列(一)--基础同比、环比
  10. 知意配音上线视频配音功能,不会pr的有救了