#20175310 《Java程序设计》第6周学习总结 本周博客: 《20175310 类定义 - 20175310xcy - 博客园 》https://www.cnblogs.com/xicyannn/p/10653168.html 《20175310结对编程项目-四则运算 阶段总结博客 - 20175310xcy - 博客园 》https://www.cnblogs.com/xicyannn/p/10634482.htmlhtml
教材学习内容总结
这周学习了第七章和第十章,主要内容以下: 第七章: 1.学习了类的另外一个成员:内部类,包含内部类的类叫内部类的外嵌类。 2.内部类和外嵌类的关系: ①外嵌类的成员变量在内部类中仍然有效,内部类的方法也可调用外嵌类的方法 ②内部类不能够声明变量和类方法,外嵌类能够用内部类声明对象以做为外嵌类成员 ③内部类仅供他的外嵌类使用 3.外嵌类的成员变量在内部类中仍然有效,使得内部类和外嵌类的交互更加方便git
第十章: 程序在运行期间,可能须要从外部的存储媒介或其余程序中读入所须要的数据,这就须要使用输入流。输入流的指向称为它的源,程序经过输入流读取源中的数据。另外一方面,程序在处理数据后,可能须要将处理的结果写入到永久的存储媒介中或传送给其余的应用程序,这就须要使用输出流。输出流的指向称为它的目的地,程序经过输出流把数据传送到目的地。虽然IO流常常与磁盘文件存取有关,可是源和目的地也能够是键盘、内存或显示器窗口。编程
教材学习中的问题和解决过程
-
问题1: 书上319页第十章课后习题回答错误
dom
-
问题1解决方案: 根据答案提示,这里应用到了10.3的知识点,应该用
FileOutputStream
类实现文件字节输出流。学习
代码调试中的问题和解决过程
- 问题2: 在完成结对项目时遇到了问题,表达式是一个数字一个运算符独立输出的,所以在系统看来表达式并非一个总体
- 问题2解决方案: 经过字符串拼接的方式将生成的随机数和运算符读取到字符串
Question
中:
String Question = new String(""); //系统随机生成的表达式
for (int j=1;j<=a+1;j++) { int b = random.nextInt(10) ; //生成0到9之间的随机数b,表示表达式中出现的随机数,共a+1个 System.out.print(b); //将生成的随机数输出 if (j <= a) { fuhao k = new fuhao(); //声明类fuhao的对象k char q = k.yunsuanfu(); //产生一个运算符q System.out.print(q); //将生成的随机符号输出 Question = Question + b +q; //将生成的随机数和随机符号存入Question中 } else{ Question = Question + b; //将生成的随机数存入Question中 } }
- 问题3: 在完成类定义做业时,不会覆盖
equals
方法 - 问题3解决方案:
equals
方法的重写以前没有学过,书上的和以前作的练习主要都是讲怎么用equals
方法,对于怎么重写没有提到。我在网上参考了《重写equals方法》这篇博客,完成了这部分的代码:
public boolean equals(Object obj) { //覆盖了父类Object中的equlas方法。 if (this == obj) //判断是否为同一对象 return true; if (obj == null ) //判断是否为空 return false; if (getClass() != obj.getClass()) //判断是否属于同一个类 return false; Book book = (Book) obj; ////若是类型相同,比较内容 if (bookName == null) { if (book.bookName != null) return false; } else if (!bookName.equals(book.bookName)) return false; if (author == null) { if (book.author != null) return false; } else if (!author.equals(book.author)) return false; if (press == null) { if (book.press != null) return false; } else if (!press.equals(book.press)) return false; if (pubDate == null) { if (book.pubDate != null) return false; } else if (!pubDate.equals(book.pubDate)) return false; return true; } public int hashCode() { //重写hashcode final int prime = 31; int result = 1; result = prime * result + ((bookName == null) ? 0 : bookName.hashCode()); result = prime * result + ((author == null) ? 0 : author.hashCode()); result = prime * result + ((press == null) ? 0 : press.hashCode()); result = prime * result + ((pubDate == null) ? 0 : pubDate.hashCode()); return result; }
这里须要注意的一点是:在这篇博客里,做者有提到重写equals
方法必定要重写hashcode
方法。由于散列码(hashcode)是由对象导出的一个整数值,它是没有规律的。每一个对象基本上对应惟一的一个散列码。所以重写equals
与hashcode
定义必须一致:若是a.equals(b)
返回true
,那么a.hashcode()
和b.hashcode()
必须具备相同的值。this
代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 6/6 | 2/2 | 30/30 | |
第二周 | 625/631 | 3/5 | 35/65 | |
第三周 | 660/1291 | 2/7 | 38/103 | |
第四周 | 972/2263 | 2/9 | 30/133 | |
第五周 | 399/2662 | 3/12 | 32/165 | |
第六周 | 1342/4004 | 3/15 | 35/200 |