201271050130-滕江南《面向对象程序设计(java)》第十周学习总结
项目
内容
这个作业属于哪个课程
https://www.cnblogs.com/nwnu-daizh/
这个作业的要求在哪里
https://www.cnblogs.com/nwnu-daizh/p/11778090.html
作业学习目标
1.掌握java异常处理技术;
2.了解断言的用法;
3.了解日志的用途;
4.掌握程序基础调试技巧。
第一部分:总结第七章理论知识
一、异常
1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行。所有异常类都是由Throwable继承而来,在下一层分解为两个支:Error(致命错误)和Exception(非致命错误)。
Exception层次结构又分解为两个分支:一个分支派生于RuntimeException;另一个分支包含其他异常。RuntimeException为运行时异常类,一般是程序错误产生。
包含下面几种情况:
·错误的类型转换
·数据访问越界
·访问空指针。
不是派生于RuntimeException的异常包括:
·试图在文件尾部后面读取数据
·试图打开一个不存在的文件。
·试图根据给定的字符串查找Class对象,而这个字符串表示的类不存在。
2.抛出异常:声明抛出异常在方法声明中用throws子句中来指明。
·throws子句可以同时指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛出它们。
·一个方法必须声明该方法所有可能抛出的已检查异常,而未检查异常要么不可控制(Error),要么应该避免发生(RuntimeException)。如果方法没有声明所有可能发生的已检查异常,编译器会给出一个错误消息。
·抛出异常对象通过throw语句来实现。
3.创建异常类
4.自定义异常类:定义一个派生于Exception的直接或间接子类。如一个派生于IOException的类。
5.捕获异常:
(1)捕获异常的第一步是用try{}子句选定捕获异常的代码范围,由try所限定的代码块中的语句在执行过程中可能会自动生成异常对象并抛出。
(2)catch子句:catch块是对异常对象进行处理的代码;
1)每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的各类异常事件;
2)catch语句只需要一个形式参数指明它所能捕获的异常类对象,这个异常类必须是Throwable的子类,运行时系统通过参数值把被抛出的异常对象传递给catch块;
3)catch块可以通过异常对象调用类Throwa。
4)getMessage:用来得到有关异常事件的信息;
5)printStackTrace:用来跟踪异常事件发生时执行堆栈的内容。
6.堆栈跟踪:程序执行中一个方法调用过程的列表,它包含了程序执行过程中方法调用的特定位置。
7.程序编码时异常处理的两种方式:
·积极处理方式:确切知道如何处理的异常应该捕获
·消极处理方式:不知道如何去处理的异常声明抛出
二、断言
1.断言机制允许在测试期间向代码中插入一些检查语句。当代码发布时,这些出入的检测语句会被自动地移走。
2.使用assert关键字使用断言,格式如下:
assert <条件> 或: assert <条件> <表达式>
这两种形式都会对条件进行检测,如果结果为false,则抛出一个AssertionError异常,在第二种形式中,表达式将被传入AssertionError的构造器,并转换成一个消息字符串。
第二部分:实验部分
1、实验目的与要求
(1) 掌握java异常处理技术;
(2) 了解断言的用法;
(3) 了解日志的用途;
(4) 掌握程序基础调试技巧
实验3: 编程练习
(1)编写一个计算器类,可以完成加、减、乘、除的操作;
(2)利用计算机类,设计一个小学生100以内数的四则运算练习程序,由计算机随机产生10道加减乘除练习题,学生输入答案,由程序检查答案是否正确,每道题正确计10分,错误不计分,10道题测试结束后给出测试总分;
(3)将程序中测试练习题及学生答题结果输出到文件,文件名为test.txt;
import java.io.FileNotFoundException;
//文件找不到,说明路径填写错误
import java.io.PrintWriter;
//将对象的格式化表示形式打印到文本输出
import java.util.Scanner;
//简化文本扫描,用于控制台输入
public class ss {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
sf sf=new sf();
PrintWriter output = null;
try {
output = new PrintWriter("ss.txt");
} catch (Exception e) {
//e.printStackTrace();
}
//声明一个类,且类名必须和文件名相同
int sum = 0;
for (int i = 1; i < 11; i++) {
int a = (int) Math.round(Math.random() * 100);
int b = (int) Math.round(Math.random () * 100);
int s = (int) Math.round(Math.random() * 4);
//产生一个100以内的随机数
// Math.round()给定数字的值四舍五入到最接近的整数
// Math.random ()令系统随机选取大于等于0小于1之间的随机数
switch(s)
{
case 1: //随机相除验证
System.out.println(i+": "+a+"/"+b+"=");
while(b==0){
b = (int) Math.round(Math.random() * 100);
}
double c = in.nextDouble();
output.println(a+"/"+b+"="+c);
if (c == sf.chu_fa(a, b)) {
sum += 10;
System.out.println("答案正确");
}
else {
System.out.println("答案错误");
} break;
case 2://随机数相乘验证
System.out.println(i+": "+a+"*"+b+"=");
int c1 = in.nextInt();
output.println(a+"*"+b+"="+c1);
if (c1 == sf.chen_fa(a, b)) {
sum += 10;
System.out.println("答案正确");
}
else {
System.out.println("答案错误");
}break;
case 3: //随机数相加验证
System.out.println(i+": "+a+"+"+b+"=");
int c2 = in.nextInt();
output.println(a+"+"+b+"="+c2);
if (c2 == sf.jia_fa(a, b)) {
sum += 10;
System.out.println("答案正确");
}
else {
System.out.println("答案错误");
}break ;
case 4: //随机数相减验证
System.out.println(i+": "+a+"-"+b+"=");
int c3 = in.nextInt();
output.println(a+"-"+b+"="+c3);
if (c3 == sf.jian_fa(a, b)) {
sum += 10;
System.out.println("答案正确");
}
else {
System.out.println("答案错误");
}break ;
}
}
System.out.println("成绩"+sum);
output.println("成绩:"+sum);
output.close();
}
}
public class sf //定义加减乘除运算
{
private int a;
private int b;
public int jia_fa(int a,int b)
{
return a+b;
}
public int jian_fa(int a,int b)
{
if((a-b)<0)
return 0;
else
return a-b;
}
public int chen_fa(int a,int b)
{
return a*b;
}
public int chu_fa(int a,int b)
{
if(b!=0)
return a/b;
else
return 0;
}
}
第三部分:实验总结。
这周主要学习了java异常处理技术,程序的执行过程中所发生的异常事件,它中断指令的正常执行。由于目前我对于各项基础知识都是从零开始,在课堂上只能基本理解异常的概念分类。
代码对我来讲太可怕了,我拿到题目有基本的逻辑思路,但是我写不出来。如上题目:在100以内产生随机数,进行加减乘除的运算,判断输入值是否正确,得分进行累加进行输出,将答题情况输出到文件。随机数该如何产生?如何将随机数分配到加减乘除的函数中输出?计算正确如何将分数进行累加输出?涉及到函数类的定义、基本运算、输入提取、判断语句、循环语句、文件的读取和输出。
我看了网上写的程序,也有很多地方不理解,运行也运行不出来,这作业做得我心塞塞。自己没有做出来不如实话实说。编程方面一口气也吃不成一个大胖子,必须从基础开始打起。我只能复制别人的代码,逐字逐句去理解,为什么要写这句代码,怎么定义函数算法。我会从基础的慢慢练习,尽快赶上大家的进度水平。