项目

内容

这个作业属于哪个课程

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以内产生随机数,进行加减乘除的运算,判断输入值是否正确,得分进行累加进行输出,将答题情况输出到文件。随机数该如何产生?如何将随机数分配到加减乘除的函数中输出?计算正确如何将分数进行累加输出?涉及到函数类的定义、基本运算、输入提取、判断语句、循环语句、文件的读取和输出。

我看了网上写的程序,也有很多地方不理解,运行也运行不出来,这作业做得我心塞塞。自己没有做出来不如实话实说。编程方面一口气也吃不成一个大胖子,必须从基础开始打起。我只能复制别人的代码,逐字逐句去理解,为什么要写这句代码,怎么定义函数算法。我会从基础的慢慢练习,尽快赶上大家的进度水平。

 

201271050130-滕江南《面向对象程序设计(java)》第十周学习总结的更多相关文章

  1. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  2. 201871010132-张潇潇《面向对象程序设计(java)》第一周学习总结

    面向对象程序设计(Java) 博文正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...

  3. 扎西平措 201571030332《面向对象程序设计 Java 》第一周学习总结

    <面向对象程序设计(java)>第一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ...

  4. 201871010115——马北《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  5. 杨其菊201771010134《面向对象程序设计Java》第二周学习总结

    第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...

  6. 201871010124 王生涛《面向对象程序设计JAVA》第一周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://edu.cnblogs.com/campus/xbsf/ ...

  7. 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  8. 201871010132——张潇潇《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. 201771010123汪慧和《面向对象程序设计Java》第二周学习总结

    一.理论知识部分 1.标识符由字母.下划线.美元符号和数字组成, 且第一个符号不能为数字.标识符可用作: 类名.变量名.方法名.数组名.文件名等.第二部分:理论知识学习部分 2.关键字就是Java语言 ...

  10. 20155303 2016-2017-2 《Java程序设计》第十周学习总结

    20155303 2016-2017-2 <Java程序设计>第十周学习总结 目录 学习内容总结 网络编程 数据库 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考 ...

随机推荐

  1. Shell—输入输出重定向

    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...

  2. ifconfig|grep eth0|awk '{print $5}' 命令详解

    因需要将linx下获取某个网中的MAC地址,可以使用如下命令获取: ifconfig|grep eth0|awk '{print $5}' ifconfig: 输出linux下所有网口的信息(包括IP ...

  3. MYSQL高可用集群架构-MHA架构

    1  MHA简介:MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司 ...

  4. 《Java面试全解析》505道面试题详解

    <Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...

  5. Java连载40-参数传递、this关键字

    一.对象和引用 1.对象:目前在使用new运算符在堆内存中开辟的内存空间成为对象. 2.引用:是一个变量,不一定是局部变量,好可能是成员变量,引用保存了内存地址,指向了堆内存中对象.所有访问实例的相关 ...

  6. python面试题及答案 2019

    利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法. 正解1: def trim(s): while s[:1] == ' ': s = s[1:] ...

  7. css top,right,bottom,left设置为0有什么用?它和width:100%和height:100%有什么区别?

     壹 ❀ 引 当我们使用position属性时,总免不了与top,left,right,bottom四个属性打交道,那么这四个属性都设置为0时有什么用,与宽高设置100%又有什么区别?本文对此展开讨论 ...

  8. Selenium+java - 关于富文本编辑器的处理

    什么是富文本编辑器? 富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器.具体长啥样,如下图: 通过自动化操作富文本编辑器 模拟场景:在富文 ...

  9. Springboot访问静态资源&WebJars&图标&欢迎页面

    目录 概述 1.访问WebJar资源 2.访问静态资源 3.favicon.ico图标 4.欢迎页面 概述 使用Springboot进行web开发时,boot底层实际用的就是springmvc,项目中 ...

  10. 多线程通信的两种方式? (可重入锁ReentrantLock和Object)

    (一)Java中线程协作的最常见的两种方式: (1)利用Object的wait().notify()和notifyAll()方法及synchronized (2)使用Condition.Reentra ...